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/timer.h"
#include <bx/file.h> #include <bx/file.h>
#include <bgfx/bgfx.h> #include <bgfx/bgfx.h>
#include <thread>
using namespace std::chrono_literals;
namespace Game namespace Game
{ {
@@ -88,7 +91,16 @@ namespace Game
Log("Loading shader at %s", buffer); 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); fseek(file, 0, SEEK_END);
long fileSize = ftell(file); long fileSize = ftell(file);
fseek(file, 0, SEEK_SET); fseek(file, 0, SEEK_SET);
@@ -100,6 +112,10 @@ namespace Game
return bgfx::createShader(mem); return bgfx::createShader(mem);
} }
Log("Failed to load shader %s", FILENAME);
return {};
}
} }
void GameRendering::Setup() void GameRendering::Setup()
@@ -158,10 +174,22 @@ namespace Game
{ {
shared.Dev.ChangedShaderCount = 0; shared.Dev.ChangedShaderCount = 0;
bgfx::destroy(Shader); // TODO: when to destroy shader?
// bgfx::destroy(Shader);
bgfx::ShaderHandle vertexShader = loadShader("vert"); bgfx::ShaderHandle vertexShader = loadShader("vert");
bgfx::ShaderHandle fragmentShader = loadShader("frag"); 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; int64_t tickDelta = bx::getHPCounter() - GetInstance().StartTime;