3D引擎:Horde3D:窗口類API:glfw
Horde3D是基於 opengl的 次世代,輕量級渲染引擎。
glfw 這個開源庫是一個很好便捷 opengl創建窗口的庫, 它創建一個 opengl 上下文的窗口,並可以接收窗口輸入事件
關於 glfw 創建窗口的demo,可以參考:http://www.glfw.org/documentation.html
首先,分析Horde3D 用glfw創建窗口的方式
1 頭文件添加, #include "glfw.h"
2 初始化 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.