Я хочу знать, есть ли способ получить количество эффективных полигонов (или вершин), отображаемых в окне, когда аппаратная тесселяция включена. Из-за адаптивной тесселяции номер полигона меняется от одного кадра к другому.
Я использую OpenGL 4.2 и визуализирую сетку, вызывая glDrawElements. Я использую полнофункциональные шейдеры (Vertex, Tessellation Control, Tessellation Evaluation, Geometry и Fragment).
У меня есть начальное количество полигонов в массиве, но после выполнения этапа тесселяции это число уже недействительно.
Я пытался использовать glGetQuery(GL_PRIMITIVES_GENERATED), но он всегда возвращает 0.
glGenQueries(1, query).
glBeginQuery(GL_PRIMITIVES_GENERATED, query).
//Draw stuff
glEndQuery(GL_PRIMITIVES_GENERATED).
glGetQueryObjectuiv(query, GL_QUERY_RESULT_AVAILABLE, &value).
glGetQueryObjectuiv (<primitive query ID>, GL_QUERY_RESULT, &value)
. Кроме того, вам следует подождать, покаGL_QUERY_RESULT_AVAILABLE
не станет true, прежде чем делать это, иначе вы вызовете остановку конвейера. Можете ли вы показать код, в котором вы на самом деле настраиваете свой примитивный запрос? Если вы этого не сделали, я могу дать вам псевдокод для правильной настройки. - person Andon M. Coleman   schedule 10.05.2014&value
. Вас интересует не возвращаемое значение, и вам нужно передать OpenGL адрес переменнойvalue
. Я могу только представить, что компилятор разрешает это, потому что он неявно преобразует ваше целое число в указатель, но большинство компиляторов, по крайней мере, предупредят вас за попытку сделать это. Не могли бы вы отредактировать исходный вопрос и поместить то, что вы только что упомянули, в блок кода? Это сделало бы понимание этого намного проще. - person Andon M. Coleman   schedule 15.05.2014