Russian Qt Forum
Октябрь 03, 2024, 16:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: glActiveTexture  (Прочитано 7606 раз)
Disa
Гость
« : Октябрь 26, 2012, 13:44 »

В qt для Windows нет glActiveTexture и его предлагают добавлять руками вот так вот:

Код
C++ (Qt)
#ifdef WIN32
 #include <GL/glext.h>
   PFNGLACTIVETEXTUREPROC pGlActiveTexture = NULL;
 #define glActiveTexture pGlActiveTexture
#endif //WIN32
 
...
 
#ifdef WIN32
 glActiveTexture = (PFNGLACTIVETEXTUREPROC)
   wglGetProcAddress((LPCSTR) "glActiveTexture");
#endif

Правда еще кое-где, углядел:
Код
C++ (Qt)
// glActiveTexture means this:
void glActiveTexture(GLenum textureUnit) {
 currentTextureUnit = GL_TEXTURE0 - textureUnit;
 // Правда нет enum texture GL_TEXTURE0 :(
}

В общем вопрос, объясните почему такие трудности и нельзя сразу использовать glActiveTexture?

За ранее благодарен.
« Последнее редактирование: Октябрь 26, 2012, 13:47 от Disa » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Октябрь 26, 2012, 14:08 »

Можно просто glActiveTextureARB
Записан
mitrich
Гость
« Ответ #2 : Октябрь 26, 2012, 15:57 »

glActiveTextureARB тоже таким же образом инициализировать вручную придётся. Трудности потому, что наличие этой функции зависит от версии OpenGL (мин. 1.3 вроде), соответственно от видеокарты и её драйвера. Т.е. теоретически, её может и не быть в системе (видеокарта антикварная или пользователь умудряется работать без установленных нормальных дров от производителя).
Для автоматической инициализации функций OpenGL 2.0 можно использовать класс QGLFunctions (Qt 4.8), например так:
Код
C++ (Qt)
class MyGLWidget : public QGLWidget, protected QGLFunctions
{
//...
protected:
   void initializeGL();
//...
};
 
void MyGLWidget::initializeGL()
{
   initializeGLFunctions();
   // Теперь в классе MyGLWidget можно использовать glActiveTexture и другие
   // функции, введенные после версии OpenGL 1.1 (до версии 2.0 включительно)
}
 

А для ручной инициализации есть ещё функция QGLContext::getProcAddress - вместо wglGetProcAddress
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Октябрь 26, 2012, 17:59 »

glActiveTextureARB тоже таким же образом инициализировать вручную придётся.
Чего это если она объявлена в glext.h (да и в glew.h)? Насколько я помню glewInit разбирается со всеми такими

Оффтоп
А чего понесло в OpenGL, что хотим получить? Или просто так, для расширения кругозора (что тоже неплохо)
Записан
mitrich
Гость
« Ответ #4 : Октябрь 26, 2012, 18:42 »

В glext.h она объявлена, вот только в opengl32.dll точка входа для неё (и многих других) отсутствует. И под виндой для всех функций OpenGL версии > 1.1 (или расширений, не входящих в стандарт) всё сводится к получению их через wglGetProcAddress. Так работают и QGLContext::getProcAddress, и QGLFunctions, и GLEW, про который я забыл написать (хотя самый удобный вариант, наверное) и который является сторонней библиотекой.
Записан
Disa
Гость
« Ответ #5 : Октябрь 29, 2012, 16:25 »

Код:
А чего понесло в OpenGL, что хотим получить? Или просто так, для расширения кругозора (что тоже неплохо)

Иногда приходиться работать с 3d, а рабочая лошадка - mac (но пишу для винды). Если что-то трудное, то делаю на OSG или Unity, хотя первое иногда заставляет захотеть разбить монитор Улыбающийся А если мелкие приложение, то на qt + openGL самое то, что нужно. Freeglut или SDL как-то руки не дойдут подучить, но думаю, что и не нужно.

О glActiveTexture прочитал кусок в документации на английском и никак не мог понять, в чем трудности вызова функции, которая начинается на gl*. Вроде они не зависят от платформы.
« Последнее редактирование: Октябрь 29, 2012, 16:29 от Disa » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Октябрь 29, 2012, 16:53 »

Иногда приходиться работать с 3d,
Я спрашивал какая цель, т.е. чему это посвящено (а не какие тулзы). Конечно это может быть приватно и на ответе не настаиваю. Ну вывели сцену, и что с того? Это всего лишь визуализация/отображение. Один помню говорил "хочу сделать красивую сцену" - ну так это надо учиться на 3D артиста, а не программиста

О glActiveTexture прочитал кусок в документации на английском и никак не мог понять, в чем трудности вызова функции, которая начинается на gl*. Вроде они не зависят от платформы.
Эти ф-ции зависят от имеющихся расширений, типа weak linked, их может и не быть.
Записан
Disa
Гость
« Ответ #7 : Октябрь 29, 2012, 19:42 »

Ну я уж было подумал, что Qt для этого не очень подходит Веселый

В данный момент была задача:
"Отображения элементов ядерного реактора (стержней , в связи с физической моделью станции)",
Раньше было - отображение Парето плоскостей, для многомерных данных.
Еще хотели визуализацию пультов управления АЭС, в 3d, но там очень-очень муторно и пока не брался.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.149 секунд. Запросов: 23.