I got garbage when trying to compile shader and get error log. I checked my code against some sample code, and could figure out where I did wrong.
Below is my code:
bool LoadShader(GLuint ShaderType, char const* ShaderFileName)
{
os_file ShaderFile = OSReadFile(ShaderFileName);
GLint ShaderHandle = glCreateShader(ShaderType);
DebugPrint("Shader source: %s\n%.*s\n", ShaderFileName, ShaderFile.Length, ShaderFile.Contents);
GLchar* ShaderSource = (GLchar*)&ShaderFile.Contents;
GLint ShaderSourceLength = ShaderFile.Length;
glShaderSource(ShaderHandle, 1, &ShaderSource, &ShaderSourceLength);
glCompileShader(ShaderHandle);
OSFreeFile(&ShaderFile);
GLint Success;
glGetShaderiv(ShaderHandle, GL_COMPILE_STATUS, &Success);
if (!Success)
{
GLchar CompileLog[512];
glGetShaderInfoLog(ShaderType, 512, NULL, CompileLog);
switch (ShaderType)
{
#define SHADER_TYPE_ERROR(ShaderType) case ShaderType: { DebugPrint(#ShaderType " Compile error!\n"); } break;
SHADER_TYPE_ERROR(GL_VERTEX_SHADER);
SHADER_TYPE_ERROR(GL_FRAGMENT_SHADER);
#undef SHADER_TYPE_ERROR
}
DebugPrint("%s\n\n", CompileLog);
return false;
}
return true;
}
Below is some output:
Shader source: shader/fragment.glsl
#version 330 core
out vec4 Colour;
void main()
{
Colour = vec4(1.0, 0.5, 0.2, 1.0);
}
GL_FRAGMENT_SHADER Compile error!
p��R�