我正在将 OpenGL 程序迁移到 C++。除了一个库之外,我已经转换了所有库。在我的显示函数中,我有这一行(用于在屏幕上显示文本):
glWindowPos2i(5,5);
当我将程序作为 .c 运行或在 OSX 中作为 .cpp 运行时,效果很好。但我也需要它在 Linux 上编译为 .cpp。当我在那里编译它时,出现以下错误:
错误:“glWindowPos2i”未在此范围内声明
我不知道这是否是一个缺少的库或者发生了什么。有谁知道我需要做什么才能编译这一行?
最佳答案
这是因为 glWindowPos__ (...)
作为扩展开始:GL_ARB_window_pos
。它在 1.4 版本中被集成到核心 OpenGL 中。
您很幸运,在 OS X 上拥有开箱即用的支持 OpenGL 2.1/3.2(较新版本)的 OpenGL 实现。在Linux 中,情况则大不相同。您必须使用 GLX API 在运行时加载 glWindowPos__ (...)
函数入口点(因为它们是由显示驱动程序提供的)。
老实说,解决这个问题的最简单方法是集成 GLEW库到您的构建环境中以进行非 OS X 目标构建。您将在 Microsoft Windows 中遇到同样的问题,因为 Windows 仅附带开箱即用的 OpenGL 1.1 库 - 显示驱动程序在运行时扩展它,就像在 Linux 中一样。
GLEW 将负责加载 Windows 和 Linux 上的附带 OpenGL 库未提供的函数入口点,并使整个过程变得轻松。只要记住在 OS X 上构建软件时禁用 GLEW,这是没有必要的,如果您在 OS X 中链接到它,实际上会产生更多问题。
关于linux - glWindowPos2i 未在此范围内声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19108814/