1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-15 09:34:18 +02:00

runtime shader reload in debug mode (Ctrl + 1)

This commit is contained in:
XProger
2018-11-18 07:38:37 +03:00
parent cd35af0110
commit c5358fe0b8
2 changed files with 42 additions and 0 deletions

View File

@@ -224,6 +224,12 @@ namespace Game {
level->flipMap();
Input::down[ikF] = false;
}
if (Input::down[ikCtrl] && Input::down[ik1]) {
delete shaderCache;
shaderCache = new ShaderCache();
Input::down[ik1] = false;
}
#endif
if (Input::down[ik5] && !inventory->isActive()) {

View File

@@ -373,6 +373,38 @@ namespace GAPI {
default : ASSERT(false); LOG("! wrong pass id\n"); return;
}
#ifdef _DEBUG
Stream *stream = NULL;
switch (pass) {
case Core::passCompose :
case Core::passShadow :
case Core::passAmbient : stream = new Stream("../../src/shaders/shader.glsl"); break;
case Core::passWater : stream = new Stream("../../src/shaders/water.glsl"); break;
case Core::passFilter : stream = new Stream("../../src/shaders/filter.glsl"); break;
case Core::passGUI : stream = new Stream("../../src/shaders/gui.glsl"); break;
default : ASSERT(false); return;
}
char *sourceData = new char[stream->size + 1];
stream->raw(sourceData, stream->size);
sourceData[stream->size] = 0;
source = sourceData;
for (int i = 0; i < stream->size; i++) // trim string resource begin tag
if (sourceData[i] == '(') {
source = sourceData + i + 1;
break;
}
for (int i = stream->size - 1; i >= 0; i--) // trim string resource end tag
if (sourceData[i] == ')') {
sourceData[i] = 0;
break;
}
delete stream;
#endif
char defines[1024];
defines[0] = 0;
@@ -422,6 +454,10 @@ namespace GAPI {
}
}
#ifdef _DEBUG
delete[] sourceData;
#endif
Core::active.shader = this;
glUseProgram(ID);