Название: [Qt 4.1.4] Painting over QGLWidget Отправлено: Sectoid от Октябрь 12, 2006, 09:47 Всем привет.
Возникла необходимость совмещать вывод OpenGL и QPainter. Посмотрел на пример "Overpainting". Вроде бы всё работает. В процессе "тыкания" наткнулся на вот такой момент: функция glClear() не работает как положено при вызове её внутри скобок QPainter::begin(), QPainter::end(). Например такой код: Файл Test.hpp: Код:
Файл Test.cpp: Код:
Файл main.cpp: Код:
Код должен (по моему розумению) выводить окно красного цвета. Но этого не происходит - выводится обычное окно. Куда копать? Название: [Qt 4.1.4] Painting over QGLWidget Отправлено: Dendy от Октябрь 12, 2006, 23:29 Попробуй разделить GL-методьІ рисования и растрового движка отдельно по:
Код: void paintEvent( QPaintEvent * e ); Насколько я понимаю - при рисовании с помощью QPainter на QGLWidget вьІзьІваются методьІ именно OpenGL. Как тьІ предполагаешь мешать неатомарньІе операции OpenGL: свои и QPainter'а? Сомневаюсь, что ето будет работать. Попробуй не вьІзьІвать функции OpenGL в пределах QPainter::begin() / QPainter::end(). Название: [Qt 4.1.4] Painting over QGLWidget Отправлено: Sectoid от Октябрь 13, 2006, 09:43 Цитата: "Dendy" Сомневаюсь, что ето будет работать. Попробуй не вьІзьІвать функции OpenGL в пределах QPainter::begin() / QPainter::end(). Это как раз должно работать, если верить троллям. И работает. Но как-то странно. Попробуй запустить код, который я привёл - поймёшь о чём я. glClear() не отрабатывает. Но если попробывать что-то нарисовать, ну хоть так: Код:
То синий квадратик нарисуется. Но фон всё равно не очистится в цвет, установленный glClearColor()... Баг? Название: [Qt 4.1.4] Painting over QGLWidget Отправлено: Dendy от Октябрь 13, 2006, 14:02 ТьІ не можешь бьІть уверен, что внутри QPainter'а не вьІзьІвается свой glClearColor(), или другие функции так или иначе влияющие на машину состояния OpenGL.
Не забьІвай, что OpenGL не обьектная библиотека, а процедурная. Операции QPainter'а неатомарньІ так же как и OpenGL. О результате операций QPainter'а можно судить только ПОСЛЕ завершения его работьІ. Иначе - результат непредсказуем. Ибо ето нигде не оговорено в документации. В любой момент они что-то добавляют в либу и результат твоего кодп будет другим. Название: [Qt 4.1.4] Painting over QGLWidget Отправлено: Sectoid от Октябрь 13, 2006, 14:37 Цитата: "Dendy" ТьІ не можешь бьІть уверен, что внутри QPainter'а не вьІзьІвается свой glClearColor(), или другие функции так или иначе влияющие на машину состояния OpenGL. Да. Ты был прав. Добавление glClearColor() перед glClear() решает проблему. Спасибо. Тема закрыта. Название: [Qt 4.1.4] Painting over QGLWidget Отправлено: Dendy от Октябрь 13, 2006, 15:38 Да, и так, к слову. У тебя утечка памяти в функции main() - не удаляется екземпляр класса Test.
|