OpenGL ES之GLFW窗口搭建

概述

  本章節主要總結如何使用GLFW來建立Opengl窗口。主要包括以下內容:html

OpenGL窗口建立介紹

  能用於OpenGL的窗口庫有不少,常見的有glut、freeglut、SDL、GLFW等。glut基本已經被廢棄,其餘幾個再不一樣場合都有不一樣的應用。GLFW爲opengl superbible 6th & 7th中推薦的第三方開源窗口庫。GLFW的特色大概總結以下windows

  1. 跨平臺,能在window、Linux和wayland中使用;
  2. 支持OpenGL、OpenGL ES;
  3. 底層的可配置性;

  下面咱們來實際看下使用GLFW的實際意義。ide

  OpenGL ES在嵌入式開發中實際比在PC上開發opengl的環境搭建彷佛要複雜不少,一般嵌入式開發中使用EGL建立OpenGL渲染的surface,使用wayland建立窗口的surface來實現。在實際開發過程當中,咱們想經過在PC上開發EGL + OpenGl ES的程序,這個時候,若是平臺不一樣,咱們每每在不一樣平臺上實現不一樣的窗口,如:函數

  1. window:OpenGL ES + EGL + Window系統窗口(實際運行還須要加OpenGL ES的模擬器,OpenGL.ES.3.0.Programming.Guide中有介紹高通芯片等模擬器的使用的章節);
  2. Linux: OpenGL ES + EGL + X11窗口;
  3. ARM: OpenGL ES + EGL + wayland窗口;

  window 窗口系統、X11窗口和wayland窗口的建立和窗口事件獲取及處理方式各不相同,而GLFW所作的事情,就是提供統一的窗口建立的方法,使咱們能在GLFW上開發與平臺無關的OpenGL ES代碼。測試

GLFW Window版編譯介紹

  GLFW官網有詳細的各個平臺編譯步驟介紹,在此咱們針對Window + VS2005 + EGL + Mail模擬器進行進行介紹。ui


 

  • 下載CMake並安裝(官網可直接尚在安裝包進行安裝);     
  • 下載Mail模擬器安裝包,安裝完成後,在安裝路徑下能夠看待咱們在開發過程當中須要用到的頭文件和相應的dll,你們能夠點擊mali-cube.exe來測試本身的機器是否能正常運行此模擬器,VM虛擬機對OpenGL版本的支持比較低,通常沒法運行此虛擬機,所以你們可能在虛擬機上開發OpenGL ES會受到一些障礙;

            

 


 

 

  • 下載GLFW源碼,使用CMake GUI編譯GLFW;
  • 在CMake安裝目錄bin下找到cmake-gui.exe並運行;
  • 選擇源碼路徑和編譯路徑;

          

                 點擊Configure進行配置
 

           

     完成後,咱們獲得了配置屬性設置項,官網有對每項配置的介紹
 

 

             

  配置完成後咱們點擊Generate,便可完成項目文件的建立; 在build的目錄下,咱們可使用vs2005 打開GLFW.sln並編譯GLFW庫;spa

  至此,編譯部分大體介紹完成,你們在實際編譯過程當中可能會遇到其餘問題,參考官網的介紹應該都能解決。3d

GLFW簡單工程源碼介紹

咱們把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;
相關文章
相關標籤/搜索