簡體   English   中英

關於具有8個紋理單元的opengl es多紋理着色器的思考

[英]Thoughts on opengl es multitexture shader with 8 texture units

下面是性能不佳的片段着色器。 刪除條件分支似乎並不能提高性能。 僅用150個多邊形,我在Kindle Fire上獲得10fps的速度,在Galaxy S3上獲得20fps。 如果有的話,是否有最佳方法來進行優化? iPad 2上類似的着色器的運行速度為30 + fps。

在下面的代碼中,texture1到texture8綁定到八個紋理。 從頂點着色器傳遞VertexTexturesOut1和VertexTexturesOut2,其值介於0.0到1.0之間,以指示要混合的着色量。 想法是混合景觀紋理,以便草均勻地混合到泥土,岩石,沙子等中。

uniform sampler2D texture1;
uniform sampler2D texture2;
uniform sampler2D texture3;
uniform sampler2D texture4;
uniform sampler2D texture5;
uniform sampler2D texture6;
uniform sampler2D texture7;
uniform sampler2D texture8;

varying mediump vec2 TextureCoordOut;
varying lowp vec4 VertexTexturesOut1;
varying lowp vec4 VertexTexturesOut2;

...

    lowp vec4 Color = vec4( 0.0, 0.0, 0.0, 0.0);

    if (VertexTexturesOut1.x != 0.0) Color = Color + texture2D ( texture1, TextureCoordOut ) * VertexTexturesOut1.x;
    if (VertexTexturesOut1.y != 0.0) Color = Color + texture2D ( texture2, TextureCoordOut ) * VertexTexturesOut1.y;
    if (VertexTexturesOut1.z != 0.0) Color = Color + texture2D ( texture3, TextureCoordOut ) * VertexTexturesOut1.z;
    if (VertexTexturesOut1.w != 0.0) Color = Color + texture2D ( texture4, TextureCoordOut ) * VertexTexturesOut1.w;

    if (VertexTexturesOut2.x != 0.0) Color = Color + texture2D ( texture5, TextureCoordOut ) * VertexTexturesOut2.x;
    if (VertexTexturesOut2.y != 0.0) Color = Color + texture2D ( texture6, TextureCoordOut ) * VertexTexturesOut2.y;
    if (VertexTexturesOut2.z != 0.0) Color = Color + texture2D ( texture7, TextureCoordOut ) * VertexTexturesOut2.z;
    if (VertexTexturesOut2.w != 0.0) Color = Color + texture2D ( texture8, TextureCoordOut ) * VertexTexturesOut2.w;

    gl_FragColor = Color;    

在設計片段着色器時,您的着色器具有許多DONT。 您有許多條件語句,因此所有線程都需要始終等待扭曲(或批處理)中的所有其他線程。 您還將訪問8個紋理,這意味着您需要等待所有這些紋理查找(這也會浪費內存帶寬)。 使用任何優化工具,例如Adreno SDK,Mali SDK或您選擇的任何供應商,並在其優化工具中運行着色器,以發現GPU在哪里花費了更多時間。

您是否在使用完整的RGB888紋理? 一種

也許如果您告訴我們您要歸檔什么,我們可以考慮使用另一種解決方案而無需使用8個紋理查找。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM