2012-06-25 6 views
20

Ich erwartete eine Linux-API ähnlich der Windows-API. Alles, was ich auf Google sehe, sind Verweise auf Qt und GTK. Ich brauche wirklich nicht mehr als ein einfaches Fenster mit OpenGL, so dass diese Bibliotheken aufgebläht für meine Verwendung erscheinen. Was benutzen Qt und GTK um Windows unter Linux zu erstellen? Gibt es nichts Niedrigeres?Wie erstellen Sie ein Fenster in Linux mit C++?

+1

Die X Windows-API ist in der Regel die API der niedrigsten Ebene für generische "Windowing" auf * nix. http://tronche.com/gui/x/xlib/introduction/ – Chad

+0

Ich bin neugierig: Warum sollten Sie erwarten "Linux Api" (was auch immer Sie damit genau gemeint), um Winampi gleich zu sein? – PlasmaHH

+1

Sie wollen wirklich nicht tiefer gehen. Verwenden Sie eine der Abstraktionen auf höherer Ebene (QT/GTK/WxLib/More), sonst werden Sie in vielen Detailfragen hängen bleiben, die Sie nicht behandeln wollen, wenn die übergeordneten Frameworks sich darum kümmern. Sie alle ermöglichen es Ihnen, eine OpenGL-Ebene zu erhalten und darauf zu zeichnen. –

Antwort

10

Das X-Window-System führt im Allgemeinen die Zeichnung - Sie verwenden dann ein Toolkit wie Qt oder GTK auf rohe Xlib, um Ereignisschleifen, Drag & Drop, Apps auf Mausklicks und alle anderen 'Desktop' Zeug

Es ist ziemlich einfach, direkt mit Xlib and opengl zu arbeiten, oder wenn Sie nur opengl lernen möchten, bietet die glut das Framework, das Sie benötigen, um ein Fenster anzuzeigen, Maus/Tastatur Ereignisse und so weiter zu behandeln.

+1

Im Prinzip könnten Sie sogar Xlib vermeiden und einfach das rohe X11-Protokoll übertragen (und empfangen und interpretieren). Aber das ist nicht vernünftig. –

8

Für OpenGL ist der einfachste Weg, es zu tun mit GLUT oder SDL. Hier ist ein ungefähres Beispiel mit GLUT:

#include <GL/glut.h> 

int main (int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); 
    glutInitWindowSize(800, 600); 
    glutInitWindowPosition(100, 100); 
    glutCreateWindow("My new window"); 
    /* ... */ 
} 

Sie möchten wirklich vermeiden, Xlib direkt zu verwenden, da es sehr mühsam zu verwenden ist. Außerdem erleichtern GLUT und SDL das Portieren Ihrer OpenGL-Anwendung auf verschiedene Plattformen.

+0

Wie erhalten Sie Zugriff auf die Grafikebene für OpenGL? –

+0

@LokiAstari: Wenn Sie eine Art undurchsichtiger Typ meinen, der den Zeichenstatus enthält, weiß ich nicht wirklich. Als ich in OpenGL (zurück in Version 1.2) Code einprogrammierte, gab es nur einen globalen Platz zum Zeichnen, der intern von der OpenGL-Implementierung behandelt wurde. – C2H5OH

3

Ax Martin sagte, X11 (oder seine Gabel XOrg in diesen Tagen) ist das Windowing-System, aber Sie können X11-Anwendungen (d. H. Clients) schreiben, ohne ein Toolkit zu verwenden, nur mit den X-Bibliotheken. Informationen zur Dokumentation finden Sie unter here.

Es ist im Allgemeinen nicht die beste Idee, dies zu tun, da es ziemlich schmerzhaft ist und viel Code für relativ einfache Anwendungen benötigt, um so zu arbeiten, wie Sie es erwarten.

Verwandte Themen