尽管使用了glew,但Linux下仍有大量未定义的OpenGL函数

i2loujxw  于 2022-11-04  发布在  Linux
关注(0)|答案(1)|浏览(135)

我正在尝试让我的第一个项目在fedora 36下运行OpenGL。为此,我使用了库“freeglut. h”和“glew. h”。然而,有许多函数,如:

  • glBindBuffer(绑定缓冲区)
  • glGen缓冲区
  • glEnableVertexAttribArray可启用顶点属性数组
  • glVertex属性指针
  • glDisable顶点属性数组
  • glBufferData缓冲区数据

Visual Studio代码向我显示的错误是这些函数未定义。
其他的事情,比如

  • 格伦特
  • glClear清除
  • glDraw数组
  • glSwap缓冲区

看起来还不错
我尝试使用以下命令编译项目:

gcc firstProject.cpp -o firstProject -lGLEW -lGL -lGLU -lglut

但是我得到了多个错误,例如glBindBuffer没有在这个作用域中声明。
下面是我的第一个项目.cpp的片段:


# include <GL/freeglut.h>

    #include <GL/glew.h>
    #include <stdio.h>

    GLuint VBO;

    static void renderScene() {
      glClear(GL_COLOR_BUFFER_BIT);

      glBindBuffer(GL_ARRAY_BUFFER, VBO);

      glEnableVertexAttribArray(0);

      glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);

      glDrawArrays(GL_POINTS, 0, 1);

      glDisableVertexAttribArray(0);

      glutSwapBuffers();
    }

    int main(int argc, char**argv) {
      glutInit(&argc, argv);
      glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);

      glutInitWindowSize(1920, 1080);

      glutInitWindowPosition(200, 200);

      int windowID = glutCreateWindow("MyFirstWindow");

      GLenum error = glewInit();
      if (error != GLEW_OK) {
        fprintf(stderr, "Error:'s'\n", glewGetErrorString(error));
        return 1;
      }

      GLclampf Red = 0.0f, Green = 0.0f, Blue = 0.0f, Alpha = 0.0f;
      glClearColor(Red, Green, Blue, Alpha);

      glutDisplayFunc(renderScene);

      glutMainLoop();

      return 0;
    }

我还测试了'glewinfo'是否能为我的平台找到一个相应的入口点。例如,这里有glBindBuffer的输出:

$ glewinfo | grep glBindBuffer
glBindBuffer:                                                OK
glBindBuffersBase:                                           OK
glBindBuffersRange:                                          OK
glBindBufferBase:                                            OK
glBindBufferRange:                                           OK
glBindBufferARB:                                             OK
glBindBufferBaseEXT:                                         OK
glBindBufferOffsetEXT:                                       OK
glBindBufferRangeEXT:                                        OK

在这里,您可以看到,如果我对glew的理解正确的话,glBindBuffer不应该是未定义的。

vawmfj5a

vawmfj5a1#

我已经找到了一个解决我的问题的方法在glew网站:

"Note that if you are using GLEW together with GLUT, you have to include glew.h first."

http://glew.sourceforge.net/install.html
所以我交换了前两个包括和一切工作。
但是,我无法继续使用Visual Studio代码自动格式化程序功能,因为它每次都按字母顺序对包含的进行排序。

相关问题