[DX10] Konzept zur Verwaltung von HLSL Shader

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

[DX10] Konzept zur Verwaltung von HLSL Shader

Beitrag von exploid »

...
Zuletzt geändert von exploid am 04.11.2010, 13:48, insgesamt 1-mal geändert.
All your base are belong to us! Justice
Stefan Zerbst
Moderator
Beiträge: 189
Registriert: 25.02.2009, 19:54

Re: [DX10] Konzept zur Verwaltung von HLSL Shader

Beitrag von Stefan Zerbst »

Hi,

ohne zu tief ins Detail zu gehen ein paar schlaue Gegenfragen:

Warum muss das RenderDevice Effekte verwalten bzw. den Zugriff darauf ermöglichen? Es muss Objekte geben die Effekte verwenden und die entsprechenden Effekt-Instanzen deklarieren und speichern.

Ist der Zugriff auf die Effekte auch von außerhalb möglich? Dann sollte man nicht direkt D3D10 Interfaces verwenden, sondern noch durch eigene Interfaces abstrahieren.

Ciao,
Stefan
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [DX10] Konzept zur Verwaltung von HLSL Shader

Beitrag von Schrompf »

Zieh das raus in eine eigene Klasse. Also eine, die die Shader verwaltet, und eine pro Shader. Etwa so:

Code: Alles auswählen

class ShaderManager
{
  HLSLEffect* CreateEffect( const std::string& pFile); // gibt Zeiger zurück, wirft Exception bei Fehlschlag
};

class HLSLEffect
{
  size_t mNumTechniques;
  std::vector<HLSLTechnique*> mTechniques;
  ID3D10Effect* mD3DEffect;

  // Getter dafür
  // Konstruktor privat für ShaderManager
};

class HLSLTechnique
{
  ID3D10EffectTechnique* mTechnique;
  std::vector<Variable> mVariables;
};
Typnamen selbsttätig anpassen. Nebenbei: das typedef vor Strukturen und enums kannst Du Dir sparen. Das war zu C-Zeiten nötig, in C++ ist es nutzlos.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: [DX10] Konzept zur Verwaltung von HLSL Shader

Beitrag von exploid »

...
Zuletzt geändert von exploid am 04.11.2010, 13:49, insgesamt 1-mal geändert.
All your base are belong to us! Justice
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: [DX10] Konzept zur Verwaltung von HLSL Shader

Beitrag von exploid »

...
Zuletzt geändert von exploid am 04.11.2010, 13:49, insgesamt 1-mal geändert.
All your base are belong to us! Justice
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: [DX10] Konzept zur Verwaltung von HLSL Shader

Beitrag von Aramis »

Vielleicht solltest du mal einen Blick auf UML werfen - auch so eine Technik über deren Nutzen man sich streiten kann, aber sie ist für Außenstehende deutlich einfacher zugänglich als Header und Paint-Bildchen.
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: [DX10] Konzept zur Verwaltung von HLSL Shader

Beitrag von kimmi »

Hier findest du eine OpenSource-Lösung zum Erstellen von UML:
https://sourceforge.net/projects/staruml/
Das hat den Vorteil, daß zumindest alle wissen, was die Pfeile bedeuten sollen und so.

Gruß Kimmi
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: [DX10] Konzept zur Verwaltung von HLSL Shader

Beitrag von exploid »

...
Zuletzt geändert von exploid am 04.11.2010, 13:49, insgesamt 1-mal geändert.
All your base are belong to us! Justice
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: [DX10] Konzept zur Verwaltung von HLSL Shader

Beitrag von exploid »

...
Zuletzt geändert von exploid am 04.11.2010, 13:50, insgesamt 1-mal geändert.
All your base are belong to us! Justice
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [DX10] Konzept zur Verwaltung von HLSL Shader

Beitrag von Schrompf »

So richtig bekommst Du meiner Meinung nach nicht die Füße auf den Boden. Zum Einen sind das logische Details: die Geometrieverwaltung muss *sofort* alle neuen Vertexdaten hochladen - kann ja sein, dass jemand das Modell zeichnen will, bevor Du genug Modelle zusammenhast, um den Buffer vollzumachen und hochzuladen. Nebenbei bemerkt musst Du in dieser Version auch nach Vertexstruktur unterscheiden, sonst funktioniert Dein Vertex-zählen nicht mehr. Muss es ja aber auch nicht - die weiche Grenze von 65k Vertizes stammt vom 16Bit-Indexbuffer - dem VertexBuffer ist es nahezu wurscht, wie groß er ist.

Zum Anderen scheint mir immernoch keine Klarheit in Deiner Applikation zu sein. Warum redet die App mit der D3D.dll? Die sollte doch eigentlich eher mit dem Model Manager reden. Du wirst gelegentlich auch Modelle getrennt von Materialien entscheiden wollen - diese Option solltest Du Dir auch offenhalten. Dann wirst Du eine Art Parameterstruktur brauchen - Shader können Parameter deklarieren können, Materialien müssen Werte an Shader-Parameter übergeben können. Das kannst Du erstmal auf später verschieben, aber früher oder später wird sowas nötig sein. Eine Möglichkeit, frame-aktuell Parameter für einzelne Model-Instanzen zu ändern, wird auch nötig werden. Das fehlt uns aktuell noch, und es verhindert unter anderem so banale Sachen wie "lass das Objekt pulsierend aufleuchten, wenn der Spieler es im Fokus hat".

Außerdem kann ich aus guter Erfahrung empfehlen, einen Pass in eine Klasse zu verpacken. Man geht zur Engine und sagt "fang einen neuen Zeichenprozess an, die Parameter, der Kontext, das Renderziel". Daraufhin bekommt man von der Engine eine Zeichenprozess-Instanz zurück, der man dann alle DrawCalls in die Hand drückt. Das hat außerdem den Vorteil, dass Du jedem Renderpass einen Kontext geben kannst - sowas wie "Du bist ein Schattendurchgang für Parallellicht-Shadowmaps, nimm mal die ShadowMap-Shader anstatt der normalen" oder auch "ich render jetzt Spiegelungen, erspar Dir den PräZ-Pass und das Reliefmapping". Sehr nützlich, sowas... hab jedenfalls ich bemerkt.

Ich hoffe, das gibt Dir ein paar Inspirationen... ich will Dich damit nämlich nicht aufhalten! Meine Empfehlung lautet eher gegensätzlich: fang an zu coden. Und Du wirst ganz automatisch feststellen, wo es hängt.

Ach, und nochwas: konzentriere Dich auf eine Shader-Sprache. Du wirst schon genug Ärger damit haben, alle notwendigen Permutationen für einen Effekt zu schreiben. Davon dann auch noch x Varianten für HLSL, GLSlang und Asm zu warten ist reine Idiotie.

Bye, Thomas
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
exploid
Establishment
Beiträge: 146
Registriert: 21.08.2005, 18:33

Re: [DX10] Konzept zur Verwaltung von HLSL Shader

Beitrag von exploid »

...
All your base are belong to us! Justice
Antworten