微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OpenGL-实例化-处理大量纹理此处约为6000

如何解决OpenGL-实例化-处理大量纹理此处约为6000

好吧,我遇到以下情况:给定一个在规范化设备坐标中包含500x350 2D正方形的网格,我在沿xy坐标的正投影中进行渲染。由于这些四边形中的每一个都有相同的顶点数据,因此我使用“增量渲染”技术进行此操作。为此,我还为每个四边形创建了一个转换矩阵,并将mat4声明为顶点属性,以便可以存储这些矩阵。

效果很好,但是现在必须将纹理应用于四边形。为此,我选择了5964个单独的纹理。每个四边形可以查询这些纹理之一。无需实例化就没有问题,因为我每次都必须为四边形绑定正确的纹理,仅此而已。只有这样,帧频才非常糟糕。

所以我尝试了这个:

  1. OpenGL无绑定纹理。我为每个5964纹理创建了一个Handle。可以在渲染之前将整个手柄置于常驻状态。 Pro:我可以继续使用Instancing进行渲染,而只需为所有实例提供对正确Handle的引用。简单快捷。缺点:可以使用5964个手柄,但是我只能使其中的1000个驻留。所以那行不通。

  2. OpenGL纹理数组:由于我的所有纹理在y方向上都可以具有不同的大小,所以并不是那么容易,但是可以。我调整纹理坐标。但是,数组的2048限制仍然是这里的问题。我为将近6000个纹理创建了三个纹理数组,其中两个具有2000个纹理,第三个具有其余的纹理。现在,我使用所有四边形实例进行三个渲染遍历,并预先绑定其中一个纹理数组。这可以合理的速度运行,但是现在渲染通道相互覆盖。因此,图像的某些部分将被后续的渲染过程覆盖。

我的第一个问题是如何防止覆盖-在三个渲染通道上。这里有人有什么想法吗?

其次:普遍需求。我对这里的代码不感兴趣,而只是想法。有我忽略的OpenGL技术吗?您如何处理如此大量的纹理?我不能一个一个地渲染所有四边形,然后先绑定纹理。太慢了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。