Unity-OpenGL Core
OpenGL Core 是可支持 Windows、MacOS X 和 Linux 平臺(tái)最新 OpenGL 功能的后端。這包括從 OpenGL 3.2 到 OpenGL 4.5,具體取決于 OpenGL 驅(qū)動(dòng)程序支持情況。
啟用 OpenGL Core
要將 OpenGL Core 設(shè)置為 Editor 或獨(dú)立平臺(tái)播放器中的默認(rèn)圖形 API,請(qǐng)選擇?Player?設(shè)置(菜單:__Edit > Project Settings__,然后選擇?Player?類別),并導(dǎo)航到?Other Settings。禁用?Auto Graphics API for Windows?屬性,并從列表中選擇?OpenGLCore。有關(guān)更多詳細(xì)信息,請(qǐng)參閱[圖形 API 支持](Graphics APIs)。
OpenGL 要求
OpenGL Core 的最低要求如下:
Mac OS X 10.8 (OpenGL 3.2)、MacOSX 10.9(OpenGL 3.2 到 4.1)
Windows 搭載 NVIDIA 最低 2006 (GeForce 8)、AMD 最低 2006 (Radeon HD 2000)、Intel 最低 2012 (HD 4000 / IvyBridge)(OpenGL 3.2 到 OpenGL 4.5)
Linux(OpenGL 3.2 到 OpenGL 4.5)
macOS OpenGL 驅(qū)動(dòng)程序限制
用于 Editor 和獨(dú)立平臺(tái)的 macOS OpenGL 后端支持 OpenGL 3.x 和 4.x 功能,如曲面細(xì)分和幾何著色器。
但是,由于 Apple 將 OS X 桌面上的 OpenGL 版本限制為最高 4.1,因此并不支持所有 DirectX 11 功能(例如無(wú)序訪問視圖或計(jì)算著色器)。這意味著,以著色器級(jí)別 5.0 為目標(biāo)(包含 #pragma 目標(biāo) 50)的所有著色器將無(wú)法在 OS X 上加載。
因此引入了新的著色器目標(biāo)級(jí)別:#pragma 目標(biāo) gl4.1。此目標(biāo)級(jí)別至少需要 OpenGL 4.1 或 DirectX 11.0 著色器級(jí)別 5(桌面端)或 OpenGL ES 3.1 + Android 擴(kuò)展包(移動(dòng)端)。
OpenGL Core 功能
新的 OpenGL 后端引入了許多新功能(以前主要是 DX11/GLES3):
計(jì)算著色器(以及 ComputeBuffer 和“隨機(jī)寫入”渲染紋理)
曲面細(xì)分和幾何著色器
間接繪制(Graphics.DrawProcedural 和 Graphics.DrawProceduralIndirect)
高級(jí)混合模式
著色器更改
使用現(xiàn)有?#pragma?目標(biāo)時(shí),它們會(huì)映射到以下 GL 級(jí)別:
#pragma 目標(biāo) 4.0 // OpenGL ES 3.1、桌面版 OpenGL 3.x、DX Shader Model 4.0
#pragma 目標(biāo) gl4.1 // 桌面版 OpenGL 4.1、SM 4.0 + 曲面細(xì)分(匹配 MacOSX 10.9 功能)
#pragma 目標(biāo) 5.0 // OpenGL ES 3.1 + Android 擴(kuò)展包、桌面版 OpenGL >= 4.2、DX Shader Model 5.0
要讓著色器平臺(tái)使用或不使用特定著色器,可使用以下?#pragma?only_renderers / exclude_renderers 目標(biāo):
#pragma only_renderers glcore:僅針對(duì)桌面版 GL 進(jìn)行編譯。與 ES 3 目標(biāo)一樣,這也可擴(kuò)展到包含所有桌面 GL 版本,這些版本中的基本著色器將支持 GL 2.x,而需要 SM5.0 功能的著色器需要 OpenGL 4.2+。
OpenGL Core 配置文件命令行參數(shù)
可使用命令行參數(shù)通過 OpenGL 啟動(dòng) Editor 或播放器:
-force-opengl:使用舊版 OpenGL 后端
-force-glcore:使用新版 OpenGL 后端。通過使用此參數(shù),Unity 將檢測(cè)平臺(tái)支持的所有功能,從而在運(yùn)行時(shí)使用可能最好的 OpenGL 版本和所有可用的 OpenGL 擴(kuò)展
-force-glcoreXY:XY 可以是 32、33、40、41、42、43、44 或 45;每個(gè)數(shù)字代表 OpenGL 的特定版本。如果平臺(tái)不支持 OpenGL 的特定版本,Unity 將回退到支持的版本
-force-clamped:請(qǐng)求 Unity 不使用 OpenGL 擴(kuò)展,這樣可確保多個(gè)平臺(tái)將執(zhí)行相同的代碼路徑。這是一種測(cè)試某個(gè)問題是否特定于平臺(tái)(例如驅(qū)動(dòng)程序錯(cuò)誤)的方法。
原生 OpenGL ES 桌面版命令行參數(shù)
OpenGL ES 圖形 API 適用于配備了 Intel 或 NVIDIA GPU 且驅(qū)動(dòng)程序支持 OpenGL ES 的 Windows 機(jī)器。
-force-gles:在 OpenGL ES 模式下使用新版 OpenGL 后端。通過使用此參數(shù),Unity 將檢測(cè)平臺(tái)支持的所有功能,從而在運(yùn)行時(shí)使用可能最好的 OpenGL ES 版本和所有可用的 OpenGL ES 擴(kuò)展
-force-glesXY:XY 可以是 20、30、31、31aep 或 3.2;每個(gè)數(shù)字代表 OpenGL ES 的特定版本。如果平臺(tái)不支持 OpenGL ES 的特定版本,Unity 將回退到支持的版本。如果平臺(tái)不支持 OpenGL ES,Unity 將回退到另一個(gè)圖形 API。
-force-clamped:請(qǐng)求 Unity 不使用 OpenGL 擴(kuò)展,這樣可確保多個(gè)平臺(tái)將執(zhí)行相同的代碼路徑。這是一種測(cè)試某個(gè)問題是否特定于平臺(tái)(例如驅(qū)動(dòng)程序錯(cuò)誤)的方法。