1
我正在編寫一個我知道編譯正確的代碼庫。目前,我在着色器中引入了有目的的拼寫錯誤來模擬錯誤。此時,代碼拒絕編譯。然後我可以叫爲什麼glGetProgramInfoLog返回一個空字符串?
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, ¶ms);
發現params
現在是108其中以前0,所以我知道有這個着色器(我曾嘗試編譯)相關的日誌。然而,當我打電話
glGetProgramInfoLog(shader, 512, &size, ErrorLog);
size
返回0,和ErrorLog
仍然是空的。
下面是在這種情況下,重要的代碼:
void Shader::AddShader(GLuint ShaderProgram, const char* pShaderText, GLenum ShaderType)
{
GLuint ShaderObj = glCreateShader(ShaderType);
if (ShaderObj == 0) {
fprintf(stderr, "Error creating shader type %d\n", ShaderType);
exit(1);
}
const char* pShaderSource = readShaderSource(pShaderText);
glShaderSource(ShaderObj, 1, (const GLchar**)&pShaderSource, NULL);
glCompileShader(ShaderObj);
checkCompileError(ShaderObj, ShaderType);
glAttachShader(ShaderProgram, ShaderObj);
}
bool Shader::checkCompileError(GLuint shader, GLenum ShaderType)
{
GLint params = -1;
GLchar ErrorLog[512] = { 0 };
GLint size = 0;
glGetShaderiv(shader, GL_COMPILE_STATUS, ¶ms);
if (GL_TRUE != params) {
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, ¶ms);
glGetProgramInfoLog(shader, 512, &size, ErrorLog);
fprintf(stderr, "Error compiling shader type %d: '%s'\n", ShaderType, ErrorLog);
exit(1);
}
return true;
}
確實[這個例程]獲得完整的着色器程序對象的鏈接日誌(https://pastebin.com/ux8ppxQX)你的系統上運行? – genpfault
是的,現在我感到很傻。我一直在學習OpenGL的源代碼在'glGetShaderInfoLog'和'glGetProgramInfoLog'之間沒有很大的區別,所以我認爲後者可以在任何情況下工作。在看到您的錯誤檢查功能並更改爲前者時,代碼正常工作。謝謝你的幫助。如果你想把這個問題轉換成答案,我會接受 – irishMTS
Doh!不要覺得太糟糕,我應該從閱讀你的代碼中看到這一點:) – genpfault