Russian Qt Forum
Ноябрь 22, 2024, 17:50
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
QOpenGLVertexArrayObject
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QOpenGLVertexArrayObject (Прочитано 5451 раз)
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
QOpenGLVertexArrayObject
«
:
Февраль 02, 2015, 15:59 »
Привет, друзья!
Мне не удаётся до конца понять, что из себя представляет vao. Прошу помочь разобраться.
Вот мои додумки:
Если я имею GLWidget (или, наверное, правильнее сказать контекст GL, тоже до конца не понял назначения, видимо из-за того, что мне его не надо "делить"), то я уже имею по умолчанию некий неявно прикрученный (bind) vao.
Когда я подключаю некий QOpenGLBuffer1 и задаю ему параметры атрибутов, то эти изменения происходят именно в vao.
Допустим, после прорисовки содержимого QOpenGLBuffer1 я прикручу QOpenGLBuffer2, у которого атрибутов меньше, чем у прошлого. Далее я настрою атрибуты для QOpenGLBuffer2 (при этом не отключая атрибуты QOpenGLBuffer1). При попытке нарисовать содержимое есть вероятность, что я получу либо ошибку, либо странную картинку, либо сегфол.
Так вот хочу понять, при переключении буферов именно vao хранит состояние атрибутов? То есть для выше изложенного необходимо создать vao1 и vao2 да переключать их вместе с буферами?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QOpenGLVertexArrayObject
«
Ответ #1 :
Февраль 04, 2015, 15:59 »
Цитата: __Heaven__ от Февраль 02, 2015, 15:59
Так вот хочу понять, при переключении буферов именно vao хранит состояние атрибутов? То есть для выше изложенного необходимо создать vao1 и vao2 да переключать их вместе с буферами?
QOpenGLBuffer - это "обертка" над "ID" (слотом) в OpenGL. Он может управляться через vao или руками. Вы можете создать N буферов и заполнить их данными, но в данном (текущем) рисовании только один (данного типа) может быть активен. Конечно число данных в буфере должно сбиваться с тем что ожидает рисование (напр glDrawElements), иначе нечего удивляться вылету.
Какое-то у Вас с "обсевером" изучение - ну совсем не творческое. Зубрите классы - а толку?
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: QOpenGLVertexArrayObject
«
Ответ #2 :
Февраль 04, 2015, 16:22 »
Что делает буфер я понимаю.
Цитата: Igors от Февраль 04, 2015, 15:59
Он может управляться через vao или руками.
Руками - я понимаю следующее:
Создавать, биндить, заполнять данными, считывать при рендеринге.
с vao всё по-прежнему не понятно.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QOpenGLVertexArrayObject
«
Ответ #3 :
Февраль 04, 2015, 17:06 »
Цитата: __Heaven__ от Февраль 04, 2015, 16:22
Руками - я понимаю следующее:
Создавать, биндить, заполнять данными, считывать при рендеринге.
Создавать, заполнять данными, перед рисованием биндить, потом отключать
Цитата: __Heaven__ от Февраль 04, 2015, 16:22
с vao всё по-прежнему не понятно.
Все то же самое, неск "ID" (разных типов) могут быть объединены в набор и "забиндены/унбиндены" одним вызовом. Насколько помню появилось в 2008, т.е. есть вероятность (пусть небольшая) что карта старовато. Поэтому живу без этой плюшки
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: QOpenGLVertexArrayObject
«
Ответ #4 :
Февраль 04, 2015, 17:27 »
Прозрел. Спасибо.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: QOpenGLVertexArrayObject
«
Ответ #5 :
Март 10, 2015, 18:43 »
А этот vao не заведует всякими положениями glEnable(GL_DEPTH_TEST) и program.enableAttributeArray(vertex)?
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: QOpenGLVertexArrayObject
«
Ответ #6 :
Март 10, 2015, 19:00 »
Меня интересует, при переключении между программами с освещением и без освещения, можно ли избежать постоянного enableAttributeArray, disableAttributeArray?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QOpenGLVertexArrayObject
«
Ответ #7 :
Март 10, 2015, 19:15 »
Цитата: __Heaven__ от Март 10, 2015, 19:00
Меня интересует, при переключении между программами с освещением и без освещения, можно ли избежать постоянного enableAttributeArray, disableAttributeArray?
Что Вы называете "программой"? GLSL извращения?
Если так, то я бы не стал ничего избегать, и делал бы два шейдера, для освещения и без. Не надейтесь отпихнуться if'ами
Код
C++ (Qt)
if
(
lightOn
)
{
...
}
Нормальный человек полагает что если lightOn = false, то ветка не выполняется и проц не грузит. Но это не так в GLSL - ветка все равно
выполняется
и карту грузит. Поэтому о таких мелочах как enable/disable неудобно и говорить
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: QOpenGLVertexArrayObject
«
Ответ #8 :
Март 10, 2015, 19:21 »
Программой я называю QOpenGLShaderProgram.
Дело в том, что двум программам нужно разное количество входных параметров (атрибутов). Если при переключении программ не перекрывать (disableAttributeArray) атрибуты первой программы или не резрешать (enableAttributeArray) атрибуты второй программы, то можно либо ничего не получить на экране, либо вообще вылететь.
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...