Big big update

This commit is contained in:
2026-03-07 17:25:11 +03:00
parent 95daf12fc5
commit 79898c42d6
22 changed files with 423 additions and 47 deletions

View File

@@ -692,7 +692,7 @@ void Model::Draw(const glm::mat4& model, SkeletonInstance* instance /*= nullptr*
if (shader->HasUniform(UNIFORM_SUN_AMBIENT))
{
glm::vec4 lightColor = glm::vec4(0.1f);
glm::vec4 lightColor = glm::vec4(g_sceneManager->getAmbientColor(), 1.0f);
g_shaderSystem->SetUniformFloat4(shader, UNIFORM_SUN_AMBIENT, &lightColor);
}

View File

@@ -20,6 +20,7 @@
extern int g_NumModels;
static bool g_debugRenderScene = false;
glm::vec3 g_ambientColor = glm::vec3(0.0f);
static std::string getFileExtension(const std::string& filename)
{
@@ -218,6 +219,9 @@ void SceneManager::loadScene(const char* filename)
{
unloadIfScenePresent();
// Reset ambient color
setAmbientColor(glm::vec3(0.0f));
char filenameBuffer[kMaxPathLength];
snprintf(filenameBuffer, kMaxPathLength, "data/levels/%s/%s.xml", filename, filename);
@@ -243,6 +247,16 @@ void SceneManager::loadScene(const char* filename)
pugi::xml_node root = doc.document_element();
const char* scenefilename = root.child("LevelDescription").child("SceneFile").attribute("filename").value();
pugi::xml_node ambientnode = root.child("LevelDescription").child("AmbientColor");
if (ambientnode)
{
glm::vec3 color = glm::vec3(0.0f);
color.r = ambientnode.attribute("r").as_float();
color.g = ambientnode.attribute("g").as_float();
color.b = ambientnode.attribute("b").as_float();
setAmbientColor(color);
}
m_sceneName = getFileNameWithoutExtension(scenefilename);
sprintf(filenameBuffer, "data/levels/%s/%s", filename, scenefilename);
@@ -497,6 +511,16 @@ void SceneManager::toggleDebugRender()
g_debugRenderScene = !g_debugRenderScene;
}
void SceneManager::setAmbientColor(const glm::vec3& color)
{
g_ambientColor = color;
}
const glm::vec3& SceneManager::getAmbientColor()
{
return g_ambientColor;
}
// SceneStaticMesh
SceneStaticMesh::SceneStaticMesh() :
@@ -856,7 +880,7 @@ void R_SceneStaticMesh_BindShader(const glm::mat4& worldMatrix, Texture2D* albed
if (shader->HasUniform(UNIFORM_SUN_AMBIENT))
{
glm::vec4 lightColor = glm::vec4(0.1f);
glm::vec4 lightColor = glm::vec4(g_sceneManager->getAmbientColor(), 1.0f);
g_shaderSystem->SetUniformFloat4(shader, UNIFORM_SUN_AMBIENT, &lightColor);
}

View File

@@ -56,15 +56,21 @@ public:
SceneManager();
~SceneManager();
// \brief Load an static scene.
// \brief Load a static scene.
void loadScene(const char*);
// \brief Get current scene name.
const char* getSceneName();
// \brief Toggle an debug rendering.
// \brief Toggle a debug rendering.
void toggleDebugRender();
// \brief Set an ambient color.
void setAmbientColor(const glm::vec3& color);
// \brief Get an ambient color.
const glm::vec3& getAmbientColor();
private:
void LoadSceneXML(const char* filename);
void loadSkybox(const char*);