GLFW 中文翻译 window guide


GLFW 中文翻译 window guide

原文

内容表

  • Window object 窗口元素
  • Window event processing
  • Window properties and events
    • User pointer
    • Window closing and close flag
    • Window size
    • Framebuffer size
    • Window content scale
    • Window size limits
    • Window position
    • Window title
    • Window icon
    • Window monitor
    • Window iconification
    • Window maximization
    • Window visibility
    • Window input focus
    • Window attention request
    • Window damage and refresh
    • Window transparency
    • Window attributes
      • Window related attributes
      • Context related attributes
      • Framebuffer related attributes
  • Buffer swapping

这篇指导手册介绍了GLFW中和窗口相关的函数。你可以在这里:窗口参考中找到相关函数的详细信息。下面是GLFW其他方面的指导手册:

Window object 窗口元素

GLFWwindow对象封装了窗口和上下文。其使用glfwCreateWindow来创建,使用glfwDestroyWindow或者glfwTerminate来销毁。由于窗口和上下文是密不可分的,所以GLFWwindow对象指针被用作指向上下文的同时也是窗口的句柄。

想要了解窗口相关的回调事件流,请运行event测试程序。(译者注:待补充链接)

Window creation 窗口创建

一个窗口以及OpenGL或者ES OpenGL的上下文是通过glfwCreateWindow来创建的,他返回一个指向窗口对象的指针(句柄),一下示例创造了一个640*480大小的窗口。

1
GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", NULL, NULL);

如果窗口创建失败则会返回NULL,所以记得检查返回值

窗口句柄会传递给所有和窗口相关的函数,并且和所有的输入事件一并传送给相关函数,所以这样事件句柄可以分辨出接收事件的是哪一个窗口。

Full screen windows 全屏窗口

为了创造一个全屏的窗口,你需要指定一个显示器,在大多数情况下,用户的主显示器是一个不错的选择。有关检索显示器的更多信息请参考检索显示器。以下是一个示例:

1
GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", glfwGetPrimaryMonitor(), NULL);

全屏窗口覆盖了了显示器的全部区域,没有任何边界。

对于窗口化的窗口来讲,其可以通过使用glfwSetWindowMonitor设置显示器来全屏显示,全屏显示的窗口也可以使用相同的函数取消设置来窗口化。

GLFWvidmode结构中的每一个字段对应一个函数的参数或者窗口的隐射,他们结合起来一起去构成期望的窗口视频模式,只要窗口拥有输入焦点,就会为所选显示器设置与所需视频模式最匹配的支持的视频模式。有关视频检索的更多信息,请见视频模式

视频模式字段 对应于
GLFWvidmode.width glfwCreateWindow函数的width参数
GLFWvidmode.height glfwCreateWindow的height参数
GLFWvidmode.redBits GLFW_RED_BITS hint
GLFWvidmode.greenBits GLFW_GREEN_BITS hint
GLFWvidmode.blueBits GLFW_BLUE_BITS hint
GLFWvidmode.refreshRate GLFW_REFRESH_RATE hint

一旦你拥有一个全屏窗口,你可以通过调用glfwSetWindowMonitor改变它的分辨率,刷新率以及更换显示器。如果你仅仅需要更改他的分辨率,你也可以调用glfwSetWindowSize.在所有的情况中,新的视频模式会与使用glfwCreateWindow所选择的视频模式相一致,如果窗口拥有OpenGL或者OpenGL ES上下文则不受影响。

默认的情况下,如果失去输入焦点,将回复原始的视频模式并且图表化窗口以使得用户返回桌面。这个行为可以通过GLFW_AUTO_ICONIFY窗口隐射来禁用,例如你想要使用全屏窗口同时覆盖多个显示器。

如果显示器断开了连接,那么该显示器上的所有窗口将会切换到窗口模式。详细信息请参阅Monitor configuration changes

Windowed full screen window 窗口化全屏

如果与所需视频模式最接近的是当前的视频模式,则视频模式不会发生变化,这使得创建窗口更加迅速,并且切换应用也会更加顺滑。这有时称作窗口化全屏或者无边框窗口并算作全屏窗口,要创建这样的窗口,请请求当前的视频模式:如下:

1
2
3
4
5
6
7
8
const GLFWvidmode* mode = glfwGetVideoMode(monitor);

glfwWindowHint(GLFW_RED_BITS, mode->redBits);
glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits);
glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits);
glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate);

GLFWwindow* window = glfwCreateWindow(mode->width, mode->height, "My Title", monitor, NULL);

文章作者: 崔文耀
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 崔文耀 !
  目录