加载顶点着色器错误

问题描述:

我正在尝试学习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

谢谢!

+2

调用['glGetShaderInfoLog'](http://www.opengl.org/sdk/docs/man/xhtml/glGetShaderInfoLog.xml)来查看编译错误。 – 2013-04-20 22:51:11

+1

除此之外,它看起来像不正确地大写了'gl_Position'。 – 2013-04-20 22:51:58

+0

感谢Ben,我正在跟着教程一起学习,我猜它错误地大写。我改变了它,它工作。 – foobar5512 2013-04-20 23:19:06

OpenGL Shader Language GLSL区分大小写。

请确保您正确使用gl_Position