c++ - 语法错误 : unexpected $end at token "<EOF>" GLSL with any shader

标签 c++ opengl

我见过其他类似的问题,现在我知道这通常是由于错误的着色器加载代码,但我尝试了很多不同的方法来加载它们,但我总是得到这个错误。这是我当前正在使用的加载代码(对于顶点着色器,我对片段着色器执行相同的操作):

GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER);
std::string VertexShaderCode;
std::ifstream VertexShaderStream(vertex_file_path, std::ios::in);
if(VertexShaderStream.is_open()){
    std::string Line = "";
    while(getline(VertexShaderStream, Line))
        VertexShaderCode += "\n" + Line;
    VertexShaderStream.close();
}
GLint Result = GL_FALSE;
int InfoLogLength;


// Compile Vertex Shader
printf("Compiling shader : %s\n", vertex_file_path);
char const * VertexSourcePointer = VertexShaderCode.c_str();
glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL);
glCompileShader(VertexShaderID);

// Check Vertex Shader
glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result);
glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
std::vector<char> VertexShaderErrorMessage(InfoLogLength);
glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
fprintf(stdout, "%s\n", &VertexShaderErrorMessage[0]);

我也试过这个:

    GLuint VertexShaderID = glCreateShader(GL_FRAGMENT_SHADER);
    std::ifstream shaderFile(vertex_file_path);
    //Error out here.
    stringstream shaderData;
    shaderData << shaderFile.rdbuf();  //Loads the entire string into a string stream.
    shaderFile.close();
    const std::string &VertexShaderCode = shaderData.str(); //Get the string stream as a std::string.
    GLint Result = GL_FALSE;
    int InfoLogLength;
    printf("Compiling shader : %s\n", vertex_file_path);
    char const * VertexSourcePointer = VertexShaderCode.c_str();
    glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL);
    glCompileShader(VertexShaderID);

    // Check Vertex Shader
    glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result);
    glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
    std::vector<char> VertexShaderErrorMessage(InfoLogLength);
    glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
    fprintf(stdout, "%s\n", &VertexShaderErrorMessage[0]);

这是链接代码:

// Link the program
fprintf(stdout, "Linking program\n");
GLuint ProgramID = glCreateProgram();
glAttachShader(ProgramID, VertexShaderID);
glAttachShader(ProgramID, FragmentShaderID);
glLinkProgram(ProgramID);

// Check the program
glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result);
glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
std::vector<char> ProgramErrorMessage( max(InfoLogLength, int(1)) );
glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
fprintf(stdout, "%s\n", &ProgramErrorMessage[0]);

我也尝试将 (GLint *)VertexShaderCode.size() 而不是 NULL 传递给 glShaderSource() 的长度参数,但我得到了同样的错误。我在编译和链接时都遇到了这些错误

如果有帮助,我使用的是 Opengl 3.3、GLEW、GLFW、Visual c++ 2010 和 windows 7 64 位

最佳答案

你是如何将长度参数传递给glShaderSource的。您执行的类型转换应该会触发一个粗脂肪警告。正确的方法是将 size() 的结果放入一个变量中。然后将指向该变量的指针提供给 glShaderSource。

关于c++ - 语法错误 : unexpected $end at token "<EOF>" GLSL with any shader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12227847/

相关文章:

c++ - 在 C++ 中提取具有给定后缀的文件名部分

c++ - 与 `list(FILTER)`一起使用时出现REGEX错误

c++ - 专门化模板类并添加新接口(interface)

c++ - 访问特定数组位置/索引时出现段错误

java - LibGDX 与 openGL 2.0

c# - OpenGL - 性能差且标度值高

c++ - 刷新 GLUT 窗口

c++ - 使用 GLSL 进行光线追踪

c++ - 使用 Boost::Geometry Polygon boolean/intersections 与线段属性

c++ - glColor 实际上并没有改变 OpenGL 的颜色