OpenGL XWindow Realisierung

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

OpenGL XWindow Realisierung

Beitrag von BeRsErKeR »

Hallo,

ich schreibe gerade an einer kleinen Engine, die sowohl Windows auch als Linux (XWindow-System) unterstützen soll. Fernen soll OpenGL und DirectX ermöglicht werden. Ich habe mit OpenGL leider bislang nur Erfahrung auf Windows-Plattformen und mit dem XWindow-System habe ich direkt noch nie gearbeitet, sondern meist mit gtkmm oder Qt.

Folgendes bezieht sich nun auf das XWindow-System unter Unix/Linux.

Das Erstellen eines Fensters und Verknüpfen mit OpenGL ist ja relativ trivial. Da ich aber verschiedene Grafik APIs anbieten will, soll das Hauptfenster unabhängig vom Grafikdevice sein. Außerdem soll man Devices (also quasi ein Context) für jedes Fenster anlegen können (z.B. nützlich in Mapeditoren usw).

Also ich kann quasi zunächst das Hauptfenster erstellen und dann das OpenGL-Device, welchem ich dann das Fenster mitgebe. Dabei kann ich auch ein anderes Fenster angeben. Soweit so gut.

Ich komme nun aber zu einem Problem. Intuitiv würde ich gern dem Device beim Erstellen mitteilen, welche Eigenschaften es hat (DepthBufferSize, ColorBits, usw). Unter Windows geht das recht gut, da man für das erstellte Fenster verschiedene DCs zur Auswahl hat. Bei XWindow, muss ich aber bereits beim Erstellen des Fensters die Bittiefe und die Größe Tiefe des DepthBuffers angeben. Das heißt, dass Device hat keinen Einfluss mehr, da es den GL Context dann nur noch auf Basis des Fensters erstellt und beim Erstellen des Fensters muss ich Bittiefen angeben, wobei es mir da relativ egal sein kann.

Nun die Frage: Gibt es da eine Möglichkeit später nochmals diese Eigenschaften zu ändern? Oder welchen anderen Weg könntet ihr empfehlen? Ich würde wie gesagt gern Fenster und Device/Context trennen, da diese sowohl auf OpenGL- als auch auf DirectX-Basis arbeiten können (DX natürlich nur unter Windows). Bei XWindow braucht halt das Fenster die Angaben über DepthBuffer, DoubleBuffer, ColorBits usw; bei der WinAPI ist es eher andersrum. Dort erstelle ich einfach das Fenster und kann im Nachhinein das PixelFormat des DC so ändern, wie ich möchte.

Mir dämmert fast, dass man tatsächlich dem Fenster diese Dinge mitgeben muss. Sind solche Angaben denn dann auch für DirectX brauchbar/konsistent? In diese Richtung habe ich mich bislang auch noch nicht weit vorgewagt.


Übrigens muss mir keiner erzählen, dass die Engine nichts taugen wird. Ich übe mich nur in plattformunabhängiger Programmierung und Engineentwicklung. Und gleichzeitig möchte ich die Unterschiede zwischen DX und OpenGL und die Funktionsweise des XWindow-System kennenlernen. :)
Ohne Input kein Output.
Sindwiller
Beiträge: 3
Registriert: 01.01.2011, 20:48

Re: OpenGL XWindow Realisierung

Beitrag von Sindwiller »

Ich habe mich zwar konkret noch nie damit befasst, was mir aber in diesem Zusammenhang (als Linux-Benutzer) geläufig ist, sind Bibliotheken wie GLUT. Dieses kurze Tutorial hier sollte weiterhelfen, genau wie alle restlichen NeHe-Snippets (die es unten jeweils in verschiedenen Formen gibt, mit GLUT, usw.). Sonst gabs noch IIRC einige andere Bibliotheken im Stile GLUT's, ich kann mich aber an keine mehr erinnern.
Benutzeravatar
Lynxeye
Establishment
Beiträge: 145
Registriert: 27.02.2009, 16:50
Echter Name: Lucas
Wohnort: Hildesheim
Kontaktdaten:

Re: OpenGL XWindow Realisierung

Beitrag von Lynxeye »

GLUT und andere Bibliotheken machen dir das ganze nur etwas einfacher, die Problematik mit dem ans Fenster gebundenen DC umgehen sie allerdings nicht.

Du solltest dir mal die EGL API ansehen. Die wurde meines Wissens nach dafür erschaffen um deine Problematik Platformübergreifend zu lösen.
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: OpenGL XWindow Realisierung

Beitrag von BeRsErKeR »

Das sieht vielversprechend aus. Vielen Dank!
Ohne Input kein Output.
Antworten