【问题标题】:Hello World OpenGL program: "glEnableVertexAttribArray was not declared it this scope"Hello World OpenGL 程序:“glEnableVertexAttribArray 未在此范围内声明”
【发布时间】:2012-06-11 17:40:58
【问题描述】:

这越来越令人沮丧。我一直在尝试运行一个简单的 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();
}

问题在于“glEnableVertexAttribArray”和“glVertexAttribPointer”函数。 编译器说它们“没有在这个范围内声明”。

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

不管怎样,这是我第一次学习 OpenGL,我可能做错了什么,所以我请求有人帮助我。如果这篇文章看起来有点蹩脚,我很抱歉,这也是我第一次在这个网站上发帖。另外我很抱歉我的语法,英语不是我的第一语言。

【问题讨论】:

标签: opengl freeglut


【解决方案1】:

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

【讨论】:

  • 这不是扩展,但你必须manually load the function pointers
  • 我尝试将 GLEW 添加到我的项目中。我已将 glew 文件夹及其包含和 lib 放在我的 MinGW 文件夹中,并将 glew32 放入我的链接库中。然后我在搜索目录中添加了“C:\MinGW\glew-1.7.0\include”和“C:\MinGW\glew-1.7.0\bin”路径。最后我包含了 并将 glewInit() 放在我的 glutInit() 下。现在有一个不同的错误:“未定义引用__imp____glewInit', undefined reference to __imp____glEnableVertexAttribArray',未定义引用`__imp____glVertexAttribPointer'。
  • 我不太熟悉 MinGW 的链接方式,但这基本上是在告诉你,你没有正确链接到 glew。你链接到哪个 glew32,你是如何链接到它的?
  • 这里是项目在 Code::Blocks: linker, include, lib 中的构建设置截图。这是我的 MinGW 文件夹的样子:folders。我不确定这是否是最好的方法。也许我应该尝试将所有文​​件塞进 MinGW 中的一个“include”文件夹和一个“lib”文件夹中,但这看起来相当混乱。
  • 嗯,我自己试过了,但我无法让它工作。我猜这是因为 glew 二进制文件是用微软的编译器构建的。但是,我确实通过静态链接到 glew 来让它工作。改为链接到 glew32s,并在 #include GL/glew.h 之前添加“#define GLEW_STATIC”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2016-08-09
  • 2019-02-17
  • 2021-01-07
  • 2016-10-27
  • 2016-06-03
相关资源
最近更新 更多