Verständnisfrage bezüglich VertexShadern [HLSL DX9]

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Verständnisfrage bezüglich VertexShadern [HLSL DX9]

Beitrag von kimmi »

Folgende Situation: Ich bekomme Koordinatenänderungen alle 50 ms per Callback und visualisiere diese. Zur Zeit transferiere ich die Koordinatenänderung per VB->lock(), memcpy, VB->unlock auf die GPU. Dieses will ich nun aber lieber per VertexShader machen. Sehe ich das richtig, daß ich dafür die Parameter per SetFloat / SetVector / SetMatrix ( für ID3DXEffect )setzen muß? Oder habe ich etwas an dem ganzen Prozedere falsch verstanden? Oder kennt ihr einen besseren Weg, das zu implementieren? Ich benutze hierfür Direct3D9.

Danke schon mal im voraus.

Gruß Kimmi
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Verständnisfrage bezüglich VertexShadern [HLSL DX9]

Beitrag von Aramis »

Sehe ich das richtig, daß ich dafür die Parameter per SetFloat / SetVector / SetMatrix ( für ID3DXEffect )setzen muß?
Generell ja. Kosten aber auch, zu viele Parameteränderungen sollten es nicht sein. Auch wenn der VB-Lock natürlich von der Langsamheit her in einer ganz anderen Liga spielt :-)
Oder kennt ihr einen besseren Weg, das zu implementieren?
Falls du eine große Anzahl Parameter benötigst, so kannst du diese auch in eine Textur reinpacken und diese dynamisch neu uploaden. Texturzugriffe im Vertexshader sind zwar mit Vorsicht zu genießen und generell lahm, wenn du aber eine große Anzahl Parameter hast sind sie ununmgänglich und durchaus nützlich (z.B. für Echtzeitdisplacement als Reaktion auf Spieleraktionen oder auch für Wasseroberflächen). Immer noch billiger als der VB-Lock.

Alex
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Verständnisfrage bezüglich VertexShadern [HLSL DX9]

Beitrag von kimmi »

Ok, probiere mal, ob das performancetechnisch was bringt. Dank dir :)...

Gruß Kimmi
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Verständnisfrage bezüglich VertexShadern [HLSL DX9]

Beitrag von CodingCat »

Sind eigentlich Vertextexturzugriffe auf ATI Karten inzwischen prinzipiell möglich? Bei meinem letzten Testprogramm, das ich an einen Tester mit relativ aktueller ATI Karte (x1900xt) geschickt hatte, scheiterte das Validieren des Shaders am Texture-Lookup (tex2Dlod) - googeln ergab nur, dass ATI Karten damit generell Probleme hätten.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Verständnisfrage bezüglich VertexShadern [HLSL DX9]

Beitrag von Schrompf »

Offiziell können es die Karten ab der X1000er Serie. Allerdings nur dem Namen nach, weil das theoretisch Teil der SM3.0-Spezifikation ist. Praktisch geben die in den Caps exakt 0 mögliche Pixelformate für vertexlesbare Texturen an, es geht also nicht. Zuverlässig funktionieren müsste es ab den SM4.0-Karten, also ab der X3000er-Serie.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Antworten