Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

unsigned int

Alter Hase

  • »unsigned int« ist der Autor dieses Themas

Beiträge: 512

Wohnort: Bonn

Beruf: Schüler; C#-Programmierer in einer kleinen Firma

  • Private Nachricht senden

1

28.10.2004, 11:48

Text: unzureichend Speicher oder Programmierfehler?

Hallo zusammen,

für ein Projekt von mir benutze ich die von DirectX bereitgestellte Textrender-Funktion (DrawText()). Nun habe ich das Problem, dass der von mir ausgegebene Text anfangs wunderbar funktioniert; wenn der Text allerdings länger wird, überschreibt das Ende des Textes den Anfang und es sieht ziemlich komisch aus.
Der Fehler kommt manchmal bei etwa 30 Zeichen, manchmal bei 60, allerdings kommt er schneller, wenn ich Zeilenumbrüche ("\n") einfüge.
Zum Rendern des Textes benutze ich folgenden Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Deklaration:

LPD3DXFONT              g_pText;

// in der Initialisierungsfunktion

LOGFONT LogFont = {15, 0, 0, 0, FW_NORMAL, false, false, false, DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, "Arial"}; // zum Füllen der Schriftartstruktur


D3DXCreateFontIndirect(g_pD3DDevice,&LogFont,&g_pText); // zum Erstellen der Schriftart


RECT FontOutPosition;
FontOutPosition.top = 10;
FontOutPosition.left = 10;
FontOutPosition.right = 790;
FontOutPosition.bottom = 590;

// jetzt in der Renderfunktion von mir:

g_pText->Begin();       
if(FAILED(g_pText->DrawText("DIES IST DER TEXT",-1,&FontOutPosition,NULL,0xff000000)))
{
    MessageBox(g_hWindow,"Textrendern failed!","Render()",MB_OK);
    return 1;
}
g_pText->End();

// am Ende rufe ich noch g_pText->Release() und g_pText=NULL auf, aber das ist wohl eher irrelevant


Ich hoffe, jemand kann mir helfen.
Entweder sind die Systemressorcen sehr gering (aber bei fremden Programmen klappt's, weshalb ich dies ausschließe) oder ich habe einen Fehler eingebaut.

Oder könnt ihr, falls ihr anders Text darstellt (aber mit den DirectX-Funktionen) schreiben, wie ihr diesen Text darstellt? :)

Vielen Dank
unsigned int
"Tu es. Oder tu es nicht. Es gibt kein Versuchen."
StarWars

www.tron2d.de.vu

unsigned int

Alter Hase

  • »unsigned int« ist der Autor dieses Themas

Beiträge: 512

Wohnort: Bonn

Beruf: Schüler; C#-Programmierer in einer kleinen Firma

  • Private Nachricht senden

2

28.10.2004, 23:13

Hallo ???
:(

Oder mache ich an sich alles richtig?

Hilfe!
Wie rendert ihr denn Text? Habt ihr eigene Funktionen dafür?
"Tu es. Oder tu es nicht. Es gibt kein Versuchen."
StarWars

www.tron2d.de.vu

3

29.10.2004, 00:26

Hm...also an deinem Beispiel Code kann ich keinen Fehler ausmachen. Warum aber erstellst du denn in jedem Frame die Schrift neu?

Einmal bei Initialisierung würde doch reichen. Vieleicht gibbet au hier einen Fehler. Schon mal den Rückgabewert von D3DXCreateFontIndirect überprüft?

An mangelden Resourcen dürfte das jedenfall nicht liegen ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

unsigned int

Alter Hase

  • »unsigned int« ist der Autor dieses Themas

Beiträge: 512

Wohnort: Bonn

Beruf: Schüler; C#-Programmierer in einer kleinen Firma

  • Private Nachricht senden

4

29.10.2004, 10:10

Was meinst du mit

Zitat

Warum aber erstellst du denn in jedem Frame die Schrift neu?


In meiner Renderfunktion steht nur g_pText->Begin(), ...->TextDraw und ...->End(). Alles andere ist in der Initalisierung erledigt (habe versucht, das mit den Kommentaren eindeutiger zu machen, aber scheiterte wohl ;) ).

Ok, den Rückgabewert werde ich gleich checken.
Danke schonmal, DragonMaster

unsigned int
"Tu es. Oder tu es nicht. Es gibt kein Versuchen."
StarWars

www.tron2d.de.vu

Anonymous

unregistriert

5

30.10.2004, 00:32

Also mit dem Rückgabewert war alles ok...
tja, ich werds mal an nem anderen PC probieren (falls ich einen finde ;) )

Werbeanzeige