首页 > 解决方案 > 带字符串的 glGetShaderInfoLog

问题描述

我正在做一个着色器类,它有一个返回着色器日志的方法:

std::string Shader::GetShaderInfoLog(){
    GLint TotalLenght=0;
    GetShaderiv(GL_INFO_LOG_LENGTH,&TotalLenght);
    std::string logs;
    logs.reserve(TotalLenght);
    glGetShaderInfoLog(name, TotalLenght, NULL, &logs[0] );
    return logs;
}

出于奇怪的原因,即使使用有编译错误的着色器,日志字符串也是空的。我尝试过使用 char 数组:

std::string Shader::GetShaderInfoLog(){
    GLint TotalLenght=0;
    GetShaderiv(GL_INFO_LOG_LENGTH,&TotalLenght); 
    char logs[TotalLenght];
    glGetShaderInfoLog(name, TotalLenght, NULL, logs);
    return std::string(logs);
}

而这个工作得很好。所以我的问题是为什么它不适用于字符串?

标签: c++opengl

解决方案


reserve只是增加了字符串的容量。但不会改变它的大小。

你需要resize它:

std::string Shader::GetShaderInfoLog(){
    GLint TotalLenght=0;
    GetShaderiv(GL_INFO_LOG_LENGTH,&TotalLenght);
    std::string logs;
    logs.resize(TotalLenght);
    glGetShaderInfoLog(name, TotalLenght, NULL, &logs[0] );
    return logs;
}

推荐阅读