OpenGL ES之GLFW視窗搭建

来源:http://www.cnblogs.com/feng-sc/archive/2016/01/01/5093262.html
-Advertisement-
Play Games

OpenGL視窗 能用於OpenGL的視窗庫有很多,常見的有glut、freeglut、SDL、GLFW等。glut基本已經被廢棄,其他幾個再不同場合都有不同的應用。 GLFW為opengl superbible 6th & 7th中推薦的第三方開源視窗庫。GLFW的特點大概總結如下: 跨平臺,能在...


概述

  本章節主要總結如何使用GLFW來創建Opengl視窗。主要包括如下內容:

OpenGL視窗創建介紹

  能用於OpenGL的視窗庫有很多,常見的有glut、freeglut、SDL、GLFW等。glut基本已經被廢棄,其他幾個再不同場合都有不同的應用。GLFW為opengl superbible 6th & 7th中推薦的第三方開源視窗庫。GLFW的特點大概總結如下

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

  下麵我們來實際看下使用GLFW的實際意義。

  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模擬器進行進行介紹。


 

  • 下載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庫;

  至此,編譯部分大致介紹完成,大家在實際編譯過程中可能會遇到其他問題,參考官網的介紹應該都能解決。

GLFW簡單工程源碼介紹

我們把GLFW編譯出來的庫和頭文件複製到我們的OpenGL ES VS工程中(當然也必須添加模擬器的Dll),如下為實例代碼:

#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;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 任務調度的使用1:設置任務。 crontab -e2:分配任務-每隔第一時間去執行 date > /home/mydata1 希望,每天凌晨兩點執行date >> /home/mydata2 可以在crontab -e中加入0 2 * * * date >> /home/mydata2調度文件的規則...
  • 本文主要內容:1)管程(Monitor)介紹;2)管程實現;3)管程應用
  • 1.批量創建10個用戶stu01-stu10,並且設置隨機8位密碼,要求不能用shell迴圈(例如:for,while等),只能用命令及管道實現。 1 ##方法1: 2 [root@server tmp]# echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#us...
  • 配置Samba 如果沒有普通用戶,添加用戶,指令: useradd -m aaa passwd bbb 添加Samba用戶指令: smbpasswd -a aaa passwdword: …… 修改配置文件/etc/samba/smb.conf[aaa] comment = aaa ...
  • 1.先上圖 下麵是tcpdump的源碼。顏色根據自己的喜好配置,我比較喜歡亮的顏色,看的清楚!2.下載輔助配置文件 首先,我們下載一個vim的插件xterm-color-table.vim,下載地址:http://www.vim.org/scripts/sc...
  • 1.前言 編譯linux內核失敗的原因很多時候就是驅動選錯,適合自己本機的驅動沒編譯進去。面對特殊平臺(或者有些潔癖者,我就是^_^),要編譯精簡內核,只要本機驅動,其他都不需要。面對內核裡面這麼多驅動,不懂硬體的我們,看到都頭大。本人第一次安裝gent...
  • 1. 配置SSH遠程登錄 root@kali:~ vi /etc/ssh/sshd_config \ PermitRootLogin without password PermitRootLogin yes root@kali:~ service ssh restart 2. 設置開...
  • 首先,確保lamp環境已安裝好。準備好項目源代碼,資料庫備份文件等。由於沒有安裝好VNC,因此只能用ssh部署了。 將項目源代碼壓縮,Linux預設是支持SFTP的,用SFTP將源代碼壓縮包上傳到 /var/www/html 目錄下。關於FTP軟體,我覺得可以使用Notepad++的NPPFt...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...