Может ли геометрический шейдер получить доступ к настройкам выбраковки и передней грани OpenGL? - PullRequest
1 голос
/ 15 февраля 2020

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

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

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

Ответы [ 2 ]

2 голосов
/ 15 февраля 2020

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

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

0 голосов
/ 15 февраля 2020

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

...