我正在尝试运行 GLSL example , 但我不能。
错误出现在程序退出的 glGetShaderiv(vShader, GL_COMPILE_STATUS, &status);
行中。 vShader
是文件 vPhong.glsl
.
返回的错误是:
0(18) : error C0000: syntax error, unexpected $undefined at token "<undefined>"
0(18) : error C0501: type name expected at token "<undefined>"
我已经“安装”并引用了 GLEW 和 Glut 及其库文件。我用 glewInit
编辑了我的程序。
程序能够找到 .glsl 文件。
奇怪的是我能够运行 precompiled GLSL-demo , 并编译并运行 the project在我的电脑上。非工作程序中的“初始化”与此相同。
我曾尝试将有缺陷的源代码复制到成功的项目中,以查看项目设置中是否存在导致错误的内容,但不幸的是,情况并非如此。 所以错误似乎出在 C++ 代码中,而不是项目中。
进展:
在我的 Windows 7 机器上运行 Visual Studio 时出现“访问冲突”。如果我“单独”运行该程序,它就会停止工作。在 Windows XP 机器上,我遇到了一个未捕获的异常。
我在编译程序时没有收到任何错误或警告(除了 fopen
不安全的警告)。
Visual Studio 突出显示行 vShader = glCreateShader(GL_VERTEX_SHADER);
作为错误的来源。
添加 glewInit();
修复了上述错误。
最佳答案
program 中有两个错误:
首先:
glLinkProgram(program);
glGetShaderiv(program, GL_LINK_STATUS, &status);
最后一行应该是 glGetProgramiv(program, GL_LINK_STATUS, &status);
。
此外,在着色器文件中读取的 fopen
应该与 rb
一起用作参数,而不仅仅是 r
。
用 glGetProgramiv
替换 glGetShaderiv
并添加 glewInit()
修复了我的一个初始错误。
将参数更改为 fopen
修复了着色器错误。
关于windows - 编译和运行 GLSL 程序需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1922656/