不同顯卡對mrt 的支持


ios bits限制大概512bits 低端256bits

mali 也是bits限制 2017年 Mali-T760 128bits

adreno

android顯卡4 肯定可以 因為deferred 里面 shadowmask放第五張

這樣有些機型不支持 我記得unity里面有判斷的UNITY_ALLOWED_MRT_COUNT

它是這樣定義的

#if (defined(SHADER_API_GLES3) && !defined(SHADER_API_DESKTOP)) || defined(SHADER_API_GLES) || defined(SHADER_API_N3DS)
#define UNITY_ALLOWED_MRT_COUNT 4
#else
#define UNITY_ALLOWED_MRT_COUNT 8
#endif

SHADER_API_GLES OpenGL ES 2.0

SHADER_API_GLES3 OpenGL ES 3.0/3.1

看這意思 在mobile上 mrt個數限制只跟 opengles2 3 這樣有關係

3.2之前都是4 如果3.2包在SHADER_API_GLES3里 那android都只能4張rt。。。。

它這代碼寫的真有意思ogles2不支持mrt吧。。。它還開四張rt干嘛?(有些硬件廠商用擴展給自己的ogles2加了 mrt。。。)

 

gl_MaxDrawBuffers—The maximum number of multiple render targets (MRTs) supported. The minimum value supported by all ES 3.0 implementations is 4

Page285  OpenglES 3.0 Programming Guide 

 

ogles2.0不支持mrt gl_MaxDrawBuffers=1

ogles3.0/3.1支持mrt gl_MaxDrawBuffers=4

ogles3.2 

gl_MaxDrawBuffers

GL_MAX_DRAW_BUFFERS

GL_MAX_COLOR_ATTACHMENTS

https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawBuffers.xhtml

可以query

 

http://web.eecs.umich.edu/~sugih/courses/eecs487/common/notes/APITables.xml

https://www.khronos.org/registry/OpenGL/index_gl.php

寶貝

https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_draw_buffers.txt

有很多drawbuffers的擴展 各個平台

有個相關擴展

 GL_NV_fbo_color_attachments

我不得不說 android上真亂

看來ogles上用的時候就是query一下。。所以盡量用4張。。。就不用這么麻煩了 像shadowmask就是放在第五張 不支持mrts>8的就 沒這個功能了

我准備用4張!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM