[DirectX11] D3DX11CompileFromFile() pFunctionName = ? bei Effect - Kompilierung
-
Huhu,
Welcher Funktionsname wird erwartet, wenn man D3DX11CompileFromFile() verwendet, um einen Effect zu kompilieren?Ich will zuerst die Effect-datei mit dieser Funktion kompilieren und anschließend mit D3DX11CreateEffectFromMemory() den Effect erstellen. Was wird beim Parameter pFunctionName erwartet? Der name der verwendeten technique? Der Name des Vertex Shaders? Muss eine extra-Funktion angelegt werden?
Meine Effect-Datei sieht so aus:
matrix WorldMat; matrix ViewMat; matrix ProjMat; struct PS_INPUT { float4 Pos : SV_POSITION; float4 Color : COLOR0; }; PS_INPUT VS( float4 Pos : POSITION, float4 Color : COLOR ) { PS_INPUT psInput; psInput.Pos = mul(Pos, WorldMat); psInput.Pos = mul(psInput.Pos, ViewMat); psInput.Pos = mul(psInput.Pos, ProjMat); psInput.Color = Color; return psInput; } float4 PS( PS_INPUT psInput ) : SV_Target { return psInput.Color; } fxgroup g0 { technique11 Render { pass P0 { SetVertexShader(CompileShader(vs_5_0, VS())); SetGeometryShader(NULL); SetPixelShader(CompileShader(ps_5_0, PS())); } } }
Mein Programm ist eigentlich nichts besonderes, ich rendere ein Dreieck mit dem REFERENCE-Driver. Problem ist - ich krieg kein Dreieck angezeigt. Vor dem Verwenden einer Effect-Datei habe ich Vertex-, sowie Pixelshader getrennt kompiliert und im C++-Quellcode zugewiesen. Es hat wunderbar funktioniert.
Das Netz liefert mir leider nichts brauchbares
-
Probier mal NULL.
Vergiss nicht bei Profile "fx_5_0" anzugeben.Ansonsten Samples studieren!
-
NULL funktioniert leider auch nicht.
Die Samples, die bei der SDK mitgeliefert werden, verwenden keine effect-files, sondern Vertex- und Pixelshader-Dateien und übergeben solche Variablen wie die World/View/Projection-Matrix per Constant-Buffer.
Ich wollte mich aber dran wagen, das Effect11 Framework zu verwenden... Versuche nun herauszufinden, ob das einfach noch nicht funktioniert oder ich generell etwas falsch mache *seufz*
-
Das Problem war natürlich, wie es auch immer ist, an einer ganz anderen Stelle - ich hatte folgendes im C++-Code vergessen:
pD3DX11Technique->GetPassByIndex(0)->Apply(0,pD3D11ImmediateContext);
Die technique eigentlich anzuwenden.
Worüber man alles stolpern kann :X.