Transform-Feedback: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „Geometryshader und Transform-Feedback.]] Transform…“)
 
(Siehe auch)
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
 
[[Bild:shader_Zufallsgenerator.png|thumb|256px|right|GPU-Partikelsystem auf Basis von [[Shader#Geometryshader|Geometryshader]] und Transform-Feedback.]] Transform-Feedback befindet sich in der [[#Render-Pipeline|Render-Pipeline]] direkt nach dem [[Shader#Vertexshader|Vertexshader]] bzw. [[Shader#Geometryshader|Geometryshader]]. Diese Funktion ermöglicht es einzelne oder auch alle Output-Variablen (<tt>varying</tt>) aus dem Shader auszulesen und in ein (oder mehrere) Buffer-Objekte zu schreiben. Buffer-Objekte sind einfach nur Speicherbereiche die sich flexibel als [[TBO|Texturbuffer]], als [[VBO|Vertexbuffer]] oder auch [[VBO|Elementbuffer]] interpretieren lassen. Immer so wie man es gerade braucht.
 
[[Bild:shader_Zufallsgenerator.png|thumb|256px|right|GPU-Partikelsystem auf Basis von [[Shader#Geometryshader|Geometryshader]] und Transform-Feedback.]] Transform-Feedback befindet sich in der [[#Render-Pipeline|Render-Pipeline]] direkt nach dem [[Shader#Vertexshader|Vertexshader]] bzw. [[Shader#Geometryshader|Geometryshader]]. Diese Funktion ermöglicht es einzelne oder auch alle Output-Variablen (<tt>varying</tt>) aus dem Shader auszulesen und in ein (oder mehrere) Buffer-Objekte zu schreiben. Buffer-Objekte sind einfach nur Speicherbereiche die sich flexibel als [[TBO|Texturbuffer]], als [[VBO|Vertexbuffer]] oder auch [[VBO|Elementbuffer]] interpretieren lassen. Immer so wie man es gerade braucht.
  
Transform-Feedback ist ein Feature von ShaderModel 4.0 und somit auf älteren Grafikkarten nicht verfügbar. In der [http://de.wikipedia.org/wiki/DirectX DirectX]-Welt ist  
+
Transform-Feedback ist ein Feature von ShaderModel 4.0 und somit auf älteren Grafikkarten nicht verfügbar. In der [http://de.wikipedia.org/wiki/DirectX DirectX]-Welt ist Transform-Feedback unter der Bezeichnung ''Stream-Out'' bekannt. Mit OpenGL 3.0 wurde Transform-Feedback in den OpenGL-Kern aufgenommen. In älteren Versionen von OpenGL ist Transform-Feedback in verschiedenen Varianten als Extension verfügbar:
Transform-Feedback unter der Bezeichnung ''Stream-Out'' bekannt. Mit OpenGL 3.0 wurde Transform-Feedback in den OpenGL-Kern aufgenommen. In älteren Versionen von OpenGL ist Transform-Feedback in verschiedenen Varianten als Extension verfügbar:
 
 
* [[GL_EXT_transform_feedback]]
 
* [[GL_EXT_transform_feedback]]
 
* [[GL_NV_transform_feedback]]
 
* [[GL_NV_transform_feedback]]
Zeile 15: Zeile 14:
  
 
[[Datei:Pipeline.png]]
 
[[Datei:Pipeline.png]]
 +
 +
===Siehe auch===
 +
* Shadersammlung: [[GLSL_Partikel_2|GPU-Partikelsystem]]
 +
* [http://www.opengl.org/registry/ OpenGL Spezifikation]
 +
* Extension [[GL_EXT_transform_feedback]] ([http://www.opengl.org/registry/specs/EXT/transform_feedback.txt Original-Spezifikation])
 +
* Extension [[GL_NV_transform_feedback]] ([http://www.opengl.org/registry/specs/NV/transform_feedback.txt Original-Spezifikation])
 +
* Extension [[GL_NV_transform_feedback2]] ([http://www.opengl.org/registry/specs/NV/transform_feedback2.txt Original-Spezifikation])

Aktuelle Version vom 10. Januar 2010, 14:44 Uhr

GPU-Partikelsystem auf Basis von Geometryshader und Transform-Feedback.
Transform-Feedback befindet sich in der Render-Pipeline direkt nach dem Vertexshader bzw. Geometryshader. Diese Funktion ermöglicht es einzelne oder auch alle Output-Variablen (varying) aus dem Shader auszulesen und in ein (oder mehrere) Buffer-Objekte zu schreiben. Buffer-Objekte sind einfach nur Speicherbereiche die sich flexibel als Texturbuffer, als Vertexbuffer oder auch Elementbuffer interpretieren lassen. Immer so wie man es gerade braucht.

Transform-Feedback ist ein Feature von ShaderModel 4.0 und somit auf älteren Grafikkarten nicht verfügbar. In der DirectX-Welt ist Transform-Feedback unter der Bezeichnung Stream-Out bekannt. Mit OpenGL 3.0 wurde Transform-Feedback in den OpenGL-Kern aufgenommen. In älteren Versionen von OpenGL ist Transform-Feedback in verschiedenen Varianten als Extension verfügbar:

Alle Varianten funktionieren leicht unterschiedlich daher wird hier auf eine detaillierte Vorstellung verzichtet. Allerdings macht das GPU-Partikelsystem exzessiven Gebrauch von Transform-Feedback und eignet sich somit als Beispiel. Weitere Anwendungsbeispiele finden sich im Shader-Artikel.

Abgrenzung zu Framebuffer-Objekten

Transform-Feedback stellt eine flexiblere Alternative zu Framebuffer-Objekten dar. Insbesondere kann man beispielsweise gleichzeitig 32bit Float-Vektoren und Integer schreiben, was mit einem Framebuffer bisher nicht möglich ist. Ein weiterer Vorteil ist, dass man die Render-Pipeline direkt nach dem Transform-Feedback-Schritt (also noch vor dem Cliping) auf Wunsch auch komplett abschalten kann. Insbesondere der Fragmentshader wird dann gar nicht erst ausgeführt und auch nichts in den Framebuffer geschrieben.

Render-Pipeline

Das folgende Bild zeigt die Render-Pipeline einer Grafikkarte mit ShaderModel 4.0.

Pipeline.png

Siehe auch