| 555 | // *********************************************************************** |
| 556 | |
| 557 | void EndObject2D() { |
| 558 | if (pRenderState->mode == ERenderMode::None) // TODO Call errors when this is incorrect |
| 559 | return; |
| 560 | |
| 561 | DrawCommand cmd; |
| 562 | |
| 563 | cmd.type = pRenderState->typeState; |
| 564 | |
| 565 | // fill vertex buffer |
| 566 | // TODO: this pattern is repeated, could refactor out into function such as FillTransientBuffer |
| 567 | u32 numVertices = (u32)pRenderState->vertexState.count; |
| 568 | VertexData* pDestBuffer = pRenderState->perFrameVertexBuffer.pData + pRenderState->perFrameVertexBuffer.count; |
| 569 | if (pRenderState->perFrameVertexBuffer.count + numVertices > MAX_VERTICES_PER_FRAME) |
| 570 | return; |
| 571 | memcpy(pDestBuffer, pRenderState->vertexState.pData, numVertices * sizeof(VertexData)); |
| 572 | cmd.vertexBufferOffset = (i32)pRenderState->perFrameVertexBuffer.count * sizeof(VertexData); |
| 573 | cmd.numElements = numVertices; |
| 574 | pRenderState->perFrameVertexBuffer.count += numVertices; |
| 575 | |
| 576 | // Submit draw call |
| 577 | Matrixf ortho = Matrixf::Orthographic(0.0f, pRenderState->targetResolution.x, 0.0f, pRenderState->targetResolution.y, -100.0f, 100.0f); |
| 578 | cmd.vsUniforms.mvp = ortho * pRenderState->matrixStates[(u64)EMatrixMode::Model][-1]; |
| 579 | cmd.vsUniforms.model = pRenderState->matrixStates[(u64)EMatrixMode::Model][-1]; |
| 580 | cmd.vsUniforms.modelView = pRenderState->matrixStates[(u64)EMatrixMode::View][-1] * pRenderState->matrixStates[(u64)EMatrixMode::Model][-1]; |
| 581 | cmd.vsUniforms.lightingEnabled = 0; |
| 582 | cmd.vsUniforms.lightDirection[0] = 0.f; |
| 583 | cmd.vsUniforms.lightDirection[1] = 0.f; |
| 584 | cmd.vsUniforms.lightDirection[2] = 0.f; |
| 585 | cmd.vsUniforms.lightColor[0] = 0.f; |
| 586 | cmd.vsUniforms.lightColor[1] = 0.f; |
| 587 | cmd.vsUniforms.lightColor[2] = 0.f; |
| 588 | cmd.vsUniforms.lightAmbient = Vec3f(0.0); |
| 589 | cmd.vsUniforms.targetResolution = pRenderState->targetResolution; |
| 590 | cmd.vsUniforms.fogEnabled = 0; |
| 591 | cmd.vsUniforms.fogDepths = Vec2f(0.0); |
| 592 | cmd.fsUniforms.fogColor = Vec4f(0.0); |
| 593 | |
| 594 | cmd.indexedDraw = false; |
| 595 | |
| 596 | if (pRenderState->textureState.id != SG_INVALID_ID) { |
| 597 | cmd.texturedDraw = true; |
| 598 | cmd.texture = pRenderState->textureState; |
| 599 | } else { |
| 600 | cmd.texturedDraw = false; |
| 601 | } |
| 602 | pRenderState->drawList2D.PushBack(cmd); |
| 603 | |
| 604 | pRenderState->vertexState.count = 0; |
| 605 | pRenderState->vertexColorState = Vec4f(1.0f); |
| 606 | pRenderState->vertexTexCoordState = Vec2f(); |
| 607 | pRenderState->vertexNormalState = Vec3f(); |
| 608 | pRenderState->mode = ERenderMode::None; |
| 609 | } |
| 610 | |
| 611 | // *********************************************************************** |
| 612 |
no outgoing calls
no test coverage detected