PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit PixelShader unter DirectX


pajofego
2004-05-16, 22:19:36
Hallo miteinander,

ich habe da folgendes Problem:

Ich erstelle unter DirectX vier Texturen, vier RenderSurfaces und vier Shaderdateien, die ich mit fxc.exe incl. Debuginformationen compiliere.
Die ersten drei Shaders werden aufgerufen beim vierten passiert gar nichts, d.h. der vierte wird nicht aufgerufen. Dabei habe ich für alle
vier den gleichen Code benutzt(InitTextures1, InitTextures2 usw. sowie für Render1, Render2 ) wie unten: Gibt es irgendeine Besonderheit
bei der Verwendung von D3DXCreateRenderToSurface? Kann man da nicht beliebig viele davon erstellen und beliebig viele Shaders darauf an-
wenden? Ich hoffe ich konnte mein Problem einigermaßen vernünftig darstellen. Danke für eure Mühe.

Gruss pajofego


VOID InitTextures1()
{
g_pd3dDevice->CreateTexture(128, 128, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A32B32G32R32F, D3DPOOL_DEFAULT, &g_pTexture1, NULL);
g_pTexture1->GetSurfaceLevel(0, &g_pTextureSurface1);

D3DSURFACE_DESC desc;
g_pTextureSurface1->GetDesc( &desc );
D3DXCreateRenderToSurface( g_pd3dDevice, desc.Width, desc.Height, desc.Format, TRUE, D3DFMT_D24S8, &g_pRenderSurface1);
}


VOID Render1()
{
UINT cPasses;
D3DXVECTOR4 fVector4 = D3DXVECTOR4(1.2f, 0.0f, 0.0f, 0.0f);

g_pRenderSurface1->BeginScene(g_pTextureSurface1, NULL);
g_pShader1->SetTechnique("tMakeShader1");
g_pShader1->SetVector("Value1", &fVector4);
g_pShader1->Begin(&cPasses, 0);
g_pShader1->Pass(0);
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 0, 2);
g_pShader1->End();
g_pRenderSurface1->EndScene(0);
}

Demirug
2004-05-17, 08:51:28
Gibt die Debug-Runtime irgendwelche Fehlermeldungen aus?

pajofego
2004-05-17, 11:18:43
Leider nicht wirklich,

scheint alles o.k. zu sein: Nur, dass PixelShader nr. 4 mit MakeShader4 nicht ausgeführt wird, obwohl s. unten angeblich geladen wurde.

'Direct3D REF Device 1': Attached to debug monitor.
'Direct3D REF-owned HAL (SWVP) Device 1': Attached to debug monitor.
'Direct3D REF Device 1': Loaded pixel shader 'MakeShader1'
'Direct3D REF Device 1': Loaded pixel shader 'MakeShader2'
'Direct3D REF Device 1': Loaded pixel shader 'MakeShader3'
'Direct3D REF Device 1': Loaded pixel shader 'MakeShader4'

Demirug
2004-05-17, 17:36:46
Die Ausgabe ist auf Maximum nehme ich an?

Liegt es vielleicht an deinem Shadercode selbst? Kopier doch einfach mal den Code von einem der 3 Shader die funktionieren in den vierten.

pajofego
2004-05-17, 18:57:33
Ich denke den Fehler gefunden zu haben, wg. sovieler Aufrufen für den Shader habe ich bei Nr. 4

g_pShader4->Pass(0);

vergessen. Man wird irgendwann Betriebsblind, da sieht man sowas nicht mehr. Aber fetten Dank, für die Hilfe. Hoffe dass mir nicht noch einmal so etwas dummes passiert!

Gruss pajofego