DX10/11 Renderpipline nur mit Shadern?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Hellhound
Beiträge: 53
Registriert: 23.08.2010, 10:00
Wohnort: Braunschweig
Kontaktdaten:

DX10/11 Renderpipline nur mit Shadern?

Beitrag von Hellhound »

Hallo zusammen,

ich als OpenGL'ler arbeite mich grad in der DX10/11 Programmierung ein. Etwas verwirrt mich aktuell ein bissl. Ist es korrekt, dass ich in DX10/11 die Renderpipeline immer nur mit Shadern definieren kann auch wenn ich eigentlich keine Shader benötige? Falls ja, macht das überhaupt sinn? Oder kann DX gar nicht mehr ohne Shader? Beschäftige mich grad mit der InputLayout Anbindung um mein VertexDescription bekannt zu machen und wunder mich, dass sämtliche Tutorials immer mit Shadern agieren ...

Gruß
Christian
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: DX10/11 Renderpipline nur mit Shadern?

Beitrag von Krishty »

Ja, ab D3D10 gibt es nur noch HLSL-Shader. Und du brauchst immer Shader (schließlich war auch die Fixed-Function-Pipeline unter D3D bis Version 7 nichts anderes als in Hardware gegossene Shader, die per State-System abgestimmt wurden – schon seit D3D8 läuft alles über Shader, die dir im Zweifelsfall unter der API-Haube on-the-fly aus deinen Render-States zusammenkompiliert wurden, falls du keine eigenen gesetzt hattest). Falls du das FFP-Verhalten emulieren möchtest, gibt es im SDK ein entsprechendes Sample.

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Hellhound
Beiträge: 53
Registriert: 23.08.2010, 10:00
Wohnort: Braunschweig
Kontaktdaten:

Re: DX10/11 Renderpipline nur mit Shadern?

Beitrag von Hellhound »

Ah, ok das erklärt einiges. Gut dann ist ja alles klar ;)
Benutzeravatar
Hellhound
Beiträge: 53
Registriert: 23.08.2010, 10:00
Wohnort: Braunschweig
Kontaktdaten:

Re: DX10/11 Renderpipline nur mit Shadern?

Beitrag von Hellhound »

Ok hab jetzt alles hin bekommen und bekomme sowohl DX9, DX10 und DX11 mit primitiven HLSL Shadern zum Laufen.
Soweit so gut. Nun stelle ich mir jedoch die Frage ob die Cg-Shader Sprache in diesem Zusammenhang noch Sinn macht...

Wenn ich alles richtig verstanden habe, komme ich um HLSL Shader in DX10 und 11 nicht mehr drum rum, da ich allein schon für
die VertexBuffer Basis HLSL Shader benötige. Also mal wieder nen perfekter Microsoft Ansatz um sein Ding durchzudrücken. Laut
Cg wird ja Cg auch noch für Dx10 unterstützt.

Würde Cg ja schon allein aus dem Grund bevorzugen, da es im Cross-Compile auch mit OpenGL nutzbar ist. Nur wie würde ich das
in DX10/11 umsetzen? Für die Basis nen "Default HLSL" Shader definieren und dann Cg nutzen? Finde leider in Netz keine wirklichen
Sourcen hierzu...

Hat jemand damit Erfahrung? Falls ja, wie setzt Ihr das ein?
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: DX10/11 Renderpipline nur mit Shadern?

Beitrag von Krishty »

CG bietet doch cgD3D11LoadProgram(), cgD3D11BindProgram() etc an … die Doku sagt, dass du damit unter D3D10/11 Vertex- und Pixel-Shader kompilieren und setzen kannst. Ob auch Geo-, Hull-, Domain- und Compute-Shader funktionieren, weiß ich nicht; habe es nie benutzt.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Hellhound
Beiträge: 53
Registriert: 23.08.2010, 10:00
Wohnort: Braunschweig
Kontaktdaten:

Re: DX10/11 Renderpipline nur mit Shadern?

Beitrag von Hellhound »

Ok, soweit war ich noch nicht in der Doku zu 2.0 vorgedrungen. Aber laut Doku bekomme ich so nicht den Zugriff
auf das Interface handle.

Code: Alles auswählen

The D3D shader handle is not returned. If the shader handle is desired by the application, the expanded interface should not be used for that program. 
Dann stellt sich mir die Frage, wie ich das VertexBuffer binding mache, wenn ich ab DX10/11 für das InputLayout dieses handle beötige um den Buffer instanziieren zu können.

Ok, hat sich geklärt, hab grad gesehen, dass ich and den Blob komme...

Code: Alles auswählen

cgD3D11GetCompiledProgram
Danke für die Info, denke damit sollte es klappen ;)
Antworten