ich sitze nun fast 6 std lang an meinem Problem fest und es treibt mich in den Wahnsinn so langsam ^^
Mein Problem bezieht sich auf Multiple Render Targets.Ich lasse ein Fullscreen-Quad rendern und dabei habe ich 3 Rendertargets "an".Nachdem das Quad geredent ist , entbinde ich die Rendertargets und lasse nochmal ein Fullscreen-Quad rendern , wobei ich das erste Rendertarget als Texture binde.Wenn ich nur 1 Rendertarget benutze , läuft alles super , schalte ich aber ein weiteres dazu oder wie hier im Bsp. 3 , ist der Inhalt aller Rendertargets schwarz.Ich benutze dazu DirectX9 und Vista.Meine GFX-Karte(Geforce 8600) habe ich positiv auf die Möglichkeit MRT´s zu benutzen getestet und PIX war mir leider auch keine Hilfe.
Code: Alles auswählen
//Hier mein Code wo die 3 Targets gebunden werden
// Parameter = Stage
m_pTexture1->bindTextureAsRenderTarget(0);
m_pTexture2->bindTextureAsRenderTarget(1);
m_pTexture3->bindTextureAsRenderTarget(2);
m_pFXFile->bindTechnique("ClearScreen");
m_pFXFile->bindPass(0);
//true = Löche den Bildschierm
pRenderer->begin3DScene(true);
{
//Hierbei handelt es sich um das Fullscreen-Quad
m_pQuad->drawQuad();
}
//true = Zeige die Scene mit Present an
pRenderer->end3DScene(true);
m_pFXFile->unbindAll();
m_pTexture1->deactivateTextureAsRenderTarget();
m_pTexture2->deactivateTextureAsRenderTarget();
m_pTexture3->deactivateTextureAsRenderTarget();
//Hier die Methode bindTextureAsRenderTarget im Detail
bindTextureAsRenderTarget(unsigned int uiIndex)
{
if(m_bRenderTarget)
{
m_uiIndex = uiIndex;
if(NULL == m_lpDepthBuffer|| NULL == m_lpBackBuffer)
return;
if( 0 == uiIndex )
{
if(FAILED(m_lpDevice->SetDepthStencilSurface(m_lpDepthBuffer)))
return;
m_lpDevice->GetViewport(&m_OldViewPort);
m_lpDevice->SetViewport(&m_ViewPort);
}
if(FAILED(m_lpDevice->SetRenderTarget(uiIndex,m_lpBackBuffer)))
return;
}
//Und zur sicherheit hier mein Shader
float4x4 g_matWorldViewProj;
texture Texture0;
sampler2D SamplerTexture0 = sampler_state
{
Texture = (Texture0);
};
struct PS_OUTC123
{
float4 Col0 : COLOR0;
float4 Col1 : COLOR1;
float4 Col2 : COLOR2;
};
struct VS_OUTP0
{
float4 Pos : POSITION0;
};
VS_OUTP0 VS_SimpleTransform(
float4 inPos : POSITION0)
{
VS_OUTP0 Out;
Out.Pos = mul(inPos,g_matWorldViewProj);
return Out;
}
PS_OUTC123 PS_ClearScene(VS_OUTP0 In)
{
PS_OUTC123 Out = (PS_OUTC123)0;
Out.Col0 = float4(1,0,0,0);
Out.Col1 = float4(0.5f,0.5f,0.5f,1);
Out.Col2 = float4(0,0,1,0);
return Out;
}
technique ClearScreen
{
pass P0
{
VertexShader = compile vs_2_0 VS_SimpleTransform();
PixelShader = compile ps_2_0 PS_ClearScene();
}
}
Bye bye