0

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

谢谢!

4

1 回答 1

1

OpenGL 着色器语言 GLSL 区分大小写。

确保gl_Position正确大写。

于 2013-04-20T23:57:35.087 回答