使用GLFW和OpenGL进行GUI的限制

时间:2017-03-07 13:15:02

标签: qt user-interface opengl gtk glfw

我想知道使用GLFW和OpenGL而不是使用像Qt或GTK这样的传统GUI工具包会产生什么样的限制。

当然,我知道使用OpenGL的GLFW不会暴露相同级别的功能,但如果只需要几种小部件,我认为这些可以轻松实现。

问题是,与Qt或GTK相比,是否有一些功能无法在GLFW / OpenGL之上实现?

例如,我担心在窗口区域之外绘制菜单(我想在这种情况下可以使用辅助的非装饰窗口)。

1 个答案:

答案 0 :(得分:2)

  

我知道使用OpenGL的GLFW不会暴露相同级别的功能,但是如果只需要几种小部件

说到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;
}

请注意,当屏幕重绘该区域时,矩形会立即消失。

如果您已有窗口,则可以使用this blog post更改允许应用程序在其中绘制的区域。请注意,你不能只改变这个区域,一切都会很好,花花公子。

  

问题是,与Qt或GTK相比,是否有一些功能无法在GLFW / OpenGL之上实现?

底线是否定的。在Qt和GTK中没有任何使用OpenGL无法实现的功能。重点是它不仅仅是OpenGL,而且很多都依赖于操作系统,因此需要特定于操作系统的代码。