c++ - 编译 OpenGL 着色器导致语法错误

标签 c++ opengl shader

我有两个简单的着色器(顶点和片段)

顶点着色器

#version 330 core

//=============================================
//---[Structs/Vertex Data]---------------------
//=============================================

layout(location = 0) in vec3 vertexPosition_modelspace;

//=============================================
//---[Variables]-------------------------------
//=============================================

uniform mat4 projection;
uniform mat4 view;

//=============================================
//---[Vertex Shader]---------------------------
//=============================================

void main()
{
   gl_Position = projection * view * vertexPosition_modelspace;
}

片段着色器

#version 330 core

//=============================================
//---[Output Struct]---------------------------
//=============================================

out vec3 colour;

//=============================================
//---[Fragment Shader]-------------------------
//=============================================

void main()
{
    colour = vec3(1, 0, 0);
}

我正在尝试编译它们,但出现以下错误

错误 C0000:语法错误,意外的 $undefined,在标记“undefined”处应为“::”

我相信这可能与我阅读文件的方式有关。这是顶点着色器文件的示例

std::string VertexShaderCode = FindFileOrThrow(vertex_file_path);
std::ifstream vShaderFile(VertexShaderCode.c_str());
std::stringstream vShaderData;
vShaderData << vShaderFile.rdbuf();
vShaderFile.close();

然后使用编译文件

char const *VertexSourcePointer = VertexShaderCode.c_str();
glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL);
glCompileShader(VertexShaderID);

如何有效地读入文件并避免这些错误?

编辑:

正确编译:

const std::string &shaderText = vShaderData.str();
GLint textLength = (GLint)shaderText.size();
const GLchar *pText = static_cast<const GLchar *>(shaderText.c_str());
glShaderSource(VertexShaderID, 1, &pText, &textLength);
glCompileShader(VertexShaderID);

最佳答案

VertexShaderCode 是您的文件名,而不是着色器字符串。它仍在 vShaderData 中。您需要从 vShaderData 中复制字符串,并将其提供给 glShaderSource

关于c++ - 编译 OpenGL 着色器导致语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12131034/

相关文章:

c++ - 如何编写浏览器插件?

java - 关闭运行 OpenGL 内容的 JavaFX 窗口时出现奇怪的错误

xcode - 有人在山狮上成功使用 OpenGL 分析器吗?

THREE.js 模糊帧缓冲区

c++ - pthread 与 NSThread : which is faster

c++ - 簿记 vs 使用指针检查成员变量是否已初始化

c++ - (C/C++) Windows 7 中的 EOF

c++ - OpenGL顶点数组不渲染

graphics - 光线追踪中正确的着色模型

opengl - 如何将图像后处理着色器的结果添加到场景中