|
|
1
19
(我知道现在已经很晚了,但我还是忍不住。我还是会发帖的,以防其他人来这里寻求建议。) 这与纹理大小无关。我不知道为什么人们给零分。他似乎对OpenGL管道有一个根本性的误解。他似乎认为,对于给定的三角形,整个纹理被加载并映射到该三角形上。事实恰恰相反。 将三角形映射到视口后,将对其进行栅格化。对于三角形覆盖的每个屏幕像素,称为片段着色器。默认的片段着色器(您正在使用的OpenGL ES 1.1)将查找与正在绘制的像素最接近(GL_最接近)的纹理。它可能会查找4个texel,因为您正在使用更高质量的GL_线性方法来平均最佳texel。尽管如此,如果三角形中的像素数是,比如说100,那么你需要读取的最多纹理字节数是4(查找)*100(像素)*4(每种颜色的字节数)。远低于Nils所说的。令人惊讶的是,他能让人觉得他真的知道自己在说什么。 在平铺体系结构中,这在嵌入式OpenGL设备中很常见,以保持引用的局部性。我相信每个瓷砖都会暴露在每个绘图操作中,很快就会剔除其中的大部分。然后瓷砖决定自己画什么。这将是慢得多,当你有混合打开,因为你这样做。因为您使用的是可能与其他瓷砖重叠和混合的大三角形,所以GPU必须做大量额外的工作。如果不使用alpha边渲染示例正方形,而是渲染实际形状(而不是形状的方形图片),则可以关闭场景这一部分的混合,我打赌这将大大加快速度。 如果你想试试,只需关闭混合,看看速度有多快,即使看起来不对劲。glDisable(GLU混合); |
|
|
2
3
你的纹理是每像素512*512*4字节。这是一兆字节的数据。如果每帧渲染200次,则每帧生成200兆字节的带宽负载。 仅对于纹理读取,大约4fps的速度就消耗800mb/秒。帧写入和Zbuffer写入也需要带宽。还有CPU,不要低估显示器的带宽要求。 嵌入式系统(如iphone)上的RAM速度不如台式PC上的快。您在这里看到的是带宽不足效应。RAM根本无法更快地处理数据。 如何解决这个问题:
|
|
|
3
2
iPhone有一个PowerVR MBX Lite,它有一个基于平铺的图形处理器。它将屏幕细分为较小的平铺,并将其平行渲染。现在,在第一种情况下,上面的细分可能会有点疲惫,因为重叠非常高。此外,由于距离相同,它们无法被剪裁,因此必须计算所有纹理坐标(这可以通过更改循环中的平移来轻松测试)。 另外,由于重叠,并行性无法被利用,一些瓦片什么也不做,其余的(1/3)工作很多。 所以我认为,虽然内存带宽可能是一个瓶颈,但本例中并非如此。问题更多的是因为图形硬件的工作方式和测试的设置。 |
|
|
4
0
我不熟悉iPhone,但如果它没有处理浮点数字的专用硬件(我怀疑它没有),那么尽可能使用整数会更快。
|
|
|
5
0
|
|
|
pats · 在Libgdx中定位和旋转动画 8 年前 |
|
|
harryisaac · SceneKit自定义几何体纹理错误 8 年前 |
|
|
user8581488 · OpenGL ES3阴影贴图问题 8 年前 |