Использование GLEW для использования расширений OpenGL в Windows

Я болезненно использовал расширения OpenGL в Windows . GLEW - это более легкий путь? Как мне начать с этим?

Ответов (3)

Решение

Да, библиотека OpenGL Extension Wrangler (GLEW) - это безболезненный способ использования расширений OpenGL в Windows. Вот как это сделать:

Определите расширение OpenGL и API-интерфейсы расширений, которые вы хотите использовать. Расширения OpenGL перечислены в реестре расширений OpenGL .

Проверьте, поддерживает ли ваша графическая карта расширения, которые вы хотите использовать. Загрузите и установите последние версии драйверов и SDK для вашей видеокарты.

Последние версии NVIDIA OpenGL SDK поставляются с GLEW. Если вы используете это, вам не нужно делать некоторые из следующих шагов.

Загрузите GLEW и разархивируйте его.

Добавьте путь корзины GLEW к переменной среды Windows PATH . Кроме того, вы также можете поместить glew32.dll в каталог, в котором Windows берет свои библиотеки DLL.

Добавьте путь включения GLEW в список включаемых каталогов вашего компилятора.

Добавьте GLEW Lib путь к списку библиотек директории вашего компилятора.

Укажите компилятору использовать glew32.lib во время компоновки. Если вы используете компиляторы Visual C++, то один из способов сделать это - добавить в код следующую строку:

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

Добавьте #include <GL/glew.h> строку в свой код. Убедитесь, что это размещено над включениями других файлов заголовков GL. (На самом деле вам могут не понадобиться файлы заголовков GL, если вы включаете их glew.h .)

Инициализируйте GLEW, используя glewInit() после инициализации GLUT или GL. Если это не удается, значит, с вашей настройкой что-то не так.

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

Убедитесь, что расширения, которые вы хотите использовать, теперь доступны через GLEW. Вы делаете это, проверяя логическую переменную GLEW _your_extension_name, которая предоставляется GLEW.

Пример:

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

Вот и все! Теперь вы можете использовать вызовы расширений OpenGL в своем коде, как если бы они существовали естественным образом для Windows.

Я потерял некоторое время, но, наконец, мне удалось заставить 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 / скачать? 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 в моем случае) и в открытой оболочке перейдите в папку, где находится «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>

Лично я бы не стал использовать команду выхода.

Я бы выбросил исключение, чтобы вы могли очистить любую другую инициализацию в конце функции.

то есть:

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. Попробуйте, например, вот этот .