Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Disa от Октябрь 26, 2012, 13:44



Название: glActiveTexture
Отправлено: 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?

За ранее благодарен.


Название: Re: glActiveTexture
Отправлено: Igors от Октябрь 26, 2012, 14:08
Можно просто glActiveTextureARB


Название: Re: glActiveTexture
Отправлено: mitrich от Октябрь 26, 2012, 15:57
glActiveTextureARB тоже таким же образом инициализировать вручную придётся. Трудности потому, что наличие этой функции зависит от версии OpenGL (мин. 1.3 вроде), соответственно от видеокарты и её драйвера. Т.е. теоретически, её может и не быть в системе (видеокарта антикварная или пользователь умудряется работать без установленных нормальных дров от производителя).
Для автоматической инициализации функций OpenGL 2.0 можно использовать класс QGLFunctions (http://qt-project.org/doc/qt-4.8/qglfunctions.html) (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 (http://qt-project.org/doc/qt-4.8/qglcontext.html#getProcAddress) - вместо wglGetProcAddress


Название: Re: glActiveTexture
Отправлено: Igors от Октябрь 26, 2012, 17:59
glActiveTextureARB тоже таким же образом инициализировать вручную придётся.
Чего это если она объявлена в glext.h (да и в glew.h)? Насколько я помню glewInit разбирается со всеми такими

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


Название: Re: glActiveTexture
Отправлено: mitrich от Октябрь 26, 2012, 18:42
В glext.h она объявлена, вот только в opengl32.dll точка входа для неё (и многих других) отсутствует. И под виндой для всех функций OpenGL версии > 1.1 (или расширений, не входящих в стандарт) всё сводится к получению их через wglGetProcAddress. Так работают и QGLContext::getProcAddress, и QGLFunctions, и GLEW, про который я забыл написать (хотя самый удобный вариант, наверное) и который является сторонней библиотекой.


Название: Re: glActiveTexture
Отправлено: Disa от Октябрь 29, 2012, 16:25
Код:
А чего понесло в OpenGL, что хотим получить? Или просто так, для расширения кругозора (что тоже неплохо)

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

О glActiveTexture прочитал кусок в документации на английском и никак не мог понять, в чем трудности вызова функции, которая начинается на gl*. Вроде они не зависят от платформы.


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

О glActiveTexture прочитал кусок в документации на английском и никак не мог понять, в чем трудности вызова функции, которая начинается на gl*. Вроде они не зависят от платформы.
Эти ф-ции зависят от имеющихся расширений, типа weak linked, их может и не быть.


Название: Re: glActiveTexture
Отправлено: Disa от Октябрь 29, 2012, 19:42
Ну я уж было подумал, что Qt для этого не очень подходит :D

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