gpt4 book ai didi

OpenGL 为什么在相同数量的片段上重复纹理可能会降低性能?

转载 作者:行者123 更新时间:2023-12-01 12:13:16 27 4
gpt4 key购买 nike

我有一个单一大小的四边形,使用无缝纹理渲染并启用纹理重复。

对于纹理坐标,我从位置获取它。因此,我可以通过将纹理坐标乘以 N 倍来人为地提高纹理分辨率,这将使纹理在四边形上重复 N*N 次。

在我的代码中,我的纹理是一个法线贴图,在片段着色器中有镜面光计算。而且我注意到更多我乘以纹理坐标更多我的性能下降,但是似乎性能下降在某个值之后是恒定的(例如 N = 1024 和 N = 10240 之间没有区别)

我不明白的是,四边形大小保持不变,纹理大小相同,为什么乘以纹理坐标会使我在相同数量的片段上降低性能?

最佳答案

No mipmapping, I use GL_LINEAR for filtering for both min & mag filters.

当比例增加时,片段着色器中的相邻像素对应于纹理中相隔较远的纹素。使用 GL_LINEAR,这意味着纹素不仅在纹理中相距甚远,而且在内存中也相距甚远。

随着比例接近 1:1,片段着色器中的相邻像素将从同样靠近的纹素中获取。这意味着它们将在内存中靠近在一起,这意味着更好的内存局部性。这需要从内存中获取更少的内容。

Mipmapped 纹理没有这个问题,而且它们通常看起来也更好,因为它们没有您在 GL_LINEAR 缩小中看到的锯齿问题。

在CPU上模拟

CPU 在内存获取方面也有同样的问题。

float sum(float *arr, int size, int stride, int count) {
int pos = 0;
float sum = 0.0f;
for (int i = 0; i < count; i++) {
pos = (pos + stride) % size;
sum += arr[pos];
}
return sum;
}

随着 stride 的增加,性能会变差。发生这种情况的原因与您的片段着色器性能变差的原因相同,即使它发生在 CPU 上也是如此。

关于OpenGL 为什么在相同数量的片段上重复纹理可能会降低性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50251791/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com