我想知道使用GLFW和OpenGL代替使用像Qt或GTK這樣的傳統GUI工具包會帶來什麼樣的限制。在GUI中使用GLFW和OpenGL的侷限性
當然,我知道使用OpenGL的GLFW不會公開相同級別的功能,但是如果只需要幾種小部件,我認爲這些可以輕鬆實現。
問題是,是否有一些功能無法在GLFW/OpenGL上實現,而不是Qt或GTK?
例如,我很擔心在窗口區域之外繪製菜單(我猜在這種情況下可以使用輔助非裝飾窗口)。
我想知道使用GLFW和OpenGL代替使用像Qt或GTK這樣的傳統GUI工具包會帶來什麼樣的限制。在GUI中使用GLFW和OpenGL的侷限性
當然,我知道使用OpenGL的GLFW不會公開相同級別的功能,但是如果只需要幾種小部件,我認爲這些可以輕鬆實現。
問題是,是否有一些功能無法在GLFW/OpenGL上實現,而不是Qt或GTK?
例如,我很擔心在窗口區域之外繪製菜單(我猜在這種情況下可以使用輔助非裝飾窗口)。
我知道GLFW用OpenGL不公開的功能相同的水平,但如果只需要幾樣小部件
當涉及到OpenGL,沒有任何限制本身。你可以繪製任何你想要的。您可以繪製的區域是操作系統的一個限制因素。
請記住,像說一個文本框這樣的一些「簡單」功能已經很複雜。你不僅需要處理渲染(並且可伸縮文本並不總是有趣),而且你還必須處理鍵盤事件。繪製光標和文本選擇等。
例如,我很擔心在窗口區域之外繪製菜單(我猜在這種情況下可以使用輔助非裝飾窗口)。
當涉及到在窗口區域外繪圖時,這不是直接與OpenGL相關的。這更多的是一個取決於操作系統的問題。
例如使用WinAPI的,你可以在屏幕上的任何地方簡單地做得出:
#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;
}
注意,當屏幕重繪該區域的矩形將立即消失。
如果您已經有一個窗口,那麼您可以使用SetWindowRgn()
更改您的應用程序允許繪製的區域。請注意,你不能只是改變這個區域,一切都會好起來的。
問題是,是否有一些功能無法在GLFW/OpenGL上實現,與Qt或GTK相比?
底線是否定的。 Qt和GTK中沒有任何OpenGL無法實現的功能。重點在於它不僅僅是OpenGL,而且它很大程度上取決於操作系統,因此需要特定於操作系統的代碼。
我知道我可以使用OpenGL渲染所有東西,但是,正如您所指出的,操作系統可能會限制事物。你提到了WinAPI ......我的問題是:通過選擇GLFW(不使用OS特定的代碼)而不是Qt/Gtk,我應該期待什麼樣的操作系統相關限制? – dv1729
@ dv1729它高度依賴於最終目標是什麼。如果在窗口區域之外繪圖是一個重要因素,那麼在沒有使用OS庫的情況下,這很可能是不可能的(除非您使用其他一些跨平臺庫)。但除此之外,本身沒有任何限制。 – Vallentin