【问题标题】:Using GLEW to use OpenGL extensions under WindowsWindows下使用GLEW使用OpenGL扩展
【发布时间】:2008-08-20 03:19:34
【问题描述】:

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

【问题讨论】:

    标签: opengl glew


    【解决方案1】:

    是的,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 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 公开的名为 GLEW_your_extension_name 的布尔变量来做到这一点。

    例子:

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

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

    【讨论】:

    • 你好。这适用于 MinGW 吗?我已经尝试了 2 天,但我得到的只是错误,例如:undefined reference to '_imp__glewInit@0'undefined reference to '_imp____glewCreateShader'
    • Dan the Man:此解决方案使用 Visual C++。我不知道这是否适用于 MingGW。
    • AFAIK, #pragma comment(lib, "glew32.lib") 仅适用于 Visual C++。对于 MinGW,您应该将库添加到编译器的命令行(我认为是 -L)。
    • @DantheMan 尝试更改库的顺序,尤其是在 C::B 中,您有“项目”和“目标”设置并且您决定先链接哪个。我不完全理解它,但我只是这样解决了我的问题:)。
    • 我应该获得哪个 GLEW,源代码还是二进制文件?我迷路了……我注意到其中一个有一个空的 lib 文件夹。
    【解决方案2】:

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

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

    即:

    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 教程已经有很多好地方了。 Try this one for instance.

    【讨论】:

      【解决方案3】:

      我浪费了一些时间,但最终我设法让 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”的行并将其替换为“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>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多