deal with broken shaders
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user