1

我正在将 OpenGL 程序迁移到 C++。我有所有的图书馆包括过渡除了一个。在我的显示功能中,我有这一行(在屏幕上显示文本):

glWindowPos2i(5,5);

当我将程序作为 .c 运行或在 OSX 中作为 .cpp 运行时,这可以正常工作。但我也需要它在 Linux 上编译为 .cpp。当我去那里编译它时,我得到了这个错误:

error: 'glWindowPos2i' was not declared in this scope

我不知道这是一个缺少的图书馆还是发生了什么。有谁知道我需要做什么才能编译这一行?

4

1 回答 1

2

那是因为glWindowPos__ (...)作为扩展开始了生命:GL_ARB_window_pos. 它在 1.4 版中被集成到核心 OpenGL 中。

您很幸运在 OS X 上拥有开箱即用的支持 OpenGL 2.1/3.2(在较新版本中)的 OpenGL 实现。在 Linux 中,情况则大不相同。您必须使用 GLX APIglWindowPos__ (...)在运行时加载函数入口点(因为它们是由显示驱动程序提供的)。

老实说,解决这个问题的最简单方法是将GLEW库集成到您的构建环境中,以用于非 OS X 目标构建。您将在 Microsoft Windows 中遇到同样的问题,因为 Windows 仅附带开箱即用的 OpenGL 1.1 库 - 显示驱动程序在运行时扩展它,就像在 Linux 中一样。

GLEW 将负责加载 Windows 和 Linux 上随附的 OpenGL 库未提供的函数入口点,并使整个过程变得轻松。请记住在 OS X 上构建软件时禁用 GLEW,这不是必需的,如果您在 OS X 中链接到它实际上会产生更多问题。

于 2013-10-01T05:51:13.013 回答