繁体   English   中英

GLSL 着色器编译调试器导致控制台上出现大量字符 \x00

GLSL shader compilation debugger results in a flood of the character \x00 on the console

提示:本站收集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 是否正常工作,我可以在这些字符中找到错误消息

1 个回复

您正在使用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;
    }
    .
    .
    .
2 GLSL 着色器编译失败(但只是有时)

我正在学习 OpenGL,现在我被困在加载着色器上。 90% 的时间,这段代码都有效。 另外 10% 的时间,我在顶点着色器的编译中收到以下错误(为了便于阅读,我从下面的代码中删除了错误日志。): 着色器加载代码: 顶点着色器: 片段着色器: 我正在使用 VS Code 为 C99 编译 GCC ...

3 字符串作为\\ x03 \\ x00 \\ x00 \\ x00到整数

Helo: 我有一个问题,我在c中解决了,但是现在我想在hava中完成它:我有一个像这样的字符串:'\\ x03 \\ x00 \\ x00 \\ x00'这表示一个整数的十六进制值。 我转换为0x03 \\ 0x00 ...现在我想获取整数,但是我不知道如何在Java中进行操作 ...

5 有没有办法可以调试GLSL着色器?

有没有办法可以调试glsl着色器? 包括断点和数据跟踪 我看到简单的那些,让我看到着色器使我的阴影程序,但没有什么我可以把断点。 我需要检查矩阵的值,只是抛出一个glFragColor将无法工作,因为有太多的值需要进行比较和检查。 有一个简单的方法吗? 除了我之外,只写下我 ...

7 如何在iOS设备上预编译我的GLSL着色器程序

我在iOS应用程序上使用GLES 3.0,试图预编译GLSL着色器程序,但是当我尝试获取程序二进制代码的长度时,如下所示: len变为0。这是我的代码 我尝试将len设置为1024,然后在glGetProgramBinary之后出现错误。 有人对此有任何想法吗? ...

8 GLSL着色器已编译,但程序未链接

我已经很长时间没有使用OpenGL了,并且从未使用过OpenGLES 。 对于我的项目,我必须使用OpenGLES ,由glGetString(GL_VERSION)打印的版本是3.0 ,但是由于我正在制作教程的拼贴画,所以我很可能混用无法在该版本上使用的代码(这就是为什么) #version ...

9 在Android上异步或在不同的线程中编译GLSL着色器

我正在为Android设备编写一个效果过滤器,它在片段着色器中有二维循环。 对于大多数设备,着色器可以在合理的时间内编译和运行,但有些设备在第一次编译着色器时需要几分钟。 我的片段着色器有一个沉重的二维内核卷积: 实际上它是一个39x39的循环,由于内核设计,它不能分成两个一维滤 ...

10 GLSL 着色器编译失败且没有错误消息

我的代码中嵌入了以下着色器: 当我尝试编译这个着色器时 我收到一条错误消息,指出未编译着色器,但错误消息长度为 0。我完全被困在这里。 为什么着色器不编译? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM