Название: Создание контекста Отправлено: Igors от Апрель 28, 2015, 14:59 Добрый день
Уже задавал этот вопрос, но все еще (очень) актуально. В доке упорно говорится что QOpenGLContext создается "при первом рисовании" (как для QOpenGLWidget так и для QOpenGLWindow). И, судя по исходникам, так и есть. Но соблюдать это правило в реальном приложении никак не выходит. Перед показом хоть каких-то окон нужно пошарить по extensions, загрузить текстуры с диска и много чего еще, и все это требует чтобы контекст уже был создан. Как выкручиваться ? Спасибо Название: Re: Создание контекста Отправлено: __Heaven__ от Апрель 28, 2015, 15:45 Под первым рисованием вы понимаете вызов paintGL()?
Как я понимаю, контекст создаётся прямо перед вызовом initializeGL() В этой фунции можно пройтись по текстурам, покомпилить шейдеры, заполнить буферы. А ещё, наверное, можно создать общий контекст и в нём уже сделать необходимые манипуляции. Название: Re: Создание контекста Отправлено: Igors от Апрель 28, 2015, 16:43 Под первым рисованием вы понимаете вызов paintGL()? Ответ в стиле "КО" :) Не выходит. Напр та же загрузка текстур может занимать минуты, нужен индикатор прогресса. Как я буду его показывать из initializeGL? По-хорошему надо сначала все загрузить а потом уж окна открывать. Как я понимаю, контекст создаётся прямо перед вызовом initializeGL() В этой фунции можно пройтись по текстурам, покомпилить шейдеры, заполнить буферы. А ещё, наверное, можно создать общий контекст и в нём уже сделать необходимые манипуляции. Да, самостоятельно создать контекст можно, но он не шарится с теми что я получаю в initalize/paintGL - поэтому годится только для просмотра extensionsНазвание: Re: Создание контекста Отправлено: __Heaven__ от Апрель 28, 2015, 18:04 Да, самостоятельно создать контекст можно, но он не шарится с теми что я получаю в initalize/paintGL - поэтому годится только для просмотра extensions Ну да. Непонятка какая-то. Общий контекст можно создать только до create(), а при этом в конструкторе контекст = 0, а в инициализации он уже валидный... Зачем тогда вообще общие контексты в Qt?Название: Re: Создание контекста Отправлено: Igors от Апрель 29, 2015, 06:39 Есть такое решение
Код Ну и в paintEvent сразу выходить если стоит doNotPaint. Это заставляет создать контекст, но увы - в консоль отсыпаются безобразные варнинги :'( Название: Re: Создание контекста Отправлено: __Heaven__ от Апрель 29, 2015, 10:00 Покопайте в сторону
Код Одновременно с созданием контекста для QOpenGLWidget создаётся некий общий контекст. Быть может его удастся как-то поиспользовать. Название: Re: Создание контекста Отправлено: Igors от Апрель 29, 2015, 10:54 Покопайте в сторону Можно вообще самому создать контекст и им рисовать в любом окне - но тогда надо как-то "избавляться" от тех что подаются в paintGL. Может и можно, но неудобно.Код Одновременно с созданием контекста для QOpenGLWidget создаётся некий общий контекст. Быть может его удастся как-то поиспользовать. Общий контекст создается если флажок AA_SharedOpenGLContext установлен, но контексты QOpenGLWindow автоматом не шарятся. Ну ладно, зашарить не проблема, главное их иметь (т.е. создать) |