以下是一個性能較差的片段着色器。刪除條件分支似乎並沒有提高性能。只有150個多邊形,我在Kindle Fire上獲得10fps,在Galaxy S3上獲得20fps。有沒有想過要優化這個的最佳方式? iPad 2上的類似着色器運行30 + fps。關於具有8個紋理單元的opengl es多紋理着色器的想法
在下面的代碼中,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;
1.有這些if語句有什麼意義?這真的比單純乘法更快嗎? 2.刺傷黑暗:也許同一個變量的多重賦值不是最優的?有一個'Color1'和'Color2'並添加這些? – 2013-02-12 18:16:12