将 GLFW 和 OpenGL 用于 GUI 的限制
Limitations of using GLFW and OpenGL for GUIs
我想知道使用 GLFW 和 OpenGL 而不是使用传统的 GUI 工具包(如 Qt 或 GTK)会产生什么样的限制。
当然,我知道带有 OpenGL 的 GLFW 不会公开相同级别的功能,但如果只需要几种小部件,我认为这些可以很容易地实现。
问题是,与 Qt 或 GTK 相比,是否有某些功能无法在 GLFW/OpenGL 之上实现?
例如,我担心在 window 区域之外绘制菜单(我想在这种情况下可以使用辅助的非装饰 window)。
I know that GLFW with OpenGL don't expose the same level of functionality, but if only a few kind of widgets are needed
对于 OpenGL 本身没有任何限制。你可以随心所欲地画画。您可以绘制的区域是操作系统方面的限制因素。
请记住,某些 "simple" 功能(例如文本框)已经很复杂。您不仅必须处理渲染(可缩放文本并不总是很有趣),而且还必须处理键盘事件。绘制光标和文本选择等
For example, I'm worried about drawing menus outside the window region (I guess that an auxiliary non-decorated window could be use in this case).
在 window 区域外绘制时,这与 OpenGL 没有直接关系。这更多的是一个问题,取决于 OS.
例如使用 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;
}
请注意,当屏幕重绘该区域时,矩形会立即消失。
如果您已经有了 window,那么您可以使用 SetWindowRgn()
来更改允许您的应用程序在其中绘制的区域。请注意,您不能只更改此区域,一切都会很好。
The question is, is there some feature that couldn't be implemented on top of GLFW/OpenGL in contrast to Qt or GTK?
底线是没有。在 Qt 和 GTK 中,没有任何功能是您无法使用 OpenGL 实现的。关键是它不仅仅是 OpenGL,而且很多都取决于操作系统,因此需要 OS 特定代码。
我想知道使用 GLFW 和 OpenGL 而不是使用传统的 GUI 工具包(如 Qt 或 GTK)会产生什么样的限制。
当然,我知道带有 OpenGL 的 GLFW 不会公开相同级别的功能,但如果只需要几种小部件,我认为这些可以很容易地实现。
问题是,与 Qt 或 GTK 相比,是否有某些功能无法在 GLFW/OpenGL 之上实现?
例如,我担心在 window 区域之外绘制菜单(我想在这种情况下可以使用辅助的非装饰 window)。
I know that GLFW with OpenGL don't expose the same level of functionality, but if only a few kind of widgets are needed
对于 OpenGL 本身没有任何限制。你可以随心所欲地画画。您可以绘制的区域是操作系统方面的限制因素。
请记住,某些 "simple" 功能(例如文本框)已经很复杂。您不仅必须处理渲染(可缩放文本并不总是很有趣),而且还必须处理键盘事件。绘制光标和文本选择等
For example, I'm worried about drawing menus outside the window region (I guess that an auxiliary non-decorated window could be use in this case).
在 window 区域外绘制时,这与 OpenGL 没有直接关系。这更多的是一个问题,取决于 OS.
例如使用 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;
}
请注意,当屏幕重绘该区域时,矩形会立即消失。
如果您已经有了 window,那么您可以使用 SetWindowRgn()
来更改允许您的应用程序在其中绘制的区域。请注意,您不能只更改此区域,一切都会很好。
The question is, is there some feature that couldn't be implemented on top of GLFW/OpenGL in contrast to Qt or GTK?
底线是没有。在 Qt 和 GTK 中,没有任何功能是您无法使用 OpenGL 实现的。关键是它不仅仅是 OpenGL,而且很多都取决于操作系统,因此需要 OS 特定代码。