|
|
|
@ -24,7 +24,7 @@
|
|
|
|
namespace lunarium
|
|
|
|
namespace lunarium
|
|
|
|
{
|
|
|
|
{
|
|
|
|
SimpleRenderScene::SimpleRenderScene(uint32_t logCat)
|
|
|
|
SimpleRenderScene::SimpleRenderScene(uint32_t logCat)
|
|
|
|
: BaseScene(logCat)
|
|
|
|
: BaseScene(logCat), mStressTest(true), mFrameTime(0.0), mNumFrames(0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
srand((u32)time(0));
|
|
|
|
srand((u32)time(0));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -142,6 +142,11 @@ namespace lunarium
|
|
|
|
angle -= 0.1f;
|
|
|
|
angle -= 0.1f;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (Core::Input().IsKeyPressed(KeyCode::TAB))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
mStressTest = !mStressTest;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (Core::Input().IsKeyPressed(KeyCode::Q))
|
|
|
|
if (Core::Input().IsKeyPressed(KeyCode::Q))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// Test writing out a rendered image with transparency
|
|
|
|
// Test writing out a rendered image with transparency
|
|
|
|
@ -160,17 +165,20 @@ namespace lunarium
|
|
|
|
Logger::Info(mLogCat, "Running transparent image test");
|
|
|
|
Logger::Info(mLogCat, "Running transparent image test");
|
|
|
|
|
|
|
|
|
|
|
|
g.DrawQuad(Rectangle(500, 400, 300, 300), Color(0.5f, 0.0f, 0.75f, 1.0f));
|
|
|
|
g.DrawQuad(Rectangle(500, 400, 300, 300), Color(0.5f, 0.0f, 0.75f, 1.0f));
|
|
|
|
|
|
|
|
g.DrawQuad(Rectangle(200, 300, 100, 100), Color(0.2f, 0.5f, 0.4f, 1.0f), nullptr, 45.0f);
|
|
|
|
g.DrawString("This is a test of rendering an image with transparency",
|
|
|
|
g.DrawString("This is a test of rendering an image with transparency",
|
|
|
|
Rectangle::MakeFromTopLeft(50, 50, 600, 200), Color(0.0f, 1.0f, 0.2f, 1.0f), 0.5f);
|
|
|
|
Rectangle::MakeFromTopLeft(50, 50, 600, 200), Color(0.0f, 1.0f, 0.2f, 1.0f), 0.5f);
|
|
|
|
|
|
|
|
|
|
|
|
g.EndDraw();
|
|
|
|
g.EndDraw();
|
|
|
|
mpRenderedImage = mFrameBufferTwo->GetTexture();
|
|
|
|
mpRenderedImage = mFrameBufferTwo->GetTexture();
|
|
|
|
|
|
|
|
mFrameBufferTwo->Unbind();
|
|
|
|
//mpRenderedImage = Core::GetInstance().EndRenderToTexture();
|
|
|
|
//mpRenderedImage = Core::GetInstance().EndRenderToTexture();
|
|
|
|
g.SetClearColor(prev);
|
|
|
|
g.SetClearColor(prev);
|
|
|
|
|
|
|
|
|
|
|
|
stbi_flip_vertically_on_write(1);
|
|
|
|
stbi_flip_vertically_on_write(1);
|
|
|
|
stbi_write_png("lunarium_test_image.png", mpRenderedImage->GetWidth(), mpRenderedImage->GetHeight(), 4,
|
|
|
|
stbi_write_png("lunarium_test_image.png", mpRenderedImage->GetWidth(), mpRenderedImage->GetHeight(), 4,
|
|
|
|
mpRenderedImage->GetPixels(), mpRenderedImage->GetWidth() * 4);
|
|
|
|
mpRenderedImage->GetPixels(), mpRenderedImage->GetWidth() * 4);
|
|
|
|
|
|
|
|
//Logger::Info(mLogCat, "")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
mImageSize.Width = Math::ClampI(mImageSize.Width, 320, 1280);
|
|
|
|
mImageSize.Width = Math::ClampI(mImageSize.Width, 320, 1280);
|
|
|
|
@ -202,16 +210,26 @@ namespace lunarium
|
|
|
|
int w, h;
|
|
|
|
int w, h;
|
|
|
|
Core::MainWindow().GetFramebufferSize(&w, &h);
|
|
|
|
Core::MainWindow().GetFramebufferSize(&w, &h);
|
|
|
|
OrthographicCamera main_cam(Vec2f { 0.0f, 0.0f }, Sizef { (float)w, (float)h });
|
|
|
|
OrthographicCamera main_cam(Vec2f { 0.0f, 0.0f }, Sizef { (float)w, (float)h });
|
|
|
|
|
|
|
|
Core::GUI().NewFrame();
|
|
|
|
|
|
|
|
mTimer.Reset();
|
|
|
|
Core::Graphics().BeginDraw(&main_cam);
|
|
|
|
Core::Graphics().BeginDraw(&main_cam);
|
|
|
|
RenderScene(Core::Graphics());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Core::GUI().NewFrame();
|
|
|
|
if (mStressTest)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
RenderBatchStressTest(Core::Graphics());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
RenderScene(Core::Graphics());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DrawStatsGUI();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Core::Graphics().EndDraw(); // Graphics end draw must happen before GUI end frame
|
|
|
|
|
|
|
|
DrawStatsGUI();
|
|
|
|
Core::GUI().EndFrame();
|
|
|
|
Core::GUI().EndFrame();
|
|
|
|
Core::Graphics().EndDraw();
|
|
|
|
|
|
|
|
Core::MainWindow().SwapBuffers();
|
|
|
|
Core::MainWindow().SwapBuffers();
|
|
|
|
|
|
|
|
mFrameTime += mTimer.GetElapsedSeconds();
|
|
|
|
|
|
|
|
mNumFrames++;
|
|
|
|
mRenderStats = Core::Graphics().GetFrameStats();
|
|
|
|
mRenderStats = Core::Graphics().GetFrameStats();
|
|
|
|
Core::Graphics().ResetFrameStats();
|
|
|
|
Core::Graphics().ResetFrameStats();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -230,10 +248,6 @@ namespace lunarium
|
|
|
|
// g.DrawQuad(Rectangle(800, 500, 100.0f, 100.0f), Color(0.75f, 0.5f, 0.425f), nullptr, 90.0f);
|
|
|
|
// g.DrawQuad(Rectangle(800, 500, 100.0f, 100.0f), Color(0.75f, 0.5f, 0.425f), nullptr, 90.0f);
|
|
|
|
// g.DrawQuad(Rectangle(300, 400, 64.0f, 64.0f), Color(0.25f, 0.5f, 1.0f, 1.0f), nullptr, box_angle * -1);
|
|
|
|
// g.DrawQuad(Rectangle(300, 400, 64.0f, 64.0f), Color(0.25f, 0.5f, 1.0f, 1.0f), nullptr, box_angle * -1);
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < NUM_QUADS; i++)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
g.DrawQuad(mQuads[i], mQuadColors[i], nullptr, box_angle + (i % 360));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//g.DrawQuads(mQuads, NUM_QUADS, mQuadColors);
|
|
|
|
//g.DrawQuads(mQuads, NUM_QUADS, mQuadColors);
|
|
|
|
|
|
|
|
|
|
|
|
@ -247,10 +261,19 @@ namespace lunarium
|
|
|
|
// g->DrawImage(*mpTestImageLoad, src,
|
|
|
|
// g->DrawImage(*mpTestImageLoad, src,
|
|
|
|
// dest, Color(1.0f, 1.0f, 1.0f, 0.8f));
|
|
|
|
// dest, Color(1.0f, 1.0f, 1.0f, 0.8f));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SimpleRenderScene::RenderBatchStressTest(Renderer2D& g)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
for (int i = 0; i < NUM_QUADS; i++)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
g.DrawQuad(mQuads[i], mQuadColors[i], nullptr, box_angle + (i / 10.0f));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SimpleRenderScene::DrawStatsGUI()
|
|
|
|
void SimpleRenderScene::DrawStatsGUI()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
ImGui::SetNextWindowPos(ImVec2(0, 0), ImGuiCond_FirstUseEver);
|
|
|
|
ImGui::SetNextWindowSize(ImVec2(400, 300));
|
|
|
|
ImGui::SetNextWindowSize(ImVec2(400, 300));
|
|
|
|
ImGui::Begin("RENDER INFO");
|
|
|
|
ImGui::Begin("RENDER INFO");
|
|
|
|
ImGui::BeginChild("Per Frame", ImVec2(ImGui::GetWindowSize().x - 15, ImGui::GetFrameHeightWithSpacing() * 3.5f), true);
|
|
|
|
ImGui::BeginChild("Per Frame", ImVec2(ImGui::GetWindowSize().x - 15, ImGui::GetFrameHeightWithSpacing() * 3.5f), true);
|
|
|
|
@ -259,10 +282,11 @@ namespace lunarium
|
|
|
|
ImGui::Text("Number of triangles: %d", mRenderStats.NumTris);
|
|
|
|
ImGui::Text("Number of triangles: %d", mRenderStats.NumTris);
|
|
|
|
ImGui::Text("Draw calls: %d", mRenderStats.DrawCalls);
|
|
|
|
ImGui::Text("Draw calls: %d", mRenderStats.DrawCalls);
|
|
|
|
ImGui::EndChild();
|
|
|
|
ImGui::EndChild();
|
|
|
|
ImGui::BeginChild("General", ImVec2(ImGui::GetWindowSize().x - 15, ImGui::GetFrameHeightWithSpacing() * 2.5f), true);
|
|
|
|
ImGui::BeginChild("General", ImVec2(ImGui::GetWindowSize().x - 15, ImGui::GetFrameHeightWithSpacing() * 3.5f), true);
|
|
|
|
ImGui::Text("General Info");
|
|
|
|
ImGui::Text("General Info");
|
|
|
|
ImGui::Separator();
|
|
|
|
ImGui::Separator();
|
|
|
|
ImGui::Text("General render info...");
|
|
|
|
ImGui::Text("Average Render time: %f", mFrameTime/ mNumFrames);
|
|
|
|
|
|
|
|
ImGui::Text("FPS: %d", Core::GetInstance().GetFrameData().CurrentFPS);
|
|
|
|
ImGui::EndChild();
|
|
|
|
ImGui::EndChild();
|
|
|
|
ImGui::End();
|
|
|
|
ImGui::End();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|