【问题标题】:X11 Fullscreen window (OpenGL)X11 全屏窗口 (OpenGL)
【发布时间】:2012-01-31 16:38:17
【问题描述】:

我正在使用 Xlib (X11) 在 linux (Ubuntu 11.10) 上编写 OpenGL 应用程序。在窗口模式和全屏模式之间实现切换的最简单方法是什么?

【问题讨论】:

    标签: opengl fullscreen x11 xlib


    【解决方案1】:

    这是what Havoc P suggested 的一个实现,以节省下一个人的工作量:

    void fullscreen(Display* dpy, Window win) {
      Atom atoms[2] = { XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False), None };
      XChangeProperty(
          dpy, 
          win, 
          XInternAtom(dpy, "_NET_WM_STATE", False),
          XA_ATOM, 32, PropModeReplace, atoms, 1
      );
    }
    

    【讨论】:

    • 请解释为什么这项工作而不是仅仅给出答案
    • 嗯,当我使用这个代码 sn-p 时,gcc 正在抱怨。根据XChangeProperty 手册页,上述函数的倒数第二个参数不应该是字符串,而不是原子数组吗?
    • XChangeProperty 可能误导性地采用了unsigned char* data,但它确实是一个指向原子数组的指针,就像上面的 sn-p 一样。 gcc的抱怨是什么?如果您尝试将其编译为 C++ 代码,则需要使用像 (unsigned char *)atoms 这样的显式转换。
    • T @ArtB Havoc 已经解释了它的工作原理。就像它在第一行所说的那样:这只是实现,我发布它以便其他人可以复制+粘贴。
    • @EmilMikulic 它被审查系统标记,所以应该是独立的......但这确实导致了它看起来也很愚蠢的极端案例。在这种情况下,我会编辑他的答案以包含您的代码(您可能无权使用该代码,或者将他的答案复制到您自己的代码中)。请注意,在审核模式下,我们看不到问题或任何其他答案,我们只是孤立地看到您的答案。
    【解决方案2】:

    在协议级别,请参阅 _NET_WM_STATE 属性以及随附的客户端消息和全屏状态标志。这是在 EWMH 规范中指定的。对于奖励积分,如果 WM 未报告对官方提示的支持,您可能需要手动实现全屏,EWMH 指定了一种检查支持的方法。您可能还想抓住鼠标指针和/或 如果您不希望人们不小心离开全屏,请使用键盘。

    或者,为了避免学习低级 X gunge,只需使用 SDL 或 GTK 或 Qt 或其他东西,它们都应该有一个简单的方法调用来切换全屏。

    【讨论】:

      猜你喜欢
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多