首页 > 解决方案 > GLSL 着色器编译调试器导致控制台上出现大量字符 \x00

问题描述

我正在尝试调试我的 OpenGL 着色器编译,但我有一些与空字符相关的奇怪输出我相信,我的调试器控制台充满了很多\x00字符,我试图了解它来自哪里以及如何摆脱它。这是我的功能:

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);
    }
}

这是我得到的输出:

"\x00\x00\x00\x00\ ........ \x00\x00\x00\x00"

如果我弄乱了着色器代码,只是为了检查错误输出是否正常,我可以在这些字符中找到错误消息

标签: c++debuggingopengl

解决方案


您正在使用maxLengthuninitialized 来设置vector errorLog. 初始化errorLog 需要调整大小maxLength

代码应该更符合(未经测试)...

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;
    }
    .
    .
    .

推荐阅读