PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DX10 Problem


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!

Coda
2008-06-18, 22:42:17
Kannst du uns vielleicht mal das Projekt zur Verfügung stellen? So direkt sehe ich jetzt spontan auch keinen Fehler.

Das ist eh immer das schlimmste wenn gar nichts angezeigt wird. Ich kenne das.

Expandable
2008-06-19, 07:13:47
Hab's inzwischen rausgefunden - lag an einem falschen MinZ-Wert des Viewports :rolleyes: Trotzdem danke!

Andere Frage: Ich würde gerne einen Editor schreiben, der mehrere Ansichten der selben Szene hat. Geht das mit mehreren Swapchains?

Fragen über Fragen. Und irgendwie erscheint mir das überraschend schlecht dokumentiert. Oder habe ich da was übersehen?

Danke!

Nachtrag: Ja, geht einwandfrei mit mehreren Swapchains. Hat sich also erledigt.

PS: Kommt mir das nur so vor, oder stellt sich D3D in diesen Bereichen umständlicher an als OpenGL? Gerade auch was das Resizen des Backbuffers betrifft.