[DirectX9 ID3DXFont::DrawText] Text wird nicht dauerhaft angezeigt

_Grubi

Erfahrenes Mitglied
Hallo,

ich habe ein merkwürdiges Problem, welches ich leider nicht akzeptabel gelöst bekomme.
Ich zeichne mittels Directx9 und ID3DXFont::DrawText eine Text auf den Bildschirm. Dieser wird dann für 1-2 Sekunden angezeigt und verschwindet wieder. Nach weiteren 2-3 Sekunden wird er wieder angezeigt und das Spiel geht von vorne los.

Ich schaffe es den Text dauerhaft anzuzeigen, wenn ich meinen Render()-Aufruf von der Message-Loop in WM_PAINT packe und dort ein ValidateRect() ausführe. Allerdings geht dann die CPU Last auf 100%.

Hat jemand eine Idee, woran das liegen kann?

Mein Render() sieht so aus:
C++:
	if( NULL == m_pDirect3D_Device )
    	return;

	// Clear the backbuffer to a blue color
	m_pDirect3D_Device->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), -1.0f, 0 );
    
	// Begin the scene
	m_pDirect3D_Device->BeginScene();

	// DO THE RENDERING
	
	D3DCOLOR fontColor = D3DCOLOR_ARGB(255,255,0,0);   
	RECT rct;
	SetRect(&rct,0,0,m_windowWidth,m_windowHeight);

	m_textFont->DrawText(NULL, L"Hello World", -1, &rct, DT_LEFT | DT_NOCLIP, fontColor );
	
	// /DO THE RENDERING
	
	// End the scene
	m_pDirect3D_Device->EndScene();
    
	// Present the backbuffer contents to the display
	m_pDirect3D_Device->Present( NULL, NULL, NULL, NULL );

Danke und Gruß,
_Grubi
 
Die CPU-Last liegt am dauernden Neuzeichnen. Mit einem _sleep() könnte man das Problem lösen. Wenn du den gesamten Code (mit der main() ) postest, könnte ich dir vielleicht mehr sagen.

Gruss
cwriter
 
Vom ursprünglichen Code ist mittlerweile leider recht wenig noch übrig und stark angewachsen in der Menge.

Es war jedoch lediglich die WinMain() mit der Erstellung des Fensters und der MessageLoop und im WndProc() wurde WM_PAINT abgefangen. Ob ich den DirectX-Draw-Aufruf nun innerhalb der MessageLoop gemacht habe, nachdem alle Messages abgearbeitet waren, oder innerhalb von WM_PAINT, war dabei egal. ValidateRect() hatte jedoch nur in WM_PAINT funktioniert (mit der CPU-Erhöhung).

Ich verstehe an der ganzen Sache leider noch nicht, warum die Schrift am Blinken ist. Der Aufruf erfolgt definitiv einige Male in der Sekunde (per Ausgabe überprüft) und dennoch wird sie nicht durchgehend angezeigt :/
 
Ich hab das gerade nochmal eingebaut (im erweiterten Programm) und das Problem tauch plötzlich nicht mehr auf... Und wieder nichts bei gelernt :/

Dennoch danke, cwriter!
 
Zurück