Add ImGui

This commit is contained in:
2026-02-13 02:22:42 +03:00
parent b044c8d1a5
commit fcba7d9035
282 changed files with 124080 additions and 13 deletions

View File

@@ -7,11 +7,15 @@
#include "modelsystem.h"
#include "debugrender.h"
#include "ifilesystem.h"
#include "camera.h"
#include "imguimanager.h"
#include <pugixml.hpp>
static GLuint g_VAO = 0;
static int g_NumModels = 0;
// TEMP
glm::vec3 g_viewOrigin;
glm::vec3 g_viewOrient;
@@ -139,6 +143,9 @@ void Render::Init(SDL_Window* pWindow)
g_pDebugRender = new DebugRender();
g_pDebugRender->Initialize();
// Create imgui manager
g_ImGuiManager.Init();
// Create stretched picture filenameBuffer
m_pStretchedPicVBuf = g_pRenderDevice->CreateVertexBuffer(nullptr, MAX_STRETCH_VX, true);
@@ -162,6 +169,8 @@ void Render::Shutdown()
delete m_pStretchedPicVBuf;
m_pStretchedPicVBuf = nullptr;
g_ImGuiManager.Shutdown();
g_pDebugRender->Shutdown();
delete g_pDebugRender;
g_pDebugRender = nullptr;
@@ -187,19 +196,46 @@ void Render::Shutdown()
m_pGLContext = nullptr;
}
void Render::RenderScene()
{
void Render::RenderScene() {
if (m_sceneModel) {
Camera* camera = g_cameraManager.GetActiveCamera();
if (camera) {
glm::mat4 viewProj = m_ProjectionMatrix * m_ViewMatrix;
viewProj = glm::transpose(viewProj);
camera->GetFrustum().Build(viewProj);
if (camera->GetFrustum().CullBoundingBox(m_sceneModel->GetBoundingBox()))
return;
}
static glm::mat4 s_identity = glm::mat4(1.0f);
m_sceneModel->Draw(s_identity);
g_NumModels++;
g_pDebugRender->DrawBoundingBox(m_sceneModel->GetBoundingBox(), glm::vec3(1.0f));
}
g_pDebugRender->RenderFrame();
}
void Render::RenderStats()
{
char buffer[256];
snprintf(buffer, sizeof(buffer), "Scene: %s", m_sceneName.c_str());
ImGui::GetForegroundDrawList()->AddText(ImVec2(0.0f, 0.0f), 0xffffffff, buffer);
snprintf(buffer, sizeof(buffer), "numModels: %d", g_NumModels);
ImGui::GetForegroundDrawList()->AddText(ImVec2(0.0f, 15.0f), 0xffffffff, buffer);
}
void Render::Present(bool vsync)
{
SDL_GL_SwapWindow(m_pWindow);
// reset stats
g_NumModels = 0;
}
void Render::ResetStates()
@@ -242,13 +278,15 @@ void Render::LoadSceneXML(const char* filename)
pugi::xml_parse_result result = doc.load_buffer(filedata, length);
delete[] filedata;
if (!result) {
Core::Error("Render::LoadSceneXML: Error while reading level description file '%s'\nError: %s:%i",
Core::Error("SceneManager::LoadScene: Error while reading level description file '%s'\nError: %s:%i",
filenameBuffer, result.description(), result.offset);
}
pugi::xml_node root = doc.document_element();
const char* scenefilename = root.child("SceneFile").attribute("filename").value();
m_sceneName = scenefilename;
sprintf(filenameBuffer, "data/levels/%s/%s", filename, scenefilename);
if (!GetFileSystem()->IsExist(filenameBuffer)) {