Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

08.10.2010, 16:51

Verständiss Frage zu LPD3D10INCLUDE

Hallo an alle,

da ich mir schon mehere Shader geschrieben habe, und manche Shader bestimmte Teile wie Lichtberechnungen und Globale Variablen wie die Weltmatrix immer gebraucht werden, und ich nicht alles in einer ".fx" Datei reinschreiben wollte, weil sonst irgentwann die Übersicht verloren geht. Hab ich nach Möglichkeiten gesucht, wie es mit meheren ".fx" Datein gehen könnte und hab auch LPD3D10INCLUDE in der DX Duko endeckt.
Muss ich den "#include Shader" vorher kompilieren, und dann die Daten bei den "Open Befehl" angeben, wenn ja für was steht der Parameter "LPCVOID pParentData". Ich wäre froh, wenn mir einer das vllt erklären könnte, der sich damit auskennt.
Vielen Dank im voraus
Mfg Male

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

08.10.2010, 23:18

ID3D10Include ist ein Interface. Der Shadercompiler verwendet dieses Interface um #include zu implementieren. Wenn du also in deinen Shadern #include verwenden willst dann musst du dieses Interface entsprechend implementieren und einen Pointer auf ein solches Objekt an D3DCompile übergeben. Näheres dazu hier.

3

10.10.2010, 19:28

Das hab ich auch schon in der Duko gefunden. Nur mein Problem ist das ich nicht weiß wie ich es anwenden soll.
Also z.B. so

C-/C++-Quelltext

1
2
3
4
5
6
7
 ID3D10Blub* pContainer = NULL;
 // Shader kompilieren und auf Fehler prüfen

ID3D10Include* pShaderInclude = NULL
UINT Size = 0;

pShaderInclude->Open(D3D10_INCLUDE_LOCAL, "ShaderOrt.fx", pContainer->GetBufferPointer(), NULL, &Size);


Ich weiß jetzt nicht so genau für was der 3. und 4. Parameter stehen. Also wie ich sie benutzen soll, hab auch nichts in der Duko gefunden, was mir weiterhilft. Oder ob es überhaupt so richtig ist, wie ich es da benutze. :(

Mfg Male

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

10.10.2010, 21:26

Wie soll das funktionieren, pShaderInclude zeigt auf 0!? Nochmal: Du musst das Interface ID3D10Include implementieren, d.h. eine Klasse machen die das Interface mit den entsprechenden Methoden implementiert und dann einen Pointer auf ein solches Objekt an D3DCompile übergeben. D3DCompile verwendet dann deine Methoden dieser Klasse im Sinne eines Callback um an den Inhalt eines #include zu kommen.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (10.10.2010, 21:32)


5

13.10.2010, 12:57

Ah ok, jetzt leuchtet es mir mehr ein ^^ Also ich müsste eine Klasse ala

C-/C++-Quelltext

1
2
3
4
5
6
7
class CShaderInclude
{
public:
    CShaderInclude();
    HRESULT Open(D3D10_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes);
    HRESULT Close(LPCVOID pData);
};


schreiben und dann so ein Objekt an den Shader Compiler übergeben? Und natürlich die Funktionen Open und Close dementsprechend implementieren.

Mfg Male

Werbeanzeige