当前位置: 首页 > 工具软件 > Horde3D > 使用案例 >

3D引擎:Horde3D:窗口类API:glfw

东郭腾
2023-12-01
Horde3D是基于 opengl的 次世代,轻量级渲染引擎。
glfw 这个开源库是一个很好便捷 opengl创建窗口的库, 它创建一个 opengl 上下文的窗口,并可以接收窗口输入事件

关于 glfw 创建窗口的demo,可以参考:http://www.glfw.org/documentation.html

首先,分析Horde3D 用glfw创建窗口的方式
      
头文件添加, #include "glfw.h"
初始化 glfw库
        glfwInit();
3    设置输入模式为 STICK 模式
   glfwEnable(GLFW_STICKY_KEYS);
   功能
   这种模式能检测到最新输入状态,并立即更新。 在glfw3版本中,这种方法被 替换为 glfwSetInputMode(window, GLFW_STICKY_KEYS, 1)
  它防止了一些即时状态的丢失
 4   创建窗口
    bool  setupWindow(int width, int height, bool fullscreen);
    该函数里封装了 创建窗口,设置窗口事件监听事件等 功能:
    4.1  glfwOpenWindow(width, height, 8, 8, 8, 8, 24, 8, fullscreen?GLFW_FULLSCREEN:GLFW_WINDOW)
      参数1-2: 窗口的宽高
      参数3-8:  颜色rgba的bit大小,以及depth buffer bit 和stencil buffer bit的大小
      参数9: 设置全屏模式
     功能:
      它创建了一个可以显示位图的窗口,分配相应的buffer。 在glfw3版本中,这种方法被替换成了GLFWwindow *glfwCreateWindow(int wight, int height, const char *title, GLFWmonitor *monitor, GLFWwindow *share)

   4.2 禁止 vertical synchronization
        glfwSwapInterval(0); 
       参数:  glfwSwapBuffers操作之间,屏幕需要等待更新的次数
        什么是vertical synchronization?   
      它是用来防止屏幕撕裂现象的
       Screen tearing
       Screen tearing 引起的原因是:
        简单的说是,GPU往屏幕渲染的帧率大于屏幕刷新的帧率,也就是   说,当屏幕绘制(刷新)一帧到中间时, GPU已经向屏幕输送了好几帧,而屏幕会继续绘制(刷新),但这时用的数据是GPU向屏幕更新的数据。 这样就
       导致的屏幕撕裂的问题。 它也并不是GPU比屏幕刷新的快, 总体来说,如果GPU的刷新率不是屏幕刷新率的倍数,那么就会出现撕裂的问题, 而解决这种问题的方式,就是 v-sync

        V-sync:
        Vertical synchronization 是 大多数系统的一个选项。 它是防止显卡想显存输送数据,直到屏幕刷新完当前帧为止。
        在Vertical blanking interval的时间里,驱动会命令显卡 要么 快速的复制离屏区域到 激活现实区域里,俗称 double buffering,要么两个buffer都是可以现实的,然后再前后buffer之间切换,即 page flipping
  

  4.3  实现监听设置
       ....
       glfwSet开头的API设置 窗口关闭,键盘按键响应,以及鼠标键回调事件

  4.4  设置窗口标题
       glfwSetWindowTitle(app->getTitle());
      参数: char * 



  4.5  其它一些api  
        glfwTerminate() 终止窗口, 当推出游戏时或者创建窗口
        glfwCloseWindow(),关闭窗口
        glfwDisable 关闭一些功能,如GLFW_MOUSE_CURSOR 取消鼠标标识显示
        glfwGetTime() 获取当前时间 

        glfwSwapBuffers()  交换前后buffer
 类似资料: