aboutsummaryrefslogtreecommitdiff
path: root/source/Renderer.cpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2022-04-30 13:55:20 -0700
committerrtk0c <[email protected]>2022-04-30 13:55:20 -0700
commit453e1df6fb7a5847c8a5b26bd8479451091fb69d (patch)
treee0753be4c78535a3d2697c8b7be4123b76d2ad0d /source/Renderer.cpp
parentac153a0a9463e3877fb0066e3603b6bf15fe6706 (diff)
Changeset: 20 Add ImGuizmo for GameObjects, start to make things actually render
Diffstat (limited to 'source/Renderer.cpp')
-rw-r--r--source/Renderer.cpp39
1 files changed, 26 insertions, 13 deletions
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);