23

我一直在以痛苦的方式在 Windows 上使用 OpenGL 扩展。GLEW 是更简单的方法吗?我如何开始使用它?

4

3 回答 3

36

是的,OpenGL 扩展牧马人库(GLEW) 是在 Windows 上使用 OpenGL 扩展的一种轻松方式。以下是如何开始使用它:

确定您希望使用的 OpenGL 扩展和扩展 API。OpenGL 扩展名列在OpenGL Extension Registry中。

检查您的显卡是否支持您希望使用的扩展。为您的显卡下载并安装最新的驱动程序和 SDK。

最新版本的NVIDIA OpenGL SDK附带 GLEW。如果您正在使用它,那么您不需要执行以下某些步骤。

下载GLEW并解压缩。

将 GLEW bin路径添加到您的 Windows PATH环境变量。或者,您也可以将glew32.dll放在 Windows 获取其 DLL 的目录中。

将 GLEW包含路径添加到编译器的包含目录列表中。

将 GLEW路径添加到编译器的库目录列表中。

指示您的编译器在链接期间使用glew32.lib。如果您使用的是 Visual C++ 编译器,那么执行此操作的一种方法是将以下行添加到您的代码中:

#pragma comment(lib, "glew32.lib")

在您的代码中添加#include <GL/glew.h>一行。确保它位于其他 GL 头文件的包含之上。(如果您包含 GL 头文件,您实际上可能不需要包含glew.h。)

glewInit()初始化GLUT 或 GL 后使用初始化 GLEW 。如果失败,则说明您的设置有问题。

if (GLEW_OK != glewInit())
{
    // GLEW failed!
    exit(1);
}

检查您希望使用的扩展程序现在是否可以通过 GLEW 获得。您可以通过检查 GLEW 公开的名为GLEW _your_extension_name的布尔变量来执行此操作。

例子:

if (!GLEW_EXT_framebuffer_object)
{
    exit(1);
}

就是这样!您现在可以在代码中使用 OpenGL 扩展调用,就好像它们自然存在于 Windows 中一样。

于 2008-08-20T03:19:50.827 回答
6

我个人不会使用退出命令。

我会抛出一个异常,以便您可以在函数结束时清除任何其他初始化。

IE:

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 教程已经有很多好地方了。例如试试这个

于 2008-08-20T05:08:59.083 回答
4

我浪费了一些时间,但最后我设法让 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/ 并下载 TGZ 包,该包旨在与 UNIX 系统一起使用

然后打开包(你也可以使用7zip)并找到“Makefile”。打开它并使用文本编辑器(记事本应该可以正常工作)找到包含“GLEW_DEST”的行并将其替换为“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/glew.h>#include <GL/glut.h>

于 2013-07-29T11:28:22.203 回答