From b7ffc48525a2987a6b49f22e095433d94d1aff71 Mon Sep 17 00:00:00 2001 From: Joey Pollack Date: Wed, 24 Aug 2022 20:45:53 -0400 Subject: [PATCH] Scene cleaned up a bit --- src/renderer/renderer2D.cpp | 26 +++++++++++---- src/renderer/shaders/line.vert | 2 +- .../testbed/scenes/simple_render_scene.cpp | 32 +++++++++++++++---- .../testbed/scenes/simple_render_scene.h | 9 ++++++ 4 files changed, 56 insertions(+), 13 deletions(-) diff --git a/src/renderer/renderer2D.cpp b/src/renderer/renderer2D.cpp index 6558e67..aff3def 100644 --- a/src/renderer/renderer2D.cpp +++ b/src/renderer/renderer2D.cpp @@ -231,22 +231,31 @@ namespace lunarium } glm::mat4 model = glm::mat4(1.0f); - glm::rotate(model, angle, glm::vec3(0.0f, 0.0f, 1.0f)); + model = glm::translate(model, glm::vec3(point_a.x, point_a.y, 0.0f)); + //model = glm::rotate(model, angle, glm::vec3(0.0f, 0.0f, 1.0f)); // V1 LineData::Vertex v1; int vert_size = sizeof(LineData::Vertex); - //glm::vec4 long_pos = glm::vec4(point_a.x, point_a.y, 0.0f, 1.0f) * model; - v1.pos = point_a;//glm::vec2(long_pos.x, long_pos.y); + glm::vec4 long_pos = model * glm::vec4(-0.5f, 0.0f, 0.0f, 1.0f); + v1.pos = glm::vec2(long_pos.x, long_pos.y); + // v1.translate = glm::vec3(point_a.x, point_a.y, 0.0f); v1.color = color; + //v1.angle = angle; memcpy(&mLineData.RawVertexBuffer[mLineData.RawBufferIndex], &v1, vert_size); mLineData.RawBufferIndex += 1; + model = glm::mat4(1.0f); + model = glm::translate(model, glm::vec3(point_b.x, point_b.y, 0.0f)); + // model = glm::rotate(model, angle, glm::vec3(0.0f, 0.0f, 1.0f)); + // V2 LineData::Vertex v2; - //long_pos = glm::vec4(point_b.x, point_b.y, 0.0f, 1.0f) * model; - v2.pos = point_b;//glm::vec2(long_pos.x, long_pos.y); + long_pos = model * glm::vec4(0.5f, 0.0f, 0.0f, 1.0f); + v2.pos = glm::vec2(long_pos.x, long_pos.y); + // v2.translate = glm::vec3(point_b.x, point_b.y, 0.0f); v2.color = color; + //v2.angle = angle; memcpy(&mLineData.RawVertexBuffer[mLineData.RawBufferIndex], &v2, vert_size); mLineData.RawBufferIndex += 1; @@ -256,7 +265,7 @@ namespace lunarium void Renderer2D::DrawBox(Rectangle box, Color color, float thickness, float angle) { - Logger::Warn(LogCategory::GRAPHICS, "Renderer2D::DrawBox is not implemented yet"); + } void Renderer2D::DrawEllipse(glm::vec2 center_point, glm::vec2 radii, Color color, bool filled, float thickness, float angle) @@ -304,6 +313,9 @@ namespace lunarium glDrawElements(GL_TRIANGLES, mQuadData.NumQuads * 6, GL_UNSIGNED_INT, nullptr); + // Checking how the rotation looks when lines are drawn instead + //glDrawArrays(GL_LINES, 0, mQuadData.NumQuads * 4); + // mQuadData.WireFrameShader->Use(); // uprojview.Location = -1; // mQuadData.WireFrameShader->SetUniform(uprojview, (void*)glm::value_ptr(mpCamera->GetViewProjection())).LogIfFailed(LogCategory::GRAPHICS); @@ -433,7 +445,9 @@ namespace lunarium OpRes Renderer2D::InitLineData() { mLineData.BufferLayout.PushVertexAttribute(VertexAttribute { VertexAttributeType::FLOAT32, 2 }); // Position + // mLineData.BufferLayout.PushVertexAttribute(VertexAttribute { VertexAttributeType::FLOAT32, 3 }); // Translate mLineData.BufferLayout.PushVertexAttribute(VertexAttribute { VertexAttributeType::FLOAT32, 4 }); // Color + // mLineData.BufferLayout.PushVertexAttribute(VertexAttribute { VertexAttributeType::FLOAT32, 1 }); // angle mLineData.VertexBuffer = VertexBuffer::Create(mLineData.BufferLayout, mLineData.MaxVertices); mLineData.RawVertexBuffer = new LineData::Vertex[mLineData.MaxVertices]; diff --git a/src/renderer/shaders/line.vert b/src/renderer/shaders/line.vert index 33e54b2..91dc104 100644 --- a/src/renderer/shaders/line.vert +++ b/src/renderer/shaders/line.vert @@ -9,6 +9,6 @@ uniform mat4 projview; void main() { - o_Color = color; + o_Color = color;//vec4(angle / 10.0, 0.0, 0.0, 1.0); gl_Position = projview * vec4(position, 0.0, 1.0); } \ No newline at end of file diff --git a/src/run_modes/testbed/scenes/simple_render_scene.cpp b/src/run_modes/testbed/scenes/simple_render_scene.cpp index 8dc2a7f..98eeb9d 100644 --- a/src/run_modes/testbed/scenes/simple_render_scene.cpp +++ b/src/run_modes/testbed/scenes/simple_render_scene.cpp @@ -27,7 +27,7 @@ namespace lunarium { SimpleRenderScene::SimpleRenderScene(uint32_t logCat) - : BaseScene(logCat), mTestMode(TestMode::Basic), mFrameTime(0.0), mNumFrames(0), mpTestImageLoad3(nullptr) + : BaseScene(logCat), mTestMode(TestMode::Basic), mShapeMode(ShapeMode::Lines), mFrameTime(0.0), mNumFrames(0), mpTestImageLoad3(nullptr) { srand((u32)time(0)); } @@ -247,13 +247,30 @@ namespace lunarium void SimpleRenderScene::RenderShapesTest(Renderer2D& g) { - g.DrawLine(glm::vec2(30.0f, 200.0f), glm::vec2(400.0f, 400.0f), Color::Green(), 3.0f); - - for (auto iter = mLines.begin(); iter != mLines.end(); iter++) + switch (mShapeMode) { - g.DrawLine(iter->Position1, iter->Position2, iter->Color, iter->Thickness, iter->Angle); - iter->Angle += iter->RotSpeed; + case ShapeMode::Boxes: + { + + } break; + + case ShapeMode::Lines: + { + g.DrawLine(glm::vec2(30.0f, 200.0f), glm::vec2(400.0f, 400.0f), Color::Green(), 3.0f, box_angle * 3.0f); + + for (auto iter = mLines.begin(); iter != mLines.end(); iter++) + { + g.DrawLine(iter->Position1, iter->Position2, iter->Color, iter->Thickness, iter->Angle); + iter->Angle += iter->RotSpeed; + } + } break; + + case ShapeMode::Ellipses: + { + + } break; } + } @@ -308,6 +325,9 @@ namespace lunarium } else if (mTestMode == TestMode::Shapes) { + const char* shape_types[3] = { "Lines", "Boxes", "Ellipses" }; + ImGui::Combo("Shape Type", (int*)&mShapeMode, shape_types, 3); + ImGui::Separator(); ImGui::DragInt("Number of Lines", &mNumLines); if (ImGui::Button("Regenerate Shapes")) { diff --git a/src/run_modes/testbed/scenes/simple_render_scene.h b/src/run_modes/testbed/scenes/simple_render_scene.h index 65214cc..491c88d 100644 --- a/src/run_modes/testbed/scenes/simple_render_scene.h +++ b/src/run_modes/testbed/scenes/simple_render_scene.h @@ -28,6 +28,14 @@ namespace lunarium String, Shapes, }; + + enum ShapeMode + { + Lines, + Boxes, + Ellipses, + }; + public: SimpleRenderScene(uint32_t logCat); ~SimpleRenderScene(); @@ -63,6 +71,7 @@ namespace lunarium Renderer2D::FrameStats mRenderStats; TestMode mTestMode; + ShapeMode mShapeMode; // STRESS TEST MODE int mNumQuadsToRender = 500;