提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在尝试调试我的 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.