deal with broken shaders

This commit is contained in:
Asuro
2025-02-09 16:08:56 +01:00
parent bb66dcebcf
commit d1270c47a9

View File

@@ -6,6 +6,9 @@
#include "bx/timer.h"
#include <bx/file.h>
#include <bgfx/bgfx.h>
#include <thread>
using namespace std::chrono_literals;
namespace Game
{
@@ -88,7 +91,16 @@ namespace Game
Log("Loading shader at %s", buffer);
FILE* file = fopen(buffer, "rb");
FILE* file;
for (int32_t i = 0; i < 3; ++i)
{
file = fopen(buffer, "rb");
if (file == nullptr)
{
std::this_thread::sleep_for(100ms);
break;
}
fseek(file, 0, SEEK_END);
long fileSize = ftell(file);
fseek(file, 0, SEEK_SET);
@@ -100,6 +112,10 @@ namespace Game
return bgfx::createShader(mem);
}
Log("Failed to load shader %s", FILENAME);
return {};
}
}
void GameRendering::Setup()
@@ -158,10 +174,22 @@ namespace Game
{
shared.Dev.ChangedShaderCount = 0;
bgfx::destroy(Shader);
// TODO: when to destroy shader?
// bgfx::destroy(Shader);
bgfx::ShaderHandle vertexShader = loadShader("vert");
bgfx::ShaderHandle fragmentShader = loadShader("frag");
Shader = bgfx::createProgram(vertexShader, fragmentShader, true);
if (isValid(vertexShader) && isValid(fragmentShader))
{
bgfx::ProgramHandle newProgram = bgfx::createProgram(vertexShader, fragmentShader, true);
if (isValid(newProgram))
{
Shader = newProgram;
}
else
{
Log("Failed to load shader!");
}
}
}
int64_t tickDelta = bx::getHPCounter() - GetInstance().StartTime;