Moin Moin zusammen.
Ich arbeite mich zur Zeit in OpenGL und SDL ein und stehe jetzt vor dem Problem wie ich Text ausgebe. Die Ansätze die im Wiki verwendet werden, kann ich nicht benutzen da ich durch die Fenstererstellung mit SDL ja keinen Device Context habe. Jetzt hab ich versucht das ganze über die SDL_ttf.pas zu regeln. Dabei tritt jedoch jedesmal ein SigSegv Fehler auf. Das TTF Modul ist initialisiert, der Font wird auch geladen. Der Fehler tritt erst bei "SDL_UpdateRect(screen,dstrect.x,dstrect.y,dstrect.w,dstrect.h);" auf. Bei den Parametern die ich am Anfang in die beiden TSDL_Color Variablen einspeichere bin ich mir auch nicht so ganz sicher ob das so stimmt, da mir nicht ganz klar ist was für Werte da erwartet werden.
Ich hab mal die betroffenen Codeteile angehängt.
Screen ist mein PSDL_Surface auf dem ich auch ohne Probleme zeichnen kann. LoadedFont eine Variable von Typ TTTF_Font.
Schonmal im Vorraus danke.
Code:
//Initialisierung von SDL_TTF
if( TTF_Init =-1)then
begin
Log.LogError('Initalisierung von SDL_TTF schlug fehl: '+TTF_GetError,'SDL_TTF');
Quit_App;
end;
procedure CreateFont;
begin
LoadedFont:=TTF_OpenFont('aispec.ttf',32);
If LoadedFont =nil
thenbegin
Log.LogError('Konnte den Font nicht laden: '+TTF_GetError,'SDL_TTF');
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Hi,
leider (oder zum Glück ) kann ich keinen Fehler in deinem Code finden.
Du könntest höchstens das probieren:
Code:
SDL_UpdateRect(screen,0,0,0,0);
bzw. diese Zeile mal weglassen?
Ansonsten bieten sich noch Bitmap-Fonts an, oder du schaust die das Beispiel von Phoebius im SDK an.
Dort arbeitet er auch mit SDL_TFF, erstellt aber aus der Schrift eine Texture und lässt dann OpenGL rendern.
Die Zeile wegzulassen hab ich schon versucht, dann läuft zwar alles fehlerfrei aber der Text wird nicht angezeigt. Wenn ich den ganzen Screen update kommt ebenfalls die selbe Fehlermeldung. Das im SDK werd ich mir mal anschauen, danke für den Hinweis.
Edit:
Irgendwie bin ich blind, wo ist denn im SDK die Demo dazu? Finde die irgendwie nicht. Wenn mich nicht alles täuscht sind da nur 2 Demos zu dem Thema im SDL Verzeichnis. Aus denen hab ich aber den obrigen Code.
Irgendwie bin ich immernoch nicht weiter. Wo finde ich denn jetzt die erwähnte Demo? Im Windows SDK sind 2 Demos im SDL Verzeichnis, die sind auch beim normalen Jedi-SDL Paket dabei und aus denen hab ich mir auch obigen Code zusammengereimt. Wenn ich das Linux SDK entpacke ist im Sample Ordner ein Beispiel was sich aber nicht mit Sdl_TTF beschäftigt.
Ich geh inzwischen davon aus das Sdl_UpdateRect nicht funktioniert weil mein Sdl_Surface für OpenGl eingerichtet ist. Das ist so der einzige Unterschied den ich zwischen meinem Programm und den beiden Sdl Demos sehe.
Zu den Bitmap Fonts. Für die brauche ich doch wieder einen Device Context, welchen ich aber nicht habe. So wie ich das verstanden habe bleibt mir als einzige Lösung in dem Fall nur SDL_TTF.
Kannst dir auch das Tutorial: Bomberman2 anschauen.
Wegen dem TFF-Demo:
Sollte unter Samples/sdl_tff liegen. Könnte aber sein, dass es aufgrund seinen "experimentalen" Charakter entfernt wurde.
Habe es einfach angehängt.
Ansonsten gut das du gepostet hast, wollte schon die ganze Zeit nachfragen wie es aussieht. Habe es nur immer wieder vergessen
Wegen dem SDL_UpdateRect:
Kannst du einfach mal bei SDL das OpenGL weglassen und schauen ob es dann funktioniert?
Dein geposteter Code benutzt ja kein SDL. Dann wüssten wir zumindest sicher, dass bei SDL+OpenGL keine Surfacemodifikation erlaubt sind (bzw. nicht machbar sind)
Ansonsten könntest du anstatt ner HardwareSurface mal ne SoftwareSurface nehmen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Oh, hatte mir per Google ein Tutorial zu Bitmap Fonts gesucht da stand aber drin das man einen DC brauchen würde, deswegen hab ich gar nicht weitergelesen. Gut dann werd ich mir das mal anschauen.
Hab jetzt mal probeweise die Initialisierung von OpenGL rausgelassen und siehe da es funktioniert. Kein Absturz und der Text wird richtig angezeigt. Könnte ruhig mal in der Beschreibung der Prozedur in der Sdl Doku dabeistehen*brummel*.
Und danke für das posten des Beispiels.
Edit
Habs jetzt mit dem geposteten Tutorial zum Laufen bekommen. Schrecklich was für Umstände man sich machen muss für ein bisschen Text
Es gibt noch eine andere Möglichkeit, Text über die SDL auszugeben und zwar mithilfe der SFont.pas, die auch im JEDI - SDL - Paket beiliegt. Beispiele dazu sind im Unterordner /SFont zu finden.
Vorteil: Es funktionniert auch plattformunabhängig und man benötigt nicht mehr die SDL_TTF
Nachteil: Du benötigst die Buchstaben des Alphabets und einige Zeichen als Bild abgespeichert und zwar in einer bestimmten Reihenfolge, damit es durch SFont auch richtig gelesen werden kann. (Damit man auch selber damit Fonts erstellen kann, empfehle ich dieses Tool hier (für Windows).)
Am besten läuft es mit reinem SDL, mit zusätzlichem OpenGL müsste man den Text eventuell als Textur auf ein Quad rendern.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.