【发布时间】:2011-10-04 20:18:24
【问题描述】:
我正在使用 OpenGL 编写我的第一个程序,并且我已经到了试图让它编译我非常简单的着色器程序的地步。我总是收到无法编译着色器的错误。我使用以下代码编译着色器:
struct Shader
{
const char* filename;
GLenum type;
GLchar* source;
};
...
static char* readShaderSource(const char* shaderFile)
{
FILE* fp = fopen(shaderFile, "r");
if ( fp == NULL ) { return NULL; }
fseek(fp, 0L, SEEK_END);
long size = ftell(fp);
fseek(fp, 0L, SEEK_SET);
char* buf = new char[size + 1];
fread(buf, 1, size, fp);
buf[size] = '\0';
fclose(fp);
return buf;
}
...
Shader s;
s.filename = "<name of shader file>";
s.type = GL_VERTEX_SHADER;
s.source = readShaderSource( s.filename );
GLuint shader = glCreateShader( s.type );
glShaderSource( shader, 1, (const GLchar**) &s.source, NULL );
glCompileShader( shader );
而我的shader文件源如下:
#version 150
in vec4 vPosition;
void main()
{
gl_Position = vPosition;
}
我还尝试将“in”替换为“attribute”以及删除版本行。没有任何东西可以编译。 注意:我的实际 C 程序编译并运行。在 GPU 上运行的着色器程序是无法编译的。
我还确保下载我的显卡的最新驱动程序。我有一个 NVIDIA 8800 GTS 512;
关于如何编译我的着色器程序(用 GLSL 编写)有什么想法吗?
【问题讨论】:
-
info log 说什么?文件是否正确加载(所以
s.source包含正确的着色器源)?否则看起来很合理。 -
您可以使用 gDebugger(免费)来了解错误、修复和重试,而无需重新启动应用程序
-
Jeremy,你是如何检查编译失败的?由于您的代码看起来没问题,也许您只是错误地检查了编译状态。