Expandable
2008-06-18, 16:47:30
*lol* Da suche ich nun seit zwei Stunden, poste hier, und komme keine fünf Minuten danach auf die Lösung. Lag an einem falschen minZ-Wert des Viewports. Thread kann gelöscht werden. Sorry.
Hallo allerseits,
ich mache gerade meine ersten Gehversuche mit DX10 und bin gerade schier am verzweifeln. Eigentlich will ich nur ein Dreieck auf dem Bildschirm darstellen, aber das funktioniert einfach nicht.
Das komische ist: Das Dreieck kommt korrekt aus dem Vertexshader raus und liegt innerhalb des Viewports:
http://img237.imageshack.us/img237/8770/vsqk0.th.gif (http://img237.imageshack.us/my.php?image=vsqk0.gif)
Es müsste also in der Mitte des Bildes liegen. Dort ist aber nichts - dort ist alles weiß. Debugge ich einen Pixel in der Mitte des Bildes, wo eigentlich ja ein Pixel des Dreiecks sein sollte, sieht man auch, dass der Pixel Shader scheinbar gar nicht läuft:
http://img237.imageshack.us/img237/350/psto2.th.gif (http://img237.imageshack.us/my.php?image=psto2.gif)
Das Rendertarget/der Framebuffer muss aber korrekt sein, weil die Clearcolor korrekt gesetzt wird - auch, wenn ich in jedem Frame eine andere Clearcolor wähle, wird diese immer korrekt angezeigt. Wieso werden die Pixel nicht gerendert? Ich habe keinerlei Blend oder sonst was States gesetzt, ist alles auf Default. Außerdem habe ich im Effect auch noch folgendes ausprobiert, ohne Erfolg:
//
// Vertex Shader
//
float4 VS( float4 Pos : POSITION ) : SV_POSITION
{
return Pos;
}
//
// Pixel Shader
//
float4 PS( float4 Pos : SV_POSITION ) : SV_Target
{
return float4( 1.0f, 0.0f, 0.0f, 1.0f );
}
DepthStencilState DisableDepth
{
DepthEnable = FALSE;
DepthWriteMask = ZERO;
};
BlendState NoBlending
{
AlphaToCoverageEnable = FALSE;
BlendEnable[0] = FALSE;
RenderTargetWriteMask[0] = 0x0F;
};
technique10 Render
{
pass P0
{
SetVertexShader( CompileShader( vs_4_0, VS() ) );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_4_0, PS() ) );
SetBlendState( NoBlending, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
SetDepthStencilState( DisableDepth, 0 );
}
}
Hat irgendjemand eine gute Idee?
Nachtrag: Natürlich überprüfe ich die Rückgabewerte aller Funktionen - es gibt keine Fehler. Auch sehe ich in meinem Code keinen großen unterschied zu Tutorial 03, was allerdings problemlos funktioniert. Ich versteh's nicht...
Danke!
Hallo allerseits,
ich mache gerade meine ersten Gehversuche mit DX10 und bin gerade schier am verzweifeln. Eigentlich will ich nur ein Dreieck auf dem Bildschirm darstellen, aber das funktioniert einfach nicht.
Das komische ist: Das Dreieck kommt korrekt aus dem Vertexshader raus und liegt innerhalb des Viewports:
http://img237.imageshack.us/img237/8770/vsqk0.th.gif (http://img237.imageshack.us/my.php?image=vsqk0.gif)
Es müsste also in der Mitte des Bildes liegen. Dort ist aber nichts - dort ist alles weiß. Debugge ich einen Pixel in der Mitte des Bildes, wo eigentlich ja ein Pixel des Dreiecks sein sollte, sieht man auch, dass der Pixel Shader scheinbar gar nicht läuft:
http://img237.imageshack.us/img237/350/psto2.th.gif (http://img237.imageshack.us/my.php?image=psto2.gif)
Das Rendertarget/der Framebuffer muss aber korrekt sein, weil die Clearcolor korrekt gesetzt wird - auch, wenn ich in jedem Frame eine andere Clearcolor wähle, wird diese immer korrekt angezeigt. Wieso werden die Pixel nicht gerendert? Ich habe keinerlei Blend oder sonst was States gesetzt, ist alles auf Default. Außerdem habe ich im Effect auch noch folgendes ausprobiert, ohne Erfolg:
//
// Vertex Shader
//
float4 VS( float4 Pos : POSITION ) : SV_POSITION
{
return Pos;
}
//
// Pixel Shader
//
float4 PS( float4 Pos : SV_POSITION ) : SV_Target
{
return float4( 1.0f, 0.0f, 0.0f, 1.0f );
}
DepthStencilState DisableDepth
{
DepthEnable = FALSE;
DepthWriteMask = ZERO;
};
BlendState NoBlending
{
AlphaToCoverageEnable = FALSE;
BlendEnable[0] = FALSE;
RenderTargetWriteMask[0] = 0x0F;
};
technique10 Render
{
pass P0
{
SetVertexShader( CompileShader( vs_4_0, VS() ) );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_4_0, PS() ) );
SetBlendState( NoBlending, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
SetDepthStencilState( DisableDepth, 0 );
}
}
Hat irgendjemand eine gute Idee?
Nachtrag: Natürlich überprüfe ich die Rückgabewerte aller Funktionen - es gibt keine Fehler. Auch sehe ich in meinem Code keinen großen unterschied zu Tutorial 03, was allerdings problemlos funktioniert. Ich versteh's nicht...
Danke!