Законно ли связывать gl_InstanceID как единое местоположение? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть GLSL-шейдер, который использует входную переменную gl_InstanceID, которая устанавливается glDrawArraysInstanced all. Я хочу, чтобы этот шейдер работал с drawcall, который не устанавливает gl_InstanceID. Здесь я хочу установить gl_InstanceID вручную в едином стиле.

Является ли законным / определенным поведение связывать glInstanceID как униформу для этих случаев?

GLint const instanceIdx = glGetUniformLocation(pid, "gl_InstanceID");

1 Ответ

0 голосов
/ 17 октября 2019

Если вы пытаетесь вручную указать значение для gl_InstanceID, получение его местоположения как униформы не будет работать по нескольким причинам, но в основном потому, что это , а не униформа . Это встроенная входная переменная вершинного шейдера , которая отличается от атрибута вершины (предоставленного пользователем, а не встроенного).

Значение gl_InstanceID будетноль для любого вызова отрисовки, который не использует инстансинг. Если вы хотите, чтобы он был ненулевым для таких вызовов, это невозможно. gl_BaseInstance из GLSL 4.60 / ARB_shader_draw_parameters будет отслеживать значение базового экземпляра из вызовов отрисовки BaseInstance . Таким образом, вы можете использовать это для эффективной установки индекса экземпляра.

Но без этого вы ничего не сможете сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...