2017-03-07 4 views
2

Ich würde gerne wissen, welche Art von Einschränkungen können aus der Verwendung von GLFW und OpenGL anstelle der Verwendung eines traditionellen GUI-Toolkit wie Qt oder GTK.Einschränkungen der Verwendung von GLFW und OpenGL für GUIs

Natürlich weiß ich, dass GLFW mit OpenGL nicht die gleiche Funktionalität bieten, aber wenn nur ein paar Arten von Widgets benötigt werden, denke ich, dass diese einfach implementiert werden könnten.

Die Frage ist, gibt es ein Feature, das im Gegensatz zu Qt oder GTK nicht auf GLFW/OpenGL implementiert werden könnte?

Zum Beispiel mache ich mir Sorgen über das Zeichnen von Menüs außerhalb der Fensterregion (ich denke, dass ein Hilfs-nicht verziertes Fenster in diesem Fall verwendet werden könnte).

Antwort

1

Ich weiß, dass GLFW mit OpenGL nicht den gleichen Grad an Funktionalität aussetzen, aber wenn nur ein paar Art von Widgets

benötigt werden Wenn es um die OpenGL kommt, gibt es keine Grenze an sich. Sie können zeichnen, wo und was auch immer Sie wollen. Der Bereich, in dem Sie zeichnen können, ist ein begrenzender Faktor für die Betriebssystemseite.

Denken Sie daran, dass einige "einfache" Funktionen wie sagen ein Textfeld, ist schon kompliziert. Sie müssen nicht nur mit dem Rendern umgehen (und skalierbarer Text macht nicht immer Spaß), sondern Sie müssen auch Tastaturereignisse behandeln. Zeichnen der Cursor- und Textauswahl usw.

Zum Beispiel mache ich mir Sorgen, Menüs außerhalb des Fensterbereichs zu zeichnen (ich nehme an, dass in diesem Fall ein nicht dekoriertes Hilfsfenster verwendet werden könnte).

Wenn es um das Zeichnen außerhalb der Fensterregion geht, ist dies nicht direkt mit OpenGL verbunden. Es ist mehr eine Frage, abhängig vom Betriebssystem.

Zum Beispiel die WinAPI verwenden, können Sie eine beliebige Stelle auf dem Bildschirm zeichnen einfach, indem Sie:

#include <Windows.h> 

int main(int argc, char **argv) 
{ 
    HWND desktop = GetDesktopWindow(); 
    HDC dc = GetDC(desktop); 

    RECT rect = { 20, 20, 200, 200 }; 
    HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255)); 
    FillRect(dc, &rect, brush); 

    return 0; 
} 

Beachten Sie, dass das Rechteck sofort verschwinden, wenn der Bildschirm diesen Bereich neu gezeichnet.

Wenn Sie bereits ein Fenster haben, können Sie SetWindowRgn() verwenden, um den Bereich zu ändern, in dem Ihre Anwendung zeichnen darf. Beachten Sie, dass Sie diesen Bereich nicht einfach ändern können, und alles wird gut und schön sein.

Die Frage ist, gibt es eine Funktion, die im Gegensatz zu Qt oder GTK nicht auf GLFW/OpenGL implementiert werden konnte?

Fazit ist nein. Es gibt keine Funktion, die Sie nicht mit OpenGL implementieren können, die in Qt und GTK ist. Der Punkt ist, dass es nicht nur OpenGL ist, und dass viel davon vom Betriebssystem abhängt und somit Betriebssystemspezifischen Code benötigt.

+0

Ich weiß, dass ich alles mit OpenGL rendern kann, aber, wie Sie darauf hingewiesen haben, kann das OS Dinge begrenzen. Sie haben die WinAPI erwähnt ... Meine Frage ist: Welche Art von Betriebssystem-bedingten Einschränkungen sollte ich erwarten, wenn ich GLFW (ohne Verwendung von Betriebssystemspezifischem Code) über Qt/Gtk wähle? – dv1729

+0

@ dv1729 Es hängt sehr davon ab, was das Endziel ist. Wenn das Zeichnen außerhalb des Fensterbereichs ein wichtiger Faktor ist, ist dies höchstwahrscheinlich ohne die Verwendung von Betriebssystembibliotheken nicht möglich (es sei denn, Sie verwenden dafür eine andere plattformübergreifende Bibliothek).Aber auch sonst gibt es keine Grenzen. – Vallentin

Verwandte Themen