加载顶点着色器错误
问题描述:
我正在尝试学习OpenGL 2.0,并试图在屏幕上绘制一个三角形。 当我尝试加载顶点着色器时,它不会编译这里是我的代码(我知道我的代码是不完整的,我只是定期运行它以确保我没有太深的错误):加载顶点着色器错误
#include <iostream>
#include <stdlib.h>
#include <GL/glew.h>
#include <GLUT/glut.h>
int init_resoureces(void){
GLint compile_ok = GL_FALSE, link_ok = GL_FALSE;
GLuint vs = glCreateShader(GL_VERTEX_SHADER);
const char *vs_source =
"#version 120\n"
"attribute vec2 coord2d;"
"void main(void) {"
"gl_position = vec4(coord2d, 0.0, 1.0);"
"}";
glShaderSource(vs, 1, &vs_source, NULL);
glCompileShader(vs);
glGetShaderiv(vs, GL_COMPILE_STATUS, &compile_ok);
if (0 == compile_ok){
fprintf(stderr, "Error in the vertex shader\n");
return 0;
}
return 1;
}
void onDisplay(){
//fill in later
}
void free_resources(){
}
GLfloat triangle_vertices[] = {
0.0, 0.8,
-0.8, -0.8,
0.8, -0.8
};
int main(int argc, char * argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(640, 480);
glutCreateWindow("My First Triangle");
GLenum glew_status = glewInit();
if (glew_status != GLEW_OK){
fprintf(stderr, "Error: %s\n", glewGetErrorString(glew_status));
return EXIT_FAILURE;
}
if (1 == init_resoureces()) {
glutDisplayFunc(onDisplay);
glutMainLoop();
}
free_resources();
return EXIT_SUCCESS;
}
该程序退出并表示在顶点着色器中存在错误(因为它应该用if语句检测编译错误)。不过,我在我的着色器中找不到该错误。
有人知道我做错了吗?
如果有问题,我正在使用Xcode和OS X 10.8
谢谢!
答
OpenGL Shader Language GLSL区分大小写。
请确保您正确使用gl_Position
。
调用['glGetShaderInfoLog'](http://www.opengl.org/sdk/docs/man/xhtml/glGetShaderInfoLog.xml)来查看编译错误。 – 2013-04-20 22:51:11
除此之外,它看起来像不正确地大写了'gl_Position'。 – 2013-04-20 22:51:58
感谢Ben,我正在跟着教程一起学习,我猜它错误地大写。我改变了它,它工作。 – foobar5512 2013-04-20 23:19:06