[英]GLSL shader compilation debugger results in a flood of the character \x00 on the console
我正在嘗試調試我的 OpenGL 着色器編譯,但我有一些與null字符相關的奇怪 output 我相信,我的調試器控制台是如何從哪里來的,我的調試器控制台充滿了很多擺脫它。 這是我的 function:
void DebugShader(GLuint shader) { //debug shader
GLint isComp = 0;
GLint maxLength;
std::vector<GLchar> errorLog(maxLength);
std::string log;
glGetShaderiv(shader, GL_COMPILE_STATUS, &isComp);
if(isComp!=GL_TRUE) {
glGetShaderiv(shader,GL_INFO_LOG_LENGTH,&maxLength);
glGetShaderInfoLog(shader, maxLength, &maxLength,&errorLog[0]);
std::cout << "Shader compilation Failed." << std::endl;
}
for (int i = 0; i<maxLength; i++){
log.push_back(errorLog.at(i));
std::cout << log;
}
if (isComp==GL_TRUE){
std::cout << "Shader compilation successful." << std::endl;
glDeleteShader(shader);
}
}
這是我得到的 output:
"\x00\x00\x00\x00\........\x00\x00\x00\x00"
如果我弄亂了着色器代碼,只是為了檢查錯誤 output 是否正常工作,我可以在這些字符中找到錯誤消息
您正在使用maxLength
uninitialized 來設置vector
errorLog
的大小。 您需要在初始化maxLength
后調整errorLog
的大小。
代碼應該更符合(未經測試)...
void DebugShader(GLuint shader)
{
GLint isComp = 0;
glGetShaderiv(shader, GL_COMPILE_STATUS, &isComp);
if(isComp!=GL_TRUE) {
GLint maxLength;
glGetShaderiv(shader,GL_INFO_LOG_LENGTH,&maxLength);
std::vector<GLchar> errorLog(maxLength);
glGetShaderInfoLog(shader, maxLength, &maxLength,&errorLog[0]);
std::cout << "Shader compilation Failed." << std::endl;
}
.
.
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.