Аппаратный результат запроса окклюзии кажется не точным
Я столкнулся с проблемой о запросе окклюзии. В моем случае результат запроса кажется всегда больше, чем он должен быть. Например, я использую разрешение 1024 * 1024 для рендеринга, но результат запроса объекта на сцене - 2085029(>1024*1024).
Метод запроса взят из GPU Gems Глава 29
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glDepthMask(GL_FALSE);
glBeginQuery(GL_SAMPLES_PASSED, occlusionQuery[0]);
mesh->Render();
glEndQuery(GL_SAMPLES_PASSED);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glDepthMask(GL_TRUE);
glGetQueryObjectuiv(occlusionQuery[0], GL_QUERY_RESULT, &screenFragmentCount[0]);
Кто-нибудь может помочь?
1 ответ
Запрос окклюзии не сообщает, сколько пикселей прошло тестирование. Он сообщает, сколько фрагментов прошло тестирование (или, точнее, "образцы").
Если вы рисуете один треугольник, а затем рисуете треугольник перед ним, запрос окклюзии подсчитывает фрагменты от обоих, даже если более ранние треугольники перекрываются последними. Треугольники растеризуются по порядку. Таким образом, более поздний треугольник, который покрывает предыдущий, не был растеризован к тому времени, когда увеличилось число запросов окклюзии. Такая окклюзия учитывается только в том случае, если треугольники отображаются от ближайшего к дальнему.