Vollbildeffekte und Vertexshader

Posted By: Slin

Vollbildeffekte und Vertexshader - 07/06/11 08:36

Bei Vollbildeffekten ist es ja meistens üblich, dass man einen Quad mit einem entsprechendem Pixelshader rendert und von einer Textur mit der zuvor dort hinein gerenderten Szene sampled.
In manchen seltenen Fällen bietet es sich an auch einen Vertexshader zu verwenden der nützliche Werte berechnet, die dann ja auch interpoliert werden (im Pixelshader berechnete Texturekoordinaten sind zum Beispiel nicht ideal und es gibt sicher noch bessere Beispiele).

Was ich jetzt gern wissen möchte, ist, wie Vollbildeffekte gerendert werden und wenn mit einem ganz normalen Vollbildquad, wie die Vertices transformiert werden und wie ich einen eigenen Vertexshader dazu nutzen kann (denn wenn ich in meiner FX Datei einen Vertexshader angebe wird dieser einfach ignoriert!?).
Ein Problem ist nämlich auch die Fixed Function Pipeline für Vertices oder Pixel mit einem Shadermodel 3 Shader zu mischen. AMD Grafikkarten kommen damit nicht zurecht. NVIDIA Karten sind dagegen etwas toleranter.

Danke.
Posted By: jcl

Re: Vollbildeffekte und Vertexshader - 07/07/11 08:39

Die 2D-Effekte werden mit DrawPrimitiveUP(D3DPT_TRIANGLESTRIP...) gerendert. Da die Vertices untransformiert sind, kann man einen Vertex-Shader hier meines Wissens nicht verwenden, nur einen Pixelshader.
Posted By: Slin

Re: Vollbildeffekte und Vertexshader - 07/16/11 20:42

Originally Posted By: MSDN DrawPrimitiveUP

When converting a legacy application to Direct3D 9, you must add a call to either IDirect3DDevice9::SetFVF to use the fixed function pipeline, or IDirect3DDevice9::SetVertexDeclaration to use a vertex shader before you make any Draw calls.

Hier geht es zwar grad nur um das Vertexformat, das aber abhängig davon ob Vertexshader oder Fixed Function Pipeline genutzt werden soll unterschiedlich gesetzt wird, was ich so verstehe, dass entweder mit ffp oder vs gerendert werden muss, aber nicht ohne. Ob die Vertices die gerendert werden noch transformiert werden müssen oder nicht ist ja ziemlich egal, das kann ich im Shader beliebig machen.
Weshalb wird hier eigentlich mit DrawPrimitiveUP gerendert? Das scheint ja eher ein Überbleibsel aus DX8 zu sein. Und gerade bei tendenziell eher statischen Dingen wie 2D Elementen bieten sich doch Vertexbuffer an, oder nicht (oder auch dynamische Vertexbuffer)?
Ich habe leider keine AMD Karte um die Probleme die Shadermodel 3 Postprocessing Effekte machen genauer zu Recherchieren, aber meine Vermutung ist das Mischen von FFP und PS3.0, was auf NVIDIA Karten kein Problem ist, auf AMD Karten aber schon. Auf AMD Karten funktioniert lediglich VS3.0 und PS3.0, VS2.0 und PS3.0 und ähnliches dagegen nicht.
Posted By: jcl

Re: Vollbildeffekte und Vertexshader - 07/18/11 09:03

Ich weiss zwar von den Gerüchten, dass FFP, VS2.0, und PS3.0 auf AMD Karten gemischt nicht funktionieren sollen. Wir konnten dies aber in der Praxis bisher nicht bestätigen.

DrawPrimitiveUP ist in der Tat ein Überbleibsel, bei 4 Vertices macht es aber keinerlei Unterschied für die Geschwindigkeit, ob Sie einen Vertexbuffer verwenden oder nicht.
Posted By: Slin

Re: Vollbildeffekte und Vertexshader - 07/18/11 09:14

Nunja, ich selbst hatte solche Probleme bereits, Hummel kann das Problem auch bestätigen, hier bei meiner Arbeit ist das Problem auch bekannt und ich bin mir sicher dass es viele andere auch bestätigen können dass es sich nicht nur um ein Gerücht handelt.

Danke übrigens für die Änderungen an render_target laugh.
© 2024 lite-C Forums