簡體   English   中英

GLSL 着色器編譯調試器導致控制台上出現大量字符 \x00

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM