繁体   English   中英

避免纹理切换(openGL es 2.0)

[英]Avoiding texture switching (openGL es 2.0)

我正在为iOS开发小型2D渲染引擎。 我想渲染许多位于不同纹理的精灵。 现在听起来很简单...只需渲染属于同一纹理的所有精灵,然后移至下一个...但是如何处理具有不同纹理的图元的重叠呢?

问题

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

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;

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

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

使用正交投影,以使精灵在前进时不会变大或变小。 给每个精灵一个深度值,然后进行深度测试以删除不需要的精灵部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM