)如何在Windows下使用OpenGL 2.0的API(包括GLSL)

來源:互聯網
上載者:User
  

 

 

opengl版本太低

http://forum.ubuntu.com.cn/viewtopic.php?f=42&t=163346&view=previous

上面的文章是Ubuntu論壇的一個貼子,講述了opengl、mesa、和顯卡驅動的關係,不過我還是沒有看明白(暈啊)

【摘錄】OpenGL是一套國際標準,所謂國際標準,就是寫在紙面上的東西,而不是實際可用的東西。不過各大廠商會遵照這堆紙編寫他們的驅動程式中的OpenGL功能。即OpenGL是標準,驅動+ICD+OpenGL.dll是實現
Mesa3D是開源的OpenGL實現。
Mesa3D的核心功能是軟加速的,即所有的運算都由CPU來執行,寫屏使用Xlib,不幹顯卡加速的事。DRI是Mesa3D的一個組件,負責硬加速,在這裡被稱作直接渲染(Direct Rendering)。由於Mesa3D的當前的複雜結構,軟加速實現的功能不能替代直接渲染中沒有實現的功能。也就是說Mesa3D的核心和DRI各渲染各的。所以出現了Mesa3D稱已經實現了OpenGL2.1了,但是DRI驅動還在OpenGL1.3/1.4的緣故。
每次Mesa3D發布新版本的時候,都會有release note,其中一個重要部分就是Driver Status,裡面詳細提到了Mesa3D各個驅動當前的OpenGL支援狀態,一下是目前最新的Mesa3D-7.2的情況。
Driver Status

Driver Status
---------------------- ----------------------
DRI drivers varies with the driver
XMesa/GLX (on Xlib) implements OpenGL 2.1
OSMesa (off-screen) implements OpenGL 2.1
Windows/Win32 implements OpenGL 2.1
Glide (3dfx Voodoo1/2) implements OpenGL 1.3
SVGA unsupported
Wind River UGL unsupported
DJGPP unsupported
GGI unsupported
BeOS unsupported
Allegro unsupported
D3D unsupported

其中DRI表示的是varies with the driver,所以DRI組件中對各個顯卡的支援情況各有不同,intel的,到7.2,是支援到OpenGL1.4

/////////////////////////////////////////////////////////////

如何在Windows下使用OpenGL 2.0的API(包括GLSL)

http://bbs.gameres.com/showthread.asp?threadid=109485

先簡單的說我所知道的opengl在windows下的開發方式:

1、使用windows內建的opengl1.1+ glut(需要自己編譯 )或者其他的glut增強版人freeglut、openglut

2、使用mesa

3、使用windows內建的opengl1.1+   glut + glew進行擴充

在windows下配置mesa實現的opengl有些注意事項:

首先,你要到www.mesa3d.org下載來源程式包,一般要用到兩個包mesaLib.zip和mesaGLUT.zip。值得一題的是,和許多開源項目一樣,Mesa3D也只是提供了原始碼,並沒有提供直接可用的二進位檔案,使用者需要重新編譯原始碼來的到可以使用的二進位檔案。下載完成之後,把兩個包放在同一個目錄下面,直接選擇“解壓到目前的目錄...”來解壓兩個包,預設情況下,兩個包被解壓到了同一個檔案夾下面(比如,Mesa-7.0.3)。然後,按照“/Mesa-7.0.3/windows/VC8”路徑找到Visual Studio 2005的解決方案檔案(mesa.sln)。開啟它,發現這個解決方案中有好多工程(一般是4個,gdi、glu、mesa、osmesa),什麼設定也不用修改(預設是Debug目標,而不是Release,千萬不要修改),直接分別在右邊的“方案總管”中按右鍵各個工程項,選擇“產生”。等待所有的工程都產生成功之後你可以從“/Mesa-7.0.3/lib”這個路徑下面得到3個DLL檔案(opengl32.dll、glu32.dll、osmesa32.dll)和對應的庫檔案(*.lib)。同樣在“/Mesa-7.0.3/windows/VC8/progs/glut”路徑下面,你可找到GLUT的工程檔案(glut.vcproj),依照同樣的方法,產生GLUT工程。之後可以在“/Mesa-7.0.3/lib”這個路徑下找到glut32.dll以及相應的庫檔案。

好了OpenGL 2.0的DLL和相應的庫檔案就全都得到了。編程的時候所需的所有標頭檔可以在“Mesa-7.0.3/include”這個路徑下找到(或者你乾脆就把這個目錄設定成Visual Studio的include搜尋目錄)。

這裡需要注意一點,由於編程時要對gl.h、glu.h等標頭檔進行#include進行引用,這些標頭檔會和Visual Studio中內建的gl.h、glu.h等標頭檔衝突,所以最好刪除Visual Studio中的相應檔案(建議對這些檔案備份);同理,Visual Studio中的opengl32.lib檔案也要刪掉(建議備份)。

 

我自己添加的:

或者還有另外一種方法,在設定環境變數的時候,將mesa的include、lib、path添加到系統的include、lib、path的前面,參考我下面的

// mesa(opengl另外的一個實現).bat

@echo off

echo 設定Mesa(OpenGL的非官方實現)環境變數
echo 注意:
echo    -- 由於windows系統內建了1.1opengl的實現
echo    -- 在windows sdk的include目錄下有gl.h和glu.h
echo    -- 以及system32目錄下的opengl32.dll和glu32.dll
echo    -- 因此,需要將mesa的include、lib、path添加到系統path的前面,
echo    -- 否則的話,編譯會出現錯誤

set MESA_DIR=D:/program/Mesa/Mesa-7.4.2

rem 已經將D:/program/Mesa/Mesa-7.4.2/bin加入到了使用者的path環境變數中
rem windows搜尋path路徑時,先從使用者path搜尋,然後在搜尋系統的path,
rem 因此,mesa的dll總是在windows的opengl32.dll和glu32.dll之前搜尋到
rem set path=D:/program/Mesa/Mesa-7.4.2/bin;%path%

set include=%MESA_DIR%/include;%include%

rem 不包含debug版本,已經編譯了debug版本,
rem 不過我看它的demo沒有連結debug版本的lib和dll

set lib=%MESA_DIR%/lib;%lib%

根據上面引用的文章的內容,很多人認為mesa在windows下比d3d慢,有幾種說法:

1、在windows下的opengl開發就使用windows內建的1.1版本的opengl實現,如果要使用opengl2.0、2.1或者更高版本的opengl,則可以用擴充技術,但是這需要顯卡驅動的支援,並且不能跨平台

2、使用glew。這個庫對不同的opengl擴充進行了統一的封裝

3、直接使用windows的d3d或者managed d3d(.net版本的d3d)

4、mesa在linux上更加適合,且效能不比d3d在windows上的效能差,也就是說mesa不適合於windows

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.