Может ли шейдер геометрии получить доступ к параметрам отсечения OpenGL и передней грани?

Может ли шейдер геометрии OpenGL получить доступ к текущим настройкам для glFrontFace и glCullFace, и включено ли отсечение граней? У меня есть геометрический шейдер, который отображает нормали для вершин треугольников, и я хотел бы отображать их только для треугольников, которые не будут отбракованы. Я хотел бы иметь глобальные переменные, аналогичные встроенным универсальным переменным, которые сообщают, был ли glFrontFace предоставлен GL_CCW или CL_CW, и установлено ли для glCullFace значение GL_FRONT, GL_BACK или GL_FRONT_AND_BACK и включена ли отбраковка лиц.

Обходной путь для моей программы на C ++ состоит в том, чтобы установить значения как единые переменные в программе шейдера, но он был бы более общим и упростил бы использование программы шейдера, если бы она могла запрашивать статус отбраковки, настройки glFrontFace и glCullFace из OpenGL .

Обратите внимание, мне не нужна переменная gl_FrontFacing, доступная для фрагментного шейдера. Вместо этого шейдер геометрии должен иметь доступ к значениям, чтобы знать, создавать ли линию, представляющую нормаль в вершинах треугольника.


person Sam Buss    schedule 15.02.2020    source источник
comment
Может ли шейдер геометрии OpenGL получить доступ к текущим настройкам для glFrontFace и glCullFace [...] `- Нет. Вы должны использовать униформу.   -  person Rabbid76    schedule 15.02.2020
comment
Спасибо за ответы. Это подтверждает то, чего я ожидал.   -  person Sam Buss    schedule 17.02.2020


Ответы (2)


Нет, это все входные данные, которые есть у вас в геометрических шейдерах: https://www.khronos.org/opengl/wiki/Geometry_Shader#Inputs

Вам придется использовать униформу.

person tuket    schedule 15.02.2020

Думайте о функциях, которые изменяют состояния сервера OpenGL, как о интерфейсах к униформе их внутренней реализации, используемой фиксированными конвейерными шейдерами. По мере того, как вы реализуете свой собственный конвейер, вы должны создавать свою собственную униформу. Один из способов переключения с фиксированного конвейера на гибкий в рамках уже существующего кода - реализовать собственную эмуляцию функций OpenGl, хотя это было бы не очень эффективно.

person Swift - Friday Pie    schedule 15.02.2020