避免纹理切换(openGL es 2.0)

时间:2012-07-29 01:12:16

标签: ios opengl-es rendering glsl

我正在为IOS开发小型2d渲染引擎。我想渲染许多位于不同纹理中的精灵。现在听起来很简单......只需渲染属于相同纹理的所有精灵并移动到下一个...但是如何处理具有不同纹理的基元的重叠?

problem

我想以与图片完全相同的方式呈现它们(重叠)。这意味着我需要切换纹理三次。如果我有这种混合精灵的阴影怎么办?避免客户端上的纹理切换并一次性渲染所有精灵。我在片段着色器中使用以下代码:

if(txt >= 0.5)
    gl_FragColor = texture2D(texture1, texCoords)* clr;

if (txt >= 1.5)
    gl_FragColor = texture2D(texture2, texCoords)* clr;

if (txt >= 2.5)
    gl_FragColor= texture2D(texture3, texCoords)* clr;

if (txt >= 3.5)
    gl_FragColor = texture2D(texture4, texCoords)* clr;

if (txt >= 4.5)
    gl_FragColor = texture2D(texture5, texCoords) * clr;

由于动态分支,我在设备上运行性能问题。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

假设您有证据表明存在真正的性能问题(除非您这样做,否则不应该为此烦恼),解决方案非常简单:使用深度缓冲区。

使用正交投影,以便精灵在向前移动时不会变大或变小。给每个sprite一个深度值,然后让深度测试去掉不需要的sprite部分。