OpenGL不会编译GLSL Shader。缺少扩展?

时间:2016-12-31 13:18:46

标签: opengl glsl shader glew

我想编译顶点着色器:

#version 430

layout(location = 0)in vec3 vertexPosition;
layout(location = 1)in vec3 vertexNormal;
layout(location = 2)in vec2 vertexUV;

out Vertex{
vec2 uv;
vec4 normal;
}vertexOut;

void main(){
    gl_Position = vec4(
    vertexPosition.x,
    vertexPosition.y,
    vertexPosition.z,
    1.0f);
    vertexOut.uv = vertexUV;
    vertexOut.normal = vec4(vertexNormal, 0.0f);
}
像这样

pShader.ID = glCreateShader(GL_VERTEX_SHADER);
std::ifstream shaderFile;
shaderFile.open(pShader.path);

if (shaderFile.fail()) {
    printf("!!!\nCannot open Shader File %s ! Shader compilation cancelled!", pShader.path.c_str());
}
else {
    std::string line;
    while (getline(shaderFile, line)) {
        pShader.content += line + '\n';
        ++pShader.lines;
    }
    const char* shaderContent = pShader.content.c_str();
    glShaderSource(pShader.ID, 1, &shaderContent, &pShader.lines);
    glCompileShader(pShader.ID);
    GLint success = 0;
    glGetShaderiv(pShader.ID, GL_COMPILE_STATUS, &success);
    if (success == GL_FALSE) {
        //errror checking
        }

但是我收到了编译错误

Vertex Shader failed to compile with the following errors:
ERROR: 0:3: error(#132) Syntax error "layou" parse error
ERROR: errror(#273) 1 compilation errors. No code generated

在我的片段着色器中,我也得到了一个“/”解析错误,但我可以找到它。

我使用glew进行扩展加载,使用glfw进行输入和上下文。 当我运行glewinfo.exe时,有一些标记为缺失的扩展,但我的AMD Radeon HD 7800驱动程序是最新的..问题是什么,我该怎么办?

这些是glewinfo.exe结果:http://m.uploadedit.com/ba3s/148318971635.txt

1 个答案:

答案 0 :(得分:3)

问题是,您将错误的长度传递给glShaderSource。最后一个参数必须包含每个字符串中的字符数。由于您可以同时传递多个字符串,因此这是一个包含count(第二个参数)元素的数组。

示例中的正确代码为:

const char* code = shaderContent.c_str();
int length = shaderContent.size();
glShaderSource(pShader.ID, 1, &code, &length);

此外,逐行读取整个文件也不是很有效。