本章節主要總結如何使用GLFW來建立Opengl窗口。主要包括以下內容:html
能用於OpenGL的窗口庫有不少,常見的有glut、freeglut、SDL、GLFW等。glut基本已經被廢棄,其餘幾個再不一樣場合都有不一樣的應用。GLFW爲opengl superbible 6th & 7th中推薦的第三方開源窗口庫。GLFW的特色大概總結以下:windows
下面咱們來實際看下使用GLFW的實際意義。ide
OpenGL ES在嵌入式開發中實際比在PC上開發opengl的環境搭建彷佛要複雜不少,一般嵌入式開發中使用EGL建立OpenGL渲染的surface,使用wayland建立窗口的surface來實現。在實際開發過程當中,咱們想經過在PC上開發EGL + OpenGl ES的程序,這個時候,若是平臺不一樣,咱們每每在不一樣平臺上實現不一樣的窗口,如:函數
window 窗口系統、X11窗口和wayland窗口的建立和窗口事件獲取及處理方式各不相同,而GLFW所作的事情,就是提供統一的窗口建立的方法,使咱們能在GLFW上開發與平臺無關的OpenGL ES代碼。測試
GLFW官網有詳細的各個平臺編譯步驟介紹,在此咱們針對Window + VS2005 + EGL + Mail模擬器進行進行介紹。ui
配置完成後咱們點擊Generate,便可完成項目文件的建立; 在build的目錄下,咱們可使用vs2005 打開GLFW.sln並編譯GLFW庫;spa
至此,編譯部分大體介紹完成,你們在實際編譯過程當中可能會遇到其餘問題,參考官網的介紹應該都能解決。3d
咱們把GLFW編譯出來的庫和頭文件複製到咱們的OpenGL ES VS工程中(固然也必須添加模擬器的Dll),以下爲實例代碼:code
#define GLFW_INCLUDE_ES2 #include <GLFW/glfw3.h> void errorfunc(int error, const char* discription) { fputs(discription,stderr); } void keyfunc(GLFWwindow* window, int key, int scancode, int action, int mods) //按鍵回調函數 { if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) { glfwSetWindowShouldClose(window,GL_TRUE); //退出是銷燬窗口 } } int main() { GLFWwindow* windows; glfwSetErrorCallback(errorfunc); if (!glfwInit()) { exit(EXIT_FAILURE); } windows = glfwCreateWindow(600, 480, "test opengl windows", NULL, NULL); //建立窗口 if (!windows) { glfwTerminate(); } glfwMakeContextCurrent(windows); glfwSetKeyCallback(windows,keyfunc); while (!glfwWindowShouldClose(windows)) //渲染循環 { glClear(GL_COLOR_BUFFER_BIT); glClearColor(....); //do something about opengl glfwSwapBuffers(windows); glfwPollEvents(); } glfwDestroyWindow(windows); glfwTerminate(); return 0;