OPENGL ARB_occlusion_query Отсечение окклюзии

for (int i = 0; i < Number_Of_queries; i++)
{
    glBeginQueryARB(GL_SAMPLES_PASSED_ARB, queries[i]);

    Box[i]

    glEndQueryARB(GL_SAMPLES_PASSED_ARB);
}

Мне любопытен метод, предложенный в GPU GEMS 1 для отбраковки окклюзии, когда выполняется определенное количество запросов. Используя описанный метод, вы не можете протестировать отдельные коробки друг против друга, поэтому вы должны сделать следующее?

Тестовая коробка A -> Рендерная коробка A

Тестовая коробка B -> Рендерная коробка B

Тестовая коробка C -> Рендерная коробка C

и так далее...


person Dave    schedule 19.04.2011    source источник
comment
Поскольку вы здесь впервые, обязательно узнайте о функциях принятия и голосования.   -  person Christian Rau    schedule 14.08.2011


Ответы (2)


Я не уверен, правильно ли я вас понял, но разве это не один из недостатков наивной реализации сначала рендеринга всех блоков (а не записи в буфер глубины), а затем использования результатов запроса для проверки каждого объекта? Но ваше предложение немедленно использовать результат запроса одного блока является еще более наивным подходом, поскольку это останавливает конвейер. Если вы прочитаете эту главу (предположим, что вы ссылаетесь на главу 29) дальше, то увидите, что в ней представлена ​​простая техника преодоления недостатков обоих наивных подходов (то есть просто визуализировать все в обычном режиме и использовать результаты запроса предыдущего кадра).

person Christian Rau    schedule 14.08.2011

Я думаю (было бы хорошо связать статью о драгоценных камнях GPU...), вы запутались в несколько асинхронных запросах, как описано в таких расширениях:

http://developer.download.nvidia.com/opengl/specs/GL_NV_conditional_render.txt

Если я правильно помню, были и другие расширения для проверки наличия результата без блокировки.

Как указывает Кристиан Рау, простое «запрос, ожидание результата, выполнение действий на основе результата» может застопориться и из-за этого может не принести никакой выгоды, в зависимости от того, сколько работы приходится на «выполнение действий». Фактически, выполнение запроса, ожидание его прохождения туда и обратно только для сохранения одного вызова отрисовки, скорее всего, вообще не поможет.

person starmole    schedule 04.02.2012