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

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章