Я хочу использовать функции, открытые под расширениями OpenGL. Я на Windows, как мне это сделать?Использование расширений OpenGL В Windows
ответ
Простое решение: Используйте GLEW. Посмотрите, как here.
Жесткий раствор: Если у вас есть действительно веская причина не использовать GLEW, вот как добиться того же без него:
Определить расширение OpenGL и API-интерфейсы расширения, которые вы хотите использовать. Расширения OpenGL перечислены в OpenGL Extension Registry.
Пример: Я хочу использовать возможности расширения EXT_framebuffer_object. API-интерфейсы Я хочу использовать из этого расширения:
glGenFramebuffersEXT()
glBindFramebufferEXT()
glFramebufferTexture2DEXT()
glCheckFramebufferStatusEXT()
glDeleteFramebuffersEXT()
Проверьте, если ваша графическая карта поддерживает расширение, которое вы хотите использовать. Если это так, то ваша работа почти завершена! Загрузите и установите последние версии драйверов и SDK для вашей видеокарты.
Пример: видеокарта в моем компьютере является NVIDIA 6600 GT. Итак, я посещаю веб-страницу NVIDIA OpenGL Extension Specifications и обнаруживаю, что поддерживается расширение EXT_framebuffer_object. Затем загрузите последнюю версию NVIDIA OpenGL SDK и установите ее.
Ваш производитель графических карт обеспечивает заголовочный файл glext.h (или аналогичным образом с именем файла заголовок) со всеми декларациями, необходимых для использования поддерживаемых расширений OpenGL. (Обратите внимание, что не все расширения могут поддерживаться.) Либо размещайте этот файл заголовка где-нибудь ваш компилятор может его поднять или включить его каталог в список каталогов включенных компиляторов.
Добавьте в свой код строку #include <glext.h>
, чтобы включить заголовочный файл в свой код.
Открыть glext.h, найти API вы хотите использовать и захватить его соответствующего уродливого вида декларации.
Пример: Я поиск по указанным выше API, фреймбуфера и найти соответствующие им уродливый вид декларации:
typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); for GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *);
Все это означает, что ваш файл заголовка имеет декларацию API в 2-х формах. Один из них - объявление указателя функции wgl-like уродливого. Другой - это нормальная декларация функции.
Для каждого API расширения, который вы хотите использовать, добавьте в свои объявления кода имя функции как тип уродливой строки.
Пример:
PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
Хотя это выглядит некрасиво, все, что мы делаем, чтобы объявить указатели на функции типа соответствующего расширения API.
Инициализация этих указателей функций с их законными функциями. Эти функции отображаются библиотекой или драйвером. Для этого нужно использовать функцию wglGetProcAddress().
Пример:
glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) wglGetProcAddress("glGenFramebuffersEXT");
glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) wglGetProcAddress("glBindFramebufferEXT");
glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) wglGetProcAddress("glFramebufferTexture2DEXT");
glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) wglGetProcAddress("glCheckFramebufferStatusEXT");
glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) wglGetProcAddress("glDeleteFramebuffersEXT");
Не забудьте проверить указатели на функции для NULL. Если случайно wglGetProcAddress() не смог найти функцию расширения, она инициализировала бы указатель с помощью NULL.
Пример:
if (NULL == glGenFramebuffersEXT || NULL == glBindFramebufferEXT || NULL == glFramebufferTexture2DEXT
|| NULL == glCheckFramebufferStatusEXT || NULL == glDeleteFramebuffersEXT)
{
// Extension functions not loaded!
exit(1);
}
Вот это, мы сделали! Теперь вы можете использовать эти указатели функций так же, как если бы существовали вызовы функций.
Пример:
glGenFramebuffersEXT(1, &fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, colorTex[0], 0);
Ссылка:Moving Beyond OpenGL 1.1 for Windows Дэйв Астл - Статья немного устарела, но имеет всю информацию, вам нужно понять, почему эта жалкая ситуация существует в Windows, и как обойти это.
@Kronikarz: От взглядов, GLEW, похоже, путь в будущее. NVIDIA уже отправляет его вместе с его OpenGL SDK. И его последний выпуск был в 2007 году по сравнению с GLEE, который был в 2006 году.
Но использование обеих библиотек выглядит почти таким же. (GLEW имеет init(), который нужно вызывать раньше всего.) Таким образом, вам не нужно переключаться, если вы не найдете расширение, которое не поддерживается в GLEE.
Последний выпуск GLEW - 1.9.0 с 2012 по август 06. – 2012-09-01 22:59:53
«Очень сильная причина» не использовать GLEW в том, что библиотека не поддерживается вашим компилятором/IDE. Например: Borland C++ Builder.
В этом случае вы можете захотеть перестроить библиотеку из источника. Если он работает, отличный, в противном случае загрузка вручную не так плоха, как звучит.
GL3W - это сценарий публичного доступа, который создает библиотеку, которая загружает только основные функции OpenGL 3/4. Его можно найти на GitHub по адресу:
https://github.com/skaslev/gl3w
GL3W требует Python 2.6 для создания библиотек и заголовков для OpenGL; после этого не требуется Python.
- 1. Использование GLEW для использования расширений OpenGL под Windows
- 2. Включение расширений OpenGL
- 3. Доступность расширений OpenGL
- 4. Использование .vert и .frag расширений в Apple OpenGL Shader Builder
- 5. OSX доступных расширений OpenGL ARB
- 6. Использование OpenGL в телефоне Windows 8
- 7. Установка расширений PHP в Windows
- 8. Использование PECL для установки расширений в Windows 7
- 9. Использование двух разных расширений заголовков в Qt Creator (Windows)
- 10. Использование памяти в OpenGL
- 11. Использование расширений SQLite-Net в winRT
- 12. Использование внешних расширений в Joomla
- 13. Использование расширений в API Eventbrite
- 14. Laravel - Использование выходов/расширений
- 15. OpenGL 4.5 Буферная текстура: поддержка расширений
- 16. Список расширений opengl ИСПОЛЬЗУЕТСЯ во время выполнения
- 17. Создайте поддельный контекст OpenGL для загрузки расширений
- 18. OpenGL в Windows
- 19. Установка расширений PHP CLI в Windows
- 20. SAX Использование нескольких расширений DefaultHandler
- 21. Использование расширений протокола Swift 2
- 22. Использование расширений с селеном (Python)
- 23. OpenGL slow on windows
- 24. Получение расширений opengl в профиле ядра на OSX
- 25. Совместное использование расширений в приложениях IOS
- 26. Использование расширений в NW Дейкстры Алгоритм
- 27. Использование расширений Telerik в asp.net MVC Control
- 28. Использование расширений фляг в чертежах колб
- 29. Использование быстрых расширений в Obj-C
- 30. Использование расширений Chrome в хром-приложениях
Я проводил весь день, пытаясь заставить OpenGL работать с GLEW, но у меня все время возникают проблемы ... Просто так вы знаете: OpenGL не так-то просто настроить. Но когда он работает: P – 2014-09-11 14:27:07