OPENGL ARB_occlusion_query Отбор окклюзии - PullRequest
5 голосов
/ 19 апреля 2011
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 для отбора окклюзии, когда выполняется определенное количество запросов. Используя описанный метод, вы не можете проверить отдельные блоки друг против друга, поэтому вы должны делать следующее?

Тест Box A -> Визуализация Box A

Тест Box B -> Визуализация Box B

Test Box C -> Render Box C

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

Ответы [ 2 ]

1 голос
/ 14 августа 2011

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

0 голосов
/ 04 февраля 2012

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

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

...