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);
}
|
mmozeiko
Simplified view on how I do it is - you just go line by line and pretend to be CPU.
abnercoimbremmozeiko
Simplified view on how I do it is - you just go line by line and pretend to be CPU.
This is so handmade I can't even...
abnercoimbremmozeiko
Simplified view on how I do it is - you just go line by line and pretend to be CPU.
This is so handmade I can't even...