aboutsummaryrefslogtreecommitdiff
path: root/source/Renderer.cpp
diff options
context:
space:
mode:
authorhnOsmium0001 <[email protected]>2022-04-30 13:55:20 -0700
committerhnOsmium0001 <[email protected]>2022-04-30 13:55:20 -0700
commit242317c1f7f2a6abdfbdbc99d5297539bbdc842f (patch)
tree4ccaae8f20b9b2534022419eb9eb7744b913cac7 /source/Renderer.cpp
parent5f467c899d1024b01c0d7ba86d9ac2f28878eb55 (diff)
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);