shader changes & screen quads

This commit is contained in:
Asuro
2025-03-28 00:11:56 +01:00
parent 26ba03b7fe
commit f56ffdaa13
20 changed files with 193 additions and 43 deletions

View File

@@ -377,8 +377,7 @@ namespace Game
Textures[0].SamplerHandle = DefaultSampler;
LoadModels(Models, ModelCount);
Materials[(uint16_t)EMaterial::Default] =
Material::LoadFromShader("vert", "frag", MainViewID, Textures[0].Handle, Textures[0].SamplerHandle);
ReloadShaders();
imguiCreate();
SetImguiStyle();
@@ -439,26 +438,17 @@ namespace Game
FileChangeNotification* shaderChange = nullptr;
if (shared.Dev.ChangedShaderCount > 0)
{
char buf[1024]{0};
for (int32_t i = 0; i < shared.Dev.ChangedShaderCount; ++i)
{
wcstombs(buf, shared.Dev.ChangedShaders[i].FileName, sizeof(buf));
LOG("Changed: %s", buf);
}
shared.Dev.ChangedShaderCount = 0;
// TODO: when to destroy shader?
// TODO: only reload changed shaders
bgfx::ShaderHandle vertexShader = loadShader("vert");
bgfx::ShaderHandle fragmentShader = loadShader("frag");
if (isValid(vertexShader) && isValid(fragmentShader))
{
bgfx::ProgramHandle newProgram = bgfx::createProgram(vertexShader, fragmentShader, true);
if (isValid(newProgram))
{
Materials[(uint16_t)EMaterial::Default].Shader = newProgram;
LastShaderLoadTime = GetInstance().Time.Now;
}
else
{
LOG_WARN("Failed to load shader!");
LastShaderLoadTime = -1.0f;
}
}
ReloadShaders();
}
}
@@ -697,6 +687,14 @@ namespace Game
ImGui::End();
}
void GameRendering::ReloadShaders()
{
Materials[(uint16_t)EMaterial::Default] = Material::LoadFromShader(
"dither/vert", "dither/frag", MainViewID, Textures[0].Handle, Textures[0].SamplerHandle);
Materials[(uint16_t)EMaterial::UI] = Material::LoadFromShader(
"normal/vert", "normal/frag", MainViewID, Textures[0].Handle, Textures[0].SamplerHandle);
}
void GameRendering::Update()
{
ZoneScopedN("Rendering");

View File

@@ -125,6 +125,7 @@ namespace Game
void Update();
void HandleEvents();
void RenderDebugUI();
void ReloadShaders();
void Shutdown();
Generated::ModelHandle GetModelHandleFromPath(const char* path);
};