HLSL Problem beim umstellen von PS2_0 -> 3_0

MPi

Cadet 2nd Year
Registriert
Mai 2011
Beiträge
23
Hallo zusammen.

ich habe ein Problem bei der Umstellung von PS_2_0/a auf PS_3_0 mit meinen Postprocessing Pixelshadern und komme einfach nicht dahinter warum es mit PS_3_0 nicht funktioniert.
(Meine Hardware hat defintiv PS_3_0, da ich zum rendern der Geometrie .fx files verwende. Für das Postprocessing schien mir das aber ein bischen "too much")

Vielleicht hat hier jemand eine Idee... vielleicht sehe ich auch einfach den Wald vor lauter Bäumen nicht mehr :)

Kreieren des Shaders:
hr = D3DXCompileShaderFromFile( buffer, NULL, NULL, "main", "ps_2_a",dwShaderFlags, &pCode,&pBufferErrors, &g_pConstantTablePS );
//mit "ps_3_0" wird das Quad gar nicht mehr gerendert, ich sehe nur noch die Hintergrundfarbe vom d3ddevice->Clear

if( FAILED(hr) ) { hier kommt er nicht an }

g_pd3dDevice->CreatePixelShader( (DWORD*)pCode->GetBufferPointer(),&g_pPixelShader);

Der Aufruf zum Rendern:
g_pd3dDevice->SetVertexShader(NULL);
g_pd3dDevice->SetPixelShader(g_pPixelShader);
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
g_pd3dDevice->SetPixelShader(NULL);

Der Pixelshader: (ein "identity" shader zum testen)
sampler2D input: register(s0);

float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 Color;

Color = tex2D(input, uv.xy);

return Color;
}

Danke Euch!
 
Ich bin zwar nicht mit DX vertraut, aber es wäre denkbar, dass mit dem PixelShader 3 etwas hinzugefügt wurde, so dass du den Shader auch ergänzen musst.
 
Hallo Ice,

genau das befürchte ich auch, dass der Syntax nicht mehr der gleiche ist. Leider habe ich noch nirgends etwas gefunden, was mir erklären würde, was sich geändert hat.

Eventuell muss man ab ps_3_0 auch über eine .fx Datei gehen, was ich eigentlich gern vermeiden möchte.

Grüße

EDIT: Ich habe nun alles auf ".fx" Dateien umgebaut, insofern ists erledigt ^^
 
Zuletzt bearbeitet:
Ich habe es hinbekommen. Das Geheimnis ist, dass wenn man Vertizes transformieren will, muss man das in den Vertex Shadern machen, wenn man ps_3_0 verwenden will, nicht die Fixed-Function Pipeline. Wenn man Vertizes nicht transformieren muss, kann man auch vortransformierte Vertizes verwenden. Das ist schnell erledigt und man kann dann auch ps_3_0 Shader verwenden.
 
Zurück
Oben