Text-Darstellung

fbfeix

Erfahrenes Mitglied
Hallo

ich habe vor mit OpenGL Text darzustellen. Das Problem ist nur, kann OpenGL (am besten mit GPU-Unterstützung) viel Text in unterschiedlichen Schriftarten darstellen? Oder ist die API mehr auf allgemeine Grafiken (Dreiecke,...) ausgerichtet?
Kann ich auf diese Texte auch Shader ausüben?

Ich habe übrigens schon gehört dass man nur die Standardschriftart von OpenGL (****?) benutzen kann. Wie kann man dieses Problem am besten umgehen?
 
Hallo,

Grundsätzlich bietet dir OpenGL KEINE Unterstützung für Font-Rendering. Wenn man sowas brauchst kann man aus den Fonts mittels z.B.: freetype Texturen erstellen, und diese dann auf Quads rendern. Da es sich dann um normale Geometrie handelt kannst du natürlich auch Shader darauf anwenden.
 
Danke.
noch eine Frage die Richtung OpenGL geht:

gibt es denn eigentlich eine Begrenzung was die Anzahl an OpenGL-Contexten (also wieviele Fenster mit OpenGL) angeht?
 
Hallo,

Das ist Betriebssystemabhängig, eine genaue Anzahl weiß ich leider auch nicht. Aus Erfahrung kann ich dir sagen, das man sowohl unter Ubuntu als auch unter Win7 50 haben kann ohne Probleme zu kriegen.
Empfehlen würde ich das aber nicht, da jeder wechsel des aktuell verwendeten Contexts die Grafikpipeline flushed, was ziemlich inperformant wird.
 
Wird dann praktisch bei jedem Context den ich aufrufe (zum Beispiel beim Zeichnen) die Grafikpipeline geräumt und der aktuelle Context gezeichnet? Und wenn ich den selben Context zeichnen will bleibt dieser in der Grafikpipeline?

Bitte verbessert mich wenn ich da was falsch verstanden habe. Bin leider noch nicht der Profi in OpenGL
 
Naja, ein Kontext speichert alle Informationen über den Zustände von OpenGL, zum Beispiel alles was du mit glEnable/Disable setzt. Wenn du jetzt entweder manuel (wglMakeCurrent) oder automatisch durch Prozesswechsel auf der CPU einen anderen Kontext aktivierst müssen zuerst alle Befehle die noch in der Befehlsqueue des letzen Kontext sind abgearbeitet werden, dann alle Einstellungen auf die des neuen gesetzt werden, und erst dann kannst du in den neuen zeichnen.

bei jedem Context den ich aufrufe (zum Beispiel beim Zeichnen)
Meistens wird es so sein, dass du pro Prozess einen Kontext haben wirst, ausgenommen du musst in mehrere verschiedenen Fenster rendern. Daher bleibt der Renderkontext immer aktiv.
 
wäre es dann theoretisch auch möglich von verschiedenen Fenstern aus auf einen Context zuzugreifen und in diesem die neue Befehlsqueue abzuarbeiten?
 
Hallo,

Zugreifen ja, aber das Zielfenster auf das gerendert wird kann immer nur das sein, auf dem der Context erstellt worden ist.
 
ist es denn nicht möglich den Context freizustellen? also nicht fenstergebunden?
Ich meine dass ich einfach sagen kann der Context soll jetzt in diesem Fenster zeichnen und später in einem anderen Fenster.
 
Zurück