Как зайти в Даркнет?!
25th January, 01:11
4
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4380
0
Помогите пожалуйста решить задачи
24th November, 23:53
6084
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4308
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Использование расширений OpenGL на Windows
Я хочу использовать функции, представленные в расширениях OpenGL. Я на Windows, как мне это сделать?
Простое решение: используйте GLEW . Смотрите, как здесь .
Трудное решение : Если у вас есть действительно веская причина не использовать GLEW, вот как добиться того же самого без него:
Определите расширение OpenGL и расширение APIs, которые вы хотите использовать. Расширения OpenGL перечислены в реестре расширений OpenGL .
Пример: я хочу использовать возможности расширения EXT_framebuffer_object. APIs, которые я хочу использовать из этого расширения, являются:
glGenFramebuffersEXT()
glBindFramebufferEXT()
glFramebufferTexture2DEXT()
glCheckFramebufferStatusEXT()
glDeleteFramebuffersEXT()
Проверьте, поддерживает ли ваша графическая карта расширение, которое вы хотите использовать. Если это так, то ваша работа почти закончена! Загрузите и установите последние версии драйверов и SDKs для вашей видеокарты.
Пример: видеокарта в моем PC - это NVIDIA 6600 GT . Итак, я посещаю веб-страницу спецификаций расширений NVIDIA OpenGL и обнаруживаю, что расширение EXT_framebuffer_object поддерживается. Затем я загружаю последнюю версию NVIDIA OpenGL SDK и устанавливаю ее.
Производитель графической карты предоставляет файл заголовка glext.h (или аналогично именованный файл заголовка) со всеми объявлениями, необходимыми для использования поддерживаемых расширений OpenGL. (Обратите внимание, что не все расширения могут быть поддержаны.) Либо поместите этот файл заголовка туда, где компилятор может его забрать, либо включите его каталог в список включаемых каталогов вашего компилятора.
Добавьте строку #include <glext.h> в код, чтобы включить в него файл заголовка.
Откройте glext.h , найдите API, который вы хотите использовать, и возьмите соответствующее уродливое объявление.
Пример: я ищу вышеупомянутый фреймбуфер APIs и нахожу соответствующие ему уродливые объявления:
typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); for GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *);
Все это означает, что ваш заголовочный файл имеет объявление API в 2 формах. Один из них-это объявление указателя уродливой функции типа wgl. Другой-это вменяемое на вид объявление функции.
Для каждого расширения 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 by Dave Astle-статья немного устарела, но содержит всю необходимую информацию, чтобы понять, почему эта жалкая ситуация существует на Windows и как ее обойти.
"Очень веская причина" не использовать GLEW может заключаться в том, что библиотека не поддерживается вашим compiler/IDE. E.g: Borland C++ Builder.
В этом случае может потребоваться перестроить библиотеку из исходного кода. Если это работает, отлично, в противном случае ручная загрузка расширения не так плоха, как это должно звучать.
@Kronikarz: судя по всему, GLEW -это путь в будущее. NVIDIA уже отправляет его вместе с его OpenGL SDK . И его последний релиз был в 2007 году по сравнению с GLEE, который был в 2006 году.
Но использование обеих библиотек выглядит для меня почти одинаково. (У GLEW есть init() , который должен быть вызван прежде всего.) Таким образом, вам не нужно переключаться, если вы не найдете какое-то расширение, не поддерживаемое под GLEE.
GL3W-это скрипт открытого домена, который создает библиотеку, которая загружает только основные функциональные возможности для OpenGL 3/4. он может быть найден на github по адресу:
https://github.com/skaslev/gl3w
GL3W требует Python 2.6 для создания библиотек и заголовков для OpenGL; после этого он не требует Python.