Геометрический шейдер

Я пытаюсь добавить геометрический шейдер в свою программу. Проблема в том, что я использую QGLfunctions, моя версия OpenGL 3.1 и Qt 5.0.

В Qt 5.0 классы QOpenGLShader и QOpenGLShaderProgram поддерживали только шейдеры Vertex и Fragment. Qt 5.1 включает поддержку всех стадий шейдера, поддерживаемых OpenGL (включая геометрический шейдер). Я знаю, как добавить шейдер, используя addShaderFromSourceCode, предоставленный QGLfunctions, но таким образом добавить геометрический шейдер невозможно.

Может ли кто-нибудь помочь мне, как добавить геометрический шейдер в мою программу?


person M_global    schedule 25.09.2013    source источник
comment
Как вы пытались это добавить? Вы выбрали правильный тип? qt-project.org/doc/qt-5.1/ qtopengl/ Какую ошибку вы получили, когда пытались это сделать?   -  person lpapp    schedule 25.09.2013
comment
Вы можете обойти удобные функции Qt OpenGL и напрямую загружать шейдеры, используя ванильный API OpenGL.   -  person datenwolf    schedule 25.09.2013


Ответы (2)


Не путайте классы QGL и QOpenGL. Первый устарел в Qt 5 и не должен использоваться (только для кода, совместимого с Qt 4). Второй не имеет геометрических шейдеров в Qt 5.0, только из Qt 5.1 (причина в том, что Qt 5 изначально был основан на OpenGL ES для совместимости с большими платформами, поддержка OpenGL 3-4 была добавлена ​​в Qt 5.1).

Вы можете использовать классический код GL для прямого использования геометрических шейдеров (тогда без Qt)

person gbdivers    schedule 25.09.2013
comment
Что ты имеешь в виду? Есть геометрический шейдер. Он мог бы использовать это. - person lpapp; 25.09.2013
comment
Да, геометрический шейдер есть в старом (устаревшем) классе QGLShader или в классе QOpenGLShader Qt 5.1, но не в QOpenGLShader Qt 5.0. - person gbdivers; 25.09.2013
comment
У меня сложилось впечатление, что это должно работать: qt-project. org/doc/qt-5.1/qtgui/ Да, я давал ссылку на qtopengl выше, но, похоже, это тоже относится к этому типу. - person lpapp; 25.09.2013
comment
Да в Qt 5.1. Но здесь M_global хочет использовать Qt 5.0, а поддержки геометрических шейдеров нет (qt-project.org/doc/qt-5.0/qtgui/) - person gbdivers; 25.09.2013
comment
Хорошо, я понимаю ваши замечания. Добавляю исправление в свое первое сообщение (не в Qt 5.0, только из Qt 5.1) - person gbdivers; 25.09.2013
comment
Я не думаю, что это ошибка... жду его ответа на твой вопрос - person gbdivers; 25.09.2013
comment
Я могу установить QT 5.1, но все же мне нужен OpenGL ›= 3.2, с другой стороны, я хочу иметь переносимость, гарантированную функциями QGL. Вот почему я пытаюсь обойти устаревший класс QGLShader - person M_global; 25.09.2013
comment
Я установил QT 5.1 и могу использовать подмножество Opengl ES 2.0, которое поддерживается большинством настольных карт... - person M_global; 25.09.2013
comment
Мне трудно следовать за вами ... Если у вас есть Qt 5.1, используйте классы QOpenGL (то же самое для функций GL используйте QOpenGLFunctions , а QOpenGLShader предлагает геометрические шейдеры). Для использования GL ES 2 или GL › 3 у вас нет выбора, в GL ES 2 нет геометрических шейдеров. - person gbdivers; 25.09.2013

Краткий ответ: вы не можете иметь эту функцию с Qt 5.0 и OpenGL 3.0.

Убедитесь, что вы используете Qt 5.1, так как поддержка геометрических шейдеров была добавлена ​​только в этой версии. В Qt 5.0 такой функции не было. Подробнее см. в официальной документации.

Кроме того, Шон записывал об этом, когда они добавил эту функцию в Qt.

QOpenGLShader::Геометрия

0x0004 Геометрические шейдеры, написанные на языке шейдеров OpenGL (GLSL) на основе базовой функции OpenGL (требуется OpenGL ›= 3.2).

person lpapp    schedule 25.09.2013