Konflikte zwischen SDL_Opengl und SDL_TTF



  • Hallo,

    für ein Programm benötige ich sowohl die TTF-Schriften von SDL_TTF als auch OpenGL. Hier zunächst der funktionierende Code:

    void print_text (SDL_Surface *screen, char *message, int x, int y) 
    {
    	// in Anlehnung an das Beispiel von SDL_TTF, jedoch ohne 
    	// eigenes Video-Surface
    }
    
    int main (int argc, char *argv[])
    {
        Uint32 sdl_flags = SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE;
    	Uint32 video_flags  = SDL_HWSURFACE;
    	static SDL_Surface	*main_screen = NULL;
    
        SDL_Init (sdl_flags);
        SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
    	main_screen = SDL_SetVideoMode (640, 480, 16, video_flags);
    
    	print_text (main_screen, "Hallo", 10, 10);
    
    	...
    	process_events ();
    	...
    
    	return (0);
    }
    

    Wenn ich nun aber bei den Videoflags zusätzlich SDL_OPENGL angebe:

    Uint32 video_flags  = SDL_HWSURFACE | SDL_OPENGL;
    

    dann erscheint der Text nicht mehr. Irgendein Fehler? Und wenn nicht, gibt es eine Möglichkeit, beides im selben Fenster zu benutzen?



  • Ich schätze das liegt daran, dass das einfache "SDL-Blitten" nicht in einem OpenGL-Kontext funktioniert.



  • ok, dann muss wohl alles unter OpenGL laufen. Ich hab zwar irgendwo im Internet einen Vorschlag gefunden, aber die Sache ist ziemlich umständlich. Da werden Text mit SDL_TTF gerendert und anschließend als Textur an OpenGL übergeben. Nun, zur Not ...

    Aber noch eine weitere Frage: Gibt es eine Möglichkeit, in demselben Fenster (!) zunächst einige Screens unter SDL laufen zu lassen (für Splash, Menüs usw.) und dann zum eigentlichen Spiel das Ganze auf OpenGL umzuschalten? Mit SDL_SetVideoMode wird ja normalerweise ein neues Fenster aufgemacht.

    Reinhard



  • nur wie gesagt wenn du das alte fenster schliesst und ein neues aufmachst...

    aber ich wuerde einfach von anfang an in opengl schalten, und da dann im orthogonalen modus auf eine oder mehrere texturen "blitten"....



  • Jetzt sehe ich's schon deutlicher, aber das musste geklärt werden, bevor ich mit meinem eigentlichen Programm beginne.

    Die Schwierigkeit besteht in meinem Fall darin, dass die Texte zur Laufzeit generiert werden, ich kann also keine vorgefertigten Textbitmaps benutzen. Zur Zeit sehe ich zwei Möglichkeiten: Die eine besteht darin, die Buchstaben aus einer Alphabet-Bitmap herauszulösen (Tuxracer macht es so). Aber der Code ist ziemlich wüst, ich glaube, mehr als tausend Programmzeilen rund um die Fontmetrix. Die andere Möglichkeit besteht in dem erwähnten Umweg über SDL_TTF. Bin dabei, mich mit dem zweiten Verfahren anzufreunden. Ich werde berichten.

    Danke für die Unterstützung.


Anmelden zum Antworten