Debugging, I've checked that the recompile itself works with no errors passed through OpenGL and the same OpenGL program Id persists so that it continues carrying on to the Render Commands.
Any thoughts on what to look for next would be greatly appreciated.
Some related code is below.
Thanks in advance for any thoughts, ideas, help.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | for(uint32 ShaderId = 0; ShaderId < GActiveShaderCount; ++ShaderId) { FActiveShader Shader = GActiveShaders[ShaderId]; FILETIME VertexWriteTime = Win32GetLastWriteTime(Shader.VertexFilename); FILETIME FragmentWriteTime = Win32GetLastWriteTime(Shader.FragmentFilename); bool32 VertexDirty = CompareFileTime(&VertexWriteTime, &Shader.VertexLastWriteTime); bool32 FragmentDirty = CompareFileTime(&FragmentWriteTime, &Shader.FragmentLastWriteTime); if(VertexDirty || FragmentDirty) { RecompileShader(&Shader, ShaderId, VertexWriteTime, FragmentWriteTime); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | InternalFunc void RecompileShader(FActiveShader* Shader, uint32 ShaderId, FILETIME VertexWrite, FILETIME FragmentWrite) { char* VertexShaderSource = (char*)DEBUGPlatformReadEntireFile(Shader->VertexFilename).Contents; char* FragmentShaderSource = (char*)DEBUGPlatformReadEntireFile(Shader->FragmentFilename).Contents; uint32 VertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(VertexShader, 1, &VertexShaderSource, 0); glCompileShader(VertexShader); int32 Success; uint8 InfoLog[1024]; glGetShaderiv(VertexShader, GL_COMPILE_STATUS, &Success); if(!Success) { glGetShaderInfoLog(VertexShader, 1024, NULL, InfoLog); printf("Compile Error"); } uint32 FragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(FragmentShader, 1, &FragmentShaderSource, NULL); glCompileShader(FragmentShader); glGetShaderiv(FragmentShader, GL_COMPILE_STATUS, &Success); if(!Success) { glGetShaderInfoLog(FragmentShader, 1024, NULL, InfoLog); printf("Compile Error"); } glAttachShader(Shader->ShaderId, VertexShader); glAttachShader(Shader->ShaderId, FragmentShader); glLinkProgram(Shader->ShaderId); glDeleteShader(VertexShader); glDeleteShader(FragmentShader); GActiveShaders[ShaderId].VertexLastWriteTime = Win32GetLastWriteTime(Shader->VertexFilename); GActiveShaders[ShaderId].FragmentLastWriteTime = Win32GetLastWriteTime(Shader->FragmentFilename); } |