LINUX.ORG.RU

Threaded OpenGL QT5


0

2

Привет народ. Нужен любой пример работы, как в Qt запустить нить которая бы рисовала при помощи OpenGL, но не блокируя не будучи блокироема GUI. Тоесть. Есть прога на QT. В ней есть виджет, на котором должна рисовать нить, (QThread) использую OpenGL. Классически, в QT это решается таймером. Мне это категорически не подходит. Мне нужна синхронизация к кадровой развертке. Классическая задача для игрушек, но мне не для игрушки надо. Нужен рабочий пример. Linux 64bit, видео Intel или nvidia.

Тормозит при наличии нескольких QGLWidget

есть такой пример glhypnotizer - 10 отдельных потоков OpenGL, пример для Qt4 но там же по ссылке есть любительская тривиальная модификация чтобы на Qt5 пахало

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

1. Падает пример. 2. Мне не нужно 10 контекство. Мне нужен один, и без MDI. Но чтобы OpenGL не тормозил GUI и чтобы привязаться к вертикальной развертке.

anonymous
()

В основном потоке рисовать то, что лежит в буфере. В отдельном потоке готовить буфер и выставлять флаг готовности.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Хотелось бы получить привязку к кадровой развертке. И что бы GUI не влияло на GL и GL не влиял на GUI. Как я понял, сейчас без большой пляски с бубном, не получится.

Artem-Dnepr
() автор топика
Ответ на: комментарий от Artem-Dnepr

Хотелось бы получить привязку к кадровой развертке.

Ну так а при чем тут потоки? Привязывайте рендерер к vsync. В отдельном потоке обновляйте буфер, выставляйте флаг.

И что бы GUI не влияло на GL и GL не влиял на GUI. Как я понял, сейчас без большой пляски с бубном, не получится.

А почему gl должен влиять на gui?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Как привязать к vsync без отдельного потока? И обновлять буфер в отдельном поток, это и есть запустить OpenGL в отдельном потоке.

Artem-Dnepr
() автор топика
Ответ на: комментарий от Artem-Dnepr

Как привязать к vsync без отдельного потока?

Если в драйвере включена опция vsync, то привязка будет. В ином случае нужно выставлять эту опцию индивидуально для каждой ОС отдельно.
Если мне память не изменяет, в OpenGL нет такой возможности.

И обновлять буфер в отдельном поток, это и есть запустить OpenGL в отдельном потоке.

OpenGL в основном потоке, а буфер с данными в отдельном. Там вы формируете батчи (текстура, вертексный буфер, стейты), ставите флаг «готово». Основной поток, увидев этот флаг, отрисует ваши батчи.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.