我正在将OpenGL程序迁移到C ++。我有所有的库包括转换除了一个。在我的显示功能中,我有这一行(在屏幕上显示文字):
glWindowPos2i(5,5);
当我以.c运行程序或在OSX中将其作为.cpp运行时,这可以正常工作。但是我需要它在Linux上编译为.cpp。当我去那里编译时,我收到了这个错误:
error: 'glWindowPos2i' was not declared in this scope
我无法弄清楚这是一个丢失的库还是正在发生的事情。有谁知道我需要做什么才能让这行编译?
答案 0 :(得分:2)
这是因为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中链接它,它实际上会产生更多问题。