【问题标题】:OpenGL functions missing in SFML environmentSFML 环境中缺少 OpenGL 函数
【发布时间】:2019-06-15 02:00:37
【问题描述】:

this tutorial 之后,我试图在 Visual Studio 环境下为我使用 SFML 创建的 OpenGL 上下文管理我的 OpenGL 缓冲区。我在其最新版本中安装了 SFML 和 Glew,进行了正确的链接,并且我能够使用 OpenGL glClearglBeginglVertext3d 等原语。

但是,我似乎无法调用许多其他 OpenGL 函数,例如 glEnableVertexAttribArrayglBindBuffer,我想了解原因。我注意到 SFML 上下文设置的默认 OpenGL 版本是 4.6,但我无法在 khronos 网站上为该版本找到这些函数的适当文档。此外,我的 Visual Studio 甚至不将这些函数识别为任何库的一部分,但鉴于我依赖 SFML/OpenGL.hpp,我可能错过了一些包含。 SFML 方面的文档在这个主题上非常简单......

谢谢!

【问题讨论】:

  • 包括 glew 标题。
  • ... 并调用glewInit() 来初始化其函数指针。
  • 谢谢,我会试试的!
  • 两者完美!非常感谢。如果您想要更多积分,请将其发布为答案;)

标签: c++ opengl sfml


【解决方案1】:

我能够使用 OpenGL glClear、glBegin 和 glVertext3d 等基元。但是,还有很多其他的 OpenGL 函数我似乎无法调用,例如 glEnableVertexAttribArray 或 glBindBuffer,我想了解原因。

原因是windows上的opengl32库只提供OpenGL 1.1的功能,其他的都是你的显卡驱动引入的。为了实际访问这些函数,windows 提供了一个函数来加载它们。但是,编写所有声明并加载所有函数需要大量工作(请参阅 OpenGL Wiki 中的 Load OpenGL Functions),因此存在可以为您执行此操作的库,其中一个库就是 glew,“The OpenGL Extension Wrangler Library”。在创建 OpenGL 上下文(SFML 所做的)之后,您必须调用 glewInit(),然后加载所有其他函数。这些函数的声明也由 glew 提供,因此请确保包含 glew 标头而不是您的系统或 SFML 的 opengl 标头。

【讨论】:

  • 我确实错过了 glew 标题 ;) 感谢您的时间!
猜你喜欢
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多