From 242317c1f7f2a6abdfbdbc99d5297539bbdc842f Mon Sep 17 00:00:00 2001 From: hnOsmium0001 Date: Sat, 30 Apr 2022 13:55:20 -0700 Subject: Add ImGuizmo for GameObjects, start to make things actually render --- source/Renderer.cpp | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) (limited to 'source/Renderer.cpp') diff --git a/source/Renderer.cpp b/source/Renderer.cpp index f96c3a0..99fc84d 100644 --- a/source/Renderer.cpp +++ b/source/Renderer.cpp @@ -99,10 +99,12 @@ void RenderObject::DeleteGLObjects() { void Renderer::BeginFrame(Camera& camera, float currentTime, float deltaTime) { assert(mInsideFrame == false); mInsideFrame = true; - mFrame_Cam = &camera; - mFrame_Transform = camera.CalcProjectionMatrix() * camera.CalcViewMatrix(); - mFrame_Time = currentTime; - mFrame_DeltaTime = deltaTime; + mFrame.camera = &camera; + mFrame.matrixView = camera.CalcViewMatrix(); + mFrame.matrixProj = camera.CalcProjectionMatrix(); + mFrame.matrixCombined = mFrame.matrixProj * mFrame.matrixView; + mFrame.time = currentTime; + mFrame.deltaTime = deltaTime; } void Renderer::EndFrame() { @@ -125,19 +127,30 @@ void Renderer::Draw(const RenderObject* objects, size_t count) { glUseProgram(shader->GetProgram()); + // Material uniforms + mat->UseUniforms(); + + // Next available texture unit ID after all material textures + int texIdx = mat->GetTextures().size(); + // Autofill uniforms - if (shader->autofillLoc_Transform != kInvalidLocation) { - glUniformMatrix4fv(shader->autofillLoc_Transform, 1, GL_FALSE, &mFrame_Transform[0][0]); + if (shader->autofill_Transform != kInvalidLocation) { + glUniformMatrix4fv(shader->autofill_Transform, 1, GL_FALSE, &mFrame.matrixCombined[0][0]); } - if (shader->autofillLoc_Time != kInvalidLocation) { - glUniform1f(shader->autofillLoc_Time, mFrame_Time); + if (shader->autofill_Time != kInvalidLocation) { + glUniform1f(shader->autofill_Time, mFrame.time); } - if (shader->autofillLoc_DeltaTime != kInvalidLocation) { - glUniform1f(shader->autofillLoc_DeltaTime, mFrame_DeltaTime); + if (shader->autofill_DeltaTime != kInvalidLocation) { + glUniform1f(shader->autofill_DeltaTime, mFrame.deltaTime); + } + if (shader->autofill_TextureAtlas != kInvalidLocation && + object.autofill_TextureAtlas != nullptr) + { + glActiveTexture(GL_TEXTURE0 + texIdx); + glBindTexture(GL_TEXTURE_2D, object.autofill_TextureAtlas->GetHandle()); + glUniform1i(shader->autofill_TextureAtlas, texIdx); + ++texIdx; } - - // Material uniforms - mat->UseUniforms(); glBindVertexArray(object.GetGLVao()); glDrawElements(GL_TRIANGLES, indexBuffer->count, indexBuffer->GetIndexTypeGL(), 0); -- cgit v1.2.3-70-g09d2