我一直在Windows上以痛苦的方式使用OpenGL扩展。GLEW是更容易的方法吗?如何入门?
是的,OpenGL Extension Wrangler Library(GLEW)是在Windows上使用OpenGL扩展的无痛方式。以下是如何开始使用它:
确定您要使用的OpenGL扩展和扩展API。 OpenGL扩展列在OpenGL扩展注册表中。
检查您的显卡是否支持您要使用的扩展。下载并安装最新的显卡驱动程序和SDK。
NVIDIA OpenGL SDK的最新版本附带有GLEW。如果您使用此工具集,则不需要执行以下某些步骤。
下载GLEW并解压缩它。
将GLEW bin路径添加到Windows PATH环境变量中。或者,您还可以将glew32.dll放入Windows选择其DLL的目录中之一。
将GLEW include路径添加到编译器的包含目录列表中。
将GLEW lib路径添加到编译器的库目录列表中。
指示编译器在链接期间使用glew32.lib。如果使用Visual C ++编译器,则可以通过将以下行添加到代码中来执行此操作:
#pragma comment(lib, "glew32.lib")
在您的代码中添加#include <GL/glew.h>
。 确保将其放置在其他GL头文件包含的位置之上。(如果包含glew.h
,则实际上可能不需要包含GL头文件。)
在初始化GLUT或GL之后使用glewInit()
来初始化GLEW。 如果它失败了,则说明您的设置存在问题。
if (GLEW_OK != glewInit())
{
// GLEW failed!
exit(1);
}
检查您希望使用的扩展是否可以通过GLEW使用。您可以通过检查一个名为GLEW_your_extension_name的布尔型变量来实现。
例:
if (!GLEW_EXT_framebuffer_object)
{
exit(1);
}
就是这样!现在,您可以像Windows自然存在的一样在代码中使用OpenGL扩展调用。
个人而言,我不会使用退出命令。
我会抛出异常,这样你就可以在函数结束时清除任何其他的初始化。
例如:
try
{
// init opengl/directx
// init directaudio
// init directinput
if (GLEW_OK != glewInit())
{
throw std::exception("glewInit failed");
}
}
catch ( const std::exception& ex )
{
// message to screen using ex.what()
// clear up
}
我同意OJ的观点- 如果你想为他人编写教程,那么这真的不是正确的地方。已经有很多好的OpenGL教程网站了。例如这个。
我花了一些时间,但最终成功让GLEW运行起来了。我使用的是Windows7(x64),Eclipse CDT和MinGW,方法如下:
下载MSYS(用于MinGW),并确保已正确安装MinGW(PATH环境变量已正确设置): http://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.10/MSYS-1.0.10.exe/download?use_mirror=freefr&download=
安装完MSYS后,前往以下网址: http://glew.sourceforge.net/ 并下载UNIX系统所需的TGZ包。
然后打开该包(也可以使用7zip),找到"Makefile"。 用文本编辑器(例如记事本)打开它,找到包含"GLEW_DEST"的行,并将其替换为类似"C:/MinGW"的内容。
现在你已经准备好了,在MSYS中打开(我的情况下是C:\MinGW\msys\1.0\msys.bat),并在打开的shell中进入包含"Makefile"的文件夹。
然后输入简单的命令:"make install",工作就完成了(至少对我而言是这样的)
PS:我还将glew-1.10.0-win32\glew-1.10.0\bin\Release\Win32文件夹中的文件复制到了我的System32文件夹中,并在Eclipse CDT中添加了库"glew32",并在#include <GL/glut.h>
之前添加了#include <GL/glew.h>
undefined reference to '_imp__glewInit@0'
和undefined reference to '_imp____glewCreateShader'
之类的错误。 - Daniel Node.js#pragma comment(lib, "glew32.lib")
只适用于 Visual C++。对于 MinGW,您应该将库添加到编译器的命令行中(我认为是-L
)。 - Thiago NegriglewExperimental = GL_TRUE;
可能有助于处理OpenGL新的调用。 - kiranpradeep