Hello World OpenGL程序:“glEnableVertexAttribArray未被声明为此范围”

时间:2012-06-11 17:40:58

标签: opengl freeglut

令人沮丧。我一直试图让一个简单的hello world类型程序运行,但它并没有发生。

我使用的是Windows 7,而我的显卡确实支持更新的OpenGL内容。 使用freeglut在C语言中编写,我正在使用MinGW和Code :: Blocks进行编译。 在链接器中我有freeglut,opengl32和glu32。 我将freeglut内容保存在我的MinGW文件夹中的freeglut文件夹中,因此在我的构建设置中的搜索目录下,我有" C:\ MinGW \ freeglut \ include"对于编译器和" C:\ MinGW \ freeglut \ lib"对于链接器。

这是我的代码:

#include <stdlib.h>
#include <GL/glut.h>

void NIAppIdle(void);
void NIAppDisplay(void);

int main(int argc, char *argv[])
{
    // Setup windwing
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
    glutInitWindowSize(800, 600);
    glutCreateWindow("HELLO WORLD");

    // Define GLUT callbacks
    glutIdleFunc(NIAppIdle);
    glutDisplayFunc(NIAppDisplay);

    // Enter render loop
    glutMainLoop();
    return 0;
}

void NIAppIdle(void)
{
    glutPostRedisplay();
}

void NIAppDisplay(void)
{
    glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    float geometry[] =
    {
        -0.5f,  0.5f, 0.0f, 1.0f,
         0.5f, -5.0f, 0.0f, 1.0f,
         0.0f,  0.5f, 0.0f, 1.0f
    };
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 4, GL_FLOAT, 0, 0, geometry);
    glDrawArrays(GL_TRIANGLES, 0, 3);
    glutSwapBuffers();
}

问题在于&#34; glEnableVertexAttribArray&#34;和&#34; glVertexAttribPointer&#34;功能。 编译器说它们是&#34;没有声明它是这个范围&#34;。

程序可以在没有这些行的情况下运行,所以我猜OpenGL是正确链接的,但由于某些原因我根本无法使用这些函数,我知道它们是OpenGL的一部分。 这与我拥有的OpenGL版本有什么关系吗?

无论如何,这是我第一次学习OpenGL,我可能做了一些可怕的错误,所以我要求有人帮助我。对不起,如果这篇文章看起来有点蹩脚,这也是我第一次在这个网站发帖。我也很抱歉我的语法,英语不是我的第一语言。

1 个答案:

答案 0 :(得分:3)

我认为你只能通过手动加载函数指针来获取glEnableVertexAttribArray。如果您只想创建一个简单的hello world程序,我建议您使用GLEW为您处理。