2015-11-07 7 views
0

Я пытаюсь использовать GLEW с новым QOpenGLWidget (который появился в Qt 5.4). Хотя я мог сделать это довольно легко с помощью старого QGLWidget, кажется, что новые классы QOpenGLWidget/QOpenGLContext не очень хорошо взаимодействуют с GLEW (и у меня нет выбора, я использую внешнюю библиотеку, которая использует GLEW). У меня есть следующие проблемы:Использование glew с Qt 5.4 QOpenGLWidget

  1. Eсть время компиляции предупреждения (в qopenglfunctions.h срабатывает когда GLEW_H определен), и я не могу избежать включения qopenglfunctions.h, так как он включен QOpenGLContext
  2. (не уверен, что это связано) в моем приложении, я получил OpenGL стек underflow
  3. (не уверен, что это связано) в моем приложении, когда я пытаюсь сделать контекст OpenGL текущим, это приводит к черному окну для всего приложение (у меня есть несколько QOpenGLWidgets в приложении, а необходимо изменить контекст, потому что я используя обрезку цвета OpenGL)

Я хотел бы избавиться от предупреждений, чтобы определить, связаны ли 2 и 3. с несовместимостью GLEW/QOpenGLWidget.

Замечание: В Stackoverflow уже есть несколько вопросов о Qt5/GLEW, но все они связаны с (более старым) QGLWidget, который ведет себя совершенно по-другому (без проблем с этим с тем же кодом/приложением).

кодовая находится здесь: https://gforge.inria.fr/frs/?group_id=1465 (слишком большой, чтобы быть здесь включены, и из-за длины, я не могу просить вас, чтобы взглянуть на него, только в случае, если вы хотите знать)

+0

Меня бы интересовал комментарий, который обычно идет с -1 :-) – BrunoLevy

ответ

0

Я в состоянии решить все проблемы следующим образом (да!):

  1. черное окно с makeCurrent(): Я пытался использовать QOpenGLContext :: makeCurrent (Surface *), она занимает поверхность * как аргумент, у меня не было права. Теперь я использую QOpenGLWidget :: makeCurrent() (который передает правую поверхность * в контекст );
  2. Ошибка нижнего уровня матрицы стека OpenGL: этот был более сложным, потому что во время моей функции рендеринга OpenGL я впервые отображал некоторый текст в виджетах QTextEdit, это вызывало нечто вроде переключателя контекста OpenGL, который был сброс матрицы стека. Исправлено это путем опрокидывания обновлений для текста и обработки их вне функции рендеринга OpenGL; не
  3. Предупреждения, связанные с Qt/glew.h: это один было легче, так как я больше не используя QOpenGLContext (я делаю переключение контекста, используя QOpenGLWidget), я больше не нужно включать в заголовок QtOpenGL и не имею больше нет конфликт.