Russian Qt Forum
Ноябрь 22, 2024, 14:14
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
[РЕШЕНО] Использование QPainter на QOpenGLWidget
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО] Использование QPainter на QOpenGLWidget (Прочитано 10942 раз)
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
[РЕШЕНО] Использование QPainter на QOpenGLWidget
«
:
Март 26, 2015, 14:23 »
Привет, друзья!
Никак не могу понять, каким образом я должен что-то настроить, чтобы суметь нарисовать что-либо на QOpenGLWidget с помощью QPainter... Чтение асистента, разбор примера и гугл как-то не помогают.
Рисование я пытаюсь сделать в paintGL(). Даже закомментировав весь код paintGL() кроме пэинтера ничего не происходит. Где-то увидел, что формат поверхности должен быть настроен, но это тоже не помогло. Один раз как-то повезло, нарисовалась часть того, что мне надо и то, после сворачивания и разворачивания. beginNativePainting тоже не помогает.
Прошу помочь...
«
Последнее редактирование: Февраль 22, 2017, 11:28 от __Heaven__
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Использование QPainter на QOpenGLWidget
«
Ответ #1 :
Март 26, 2015, 16:33 »
Да, там чижело.
Поставьте тестовое рисование с QPainter первым в paintGL. Не делайте никаких вызовов OpenGL (пока), там есть неск отличных возможностей зарезать тот QPainter. Напр GL_CULL_FACE.- и QPainter готов. Если не поможет - выкладывайте проект.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Использование QPainter на QOpenGLWidget
«
Ответ #2 :
Март 26, 2015, 17:27 »
понятно... То есть нужно подготовить почву перед рисованием?
Здесь можно отделаться vao?
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Использование QPainter на QOpenGLWidget
«
Ответ #3 :
Март 26, 2015, 17:33 »
Да, хочу добавить, что мне эта связка нужна только для того, чтобы вывести текст. Быть может мне в другую сторону копать?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Использование QPainter на QOpenGLWidget
«
Ответ #4 :
Март 26, 2015, 17:58 »
Цитата: __Heaven__ от Март 26, 2015, 17:27
понятно... То есть нужно подготовить почву перед рисованием?
Здесь можно отделаться vao?
Наоборот, не готовить, а отключить эту почву
Отключите весь Ваш код (вызовы OpenGL) и пробуйте QPainter
Цитата: __Heaven__ от Март 26, 2015, 17:33
Да, хочу добавить, что мне эта связка нужна только для того, чтобы вывести текст. Быть может мне в другую сторону копать?
Как уже говорил, у меня был текст "средствами OpenGL" (на старте рисую все буквы, потом через glCallList). Невдобняк, кода много а возможностей мало. Снес, перевел на QPainter
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Использование QPainter на QOpenGLWidget
«
Ответ #5 :
Июль 02, 2015, 10:58 »
хоть и старый пост...но с QPainter большие проблемы - он далеко не на всех карточках будет корректно текст выводить поверх GL контекста.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Использование QPainter на QOpenGLWidget
«
Ответ #6 :
Июль 03, 2015, 08:59 »
Цитата: Racheengel от Июль 02, 2015, 10:58
хоть и старый пост...но с QPainter большие проблемы - он далеко не на всех карточках будет корректно текст выводить поверх GL контекста.
Насчет "карточек" - верится с трудом, иначе бы троллей давно затюкали. По меньшей мере багов было бы запостено масса. Скорее всего та же проблема что и у меня - некоторые вызовы OpenGL могут блокировать вывод текста, и отловить такие вызовы хлопотно.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Использование QPainter на QOpenGLWidget
«
Ответ #7 :
Июль 03, 2015, 15:36 »
А Тролли это и не скрывают, например, по поводу void QGLWidget::renderText(...) написано:
Note: This function is not supported on OpenGL/ES systems.
И там же ниже:
Overpaint with QPainter::drawText() instead.
Проблема в том, что и оверпаинт не всякое железо поддерживает
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Использование QPainter на QOpenGLWidget
«
Ответ #8 :
Июль 04, 2015, 06:34 »
Цитата: Racheengel от Июль 03, 2015, 15:36
Overpaint with QPainter::drawText() instead.
Проблема в том, что и оверпаинт не всякое железо поддерживает
Overpaint сам по себе никто чтобы его поддерживать, просто метод в конце сеанса рисования. Если на каких-то картах не работает drawText - приведите ссылки/факты на каких, а то пока на уровне "одна бабушка сказала"
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Использование QPainter на QOpenGLWidget
«
Ответ #9 :
Июль 06, 2015, 13:41 »
Например, карта Radeon X1600, Win7, Qt 5.3.1 - не работает ни drawText сам по себе, ни overpaint example.
Драйвер 8.593.100 от АTI.
Direct3d 8.14.10.0647
OpenGL 6.14.10.8545
Может в других осях или с другим драйвером и будет работать, не знаю. Конкретно с этими версиями ни в какую.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Использование QPainter на QOpenGLWidget
«
Ответ #10 :
Февраль 22, 2017, 07:47 »
Короче, решил проблему с использованием т.н. stateless rendering в той реализации, как я его понимаю
.
Перед рисованием пэинтеру говорю begin(this), и обособляю gl операции в beginNativePainting и endNativePainting. Для вывода паинтером сбрасываю контекст в исходную позицию, делаю вывод текста, прямоугольников, чего хотите и снова beginNativePainting и т.д. В конце ставим end.
begin, end и вынос painter в член класса необходимы, чтобы нашим painterом могли пользоваться наследники, точно так же через begin, end после отрисовки базовым виджетом.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...