2016-12-09 8 views
1

Ich versuche, einen alten GLSL Shader 120 zu aktualisieren, die ich habe, und obwohl die meisten es war es einfach war, es wird die folgend Ich habe Probleme mit:Aktualisierung Vermächtnis GLSL Shadern zu modernem GLSL

Vertex-Shader: gl_FrontSecondaryColor, gl_FrontColor

Fragment-Shader: gl_Color, gl_SecondaryColor

Das Problem ist, dass ich für eine nicht in der Lage gewesen, genügend Alternativen zu finden alles 3.x und höher.

Zum Beispiel: Der Ersatz für gl_FragColor ist

layout (location = 0) out vec4 fragColor; 

Aber für die anderen oben erwähnt zu schaffen, wie genau würden sie behandelt werden?

+0

OpenGL-Grafik-Pipeline hat sich sehr verändert, siehe https://learnopengl.com/#!Advanced-OpenGL/Advanced-GLSL – MrKiwi

+0

@MrKiwi Ja, es hat sich viel geändert, aber was ich meine ist die moderne Äquivalenz, ähnlich wie Sie gl_FragColor, gl_ProjectViewMatrix usw. nicht mehr verwenden. Stattdessen erstellen Sie Ihre eigenen Uniformen und Variablen. – SpicyWeenie

Antwort

1

gl_FrontSecondaryColor, gl_FrontColor

Dies sind nur Vertexshader-Ausgänge. Sie sind in keiner Weise besonders.

gl_Color, gl_SecondaryColor

Dies sind magische Fragment-Shader Dinge, die effektiv bedingte Logik in Ihrem Shader auszuführen. Sie führen Front-/Backface-Tests durch und holen dann die Vorder- oder Rückseite der entsprechenden Farbe.

Also, wenn Sie zweiseitiges Rendering tun, müssten Sie den Test selbst tun. Der VS würde einen vorderen und einen hinteren Wert ausgeben, und der FS würde beide eingeben, aber einen auswählen, der abhängig von der Ausrichtung des Dreiecks zu verwenden ist. Die built-in gl_FrontFace variable zeigt an, ob das aktuelle Gesicht vorne oder hinten ist. Verwenden Sie das, um den zu verwendenden Eingabewert auszuwählen.

Und wenn Sie nicht doppelseitige Rendering tun ... ist es Ihnen egal. Sie haben nur einen VS-Ausgang und einen FS-Eingang.