【发布时间】:2017-02-08 23:35:12
【问题描述】:
目前我正在实现一个字符串渲染算法,该算法基本上从纹理图集中采样纹素,四边形作为基础几何体。我必须在两种方法之间进行选择:
将字符串的每个字形呈现为单独的四边形。每个顶点都有一个位置和字体图集纹理坐标。片段着色器对图集进行采样,否则很简单。
将整个字符串渲染为一个四边形。顶点格式必须通过一点簿记信息(2 个浮点数)来扩展,并且片段着色器会获得一些额外的乘法。有大约 ca 的片段开销。 10%。
哪个可能更高效?
【问题讨论】:
-
为什么不尝试对两者进行基准测试呢?我能想到的是,第二种方法可能会失去一些性能,因为四边形不能并行绘制。
-
我的假设是 a) 发送到 gpu 的顶点数据量(必须每帧完成)较低(尽管我不知道这是否适用于 gles 和共享内存架构) 和 b) 片段仍然可以并行处理,对吧?
-
使用第二个选项,如何在片段着色器中查找正确的纹素?如果它引入了依赖纹理读取,那么这可能会在许多较旧的 OpenGLES 设备上造成很大的性能损失。根据经验,减少片段着色器工作通常是可行的方法,但测量是唯一确定的方法。
-
它在现有纹理的基础上增加了一种纹理读取。该设备支持 gles 3.1。
-
顺便说一句,使用带有分支的采样器数组会引入依赖纹理读取吗?这意味着,我使用 if-else 子句从几个采样器中选择一个来采样?