GLSL:更有效地调用多个 sampler2D 变量的纹理
GLSL: More Efficient Call to texture For Multiple sampler2D Variables
我正在处理一个 LWJGL 项目,我正在使用混合贴图对我的地形进行纹理处理。这是一个非常简单的例子:
#version 400 core
in vec3 fsh_in_normal;
in vec2 fsh_in_coords;
in vec2 fsh_in_scaled;
out vec4 fsh_out_color;
uniform sampler2D blend_map;
uniform sampler2D texture_1;
uniform sampler2D texture_2;
void main(void) {
vec4 blend_vec = texture(blend_map, fsh_in_coords);
vec4 color_tx1 = texture(texture_1, fsh_in_scaled);
vec4 color_tx2 = texture(texture_2, fsh_in_scaled);
fsh_out_color = mix(color_tx1, color_tx2, blend_vec.r);
}
fsh_in_scaled
是 fsh_in_coords
的缩放版本,因此实际应用的纹理在屏幕上的分辨率更高。
现在我的问题是:texture_1
和 texture_2
具有相同的图像格式和大小 (512x512)。因此,当我使用相同的坐标对它们进行采样时,计算机是否会在每次调用 texture(...)
时进行相同的计算,直到纹理的颜色被实际采样为止?还是编译器会以某种方式自行优化?
如果不优化,有没有办法精简两次texture(...)
调用,让代码更高效?我确实计划在未来向混合贴图添加至少两个纹理,它们将具有与现有 texture_1
& texture_2
.
相同的尺寸和格式
纹理采样是通过硬件纹理单元完成的,因此无法进一步优化。纹理查找的主要成本是内存访问,因此您可以考虑 mipmaping 以避免缓存未命中。
我正在处理一个 LWJGL 项目,我正在使用混合贴图对我的地形进行纹理处理。这是一个非常简单的例子:
#version 400 core
in vec3 fsh_in_normal;
in vec2 fsh_in_coords;
in vec2 fsh_in_scaled;
out vec4 fsh_out_color;
uniform sampler2D blend_map;
uniform sampler2D texture_1;
uniform sampler2D texture_2;
void main(void) {
vec4 blend_vec = texture(blend_map, fsh_in_coords);
vec4 color_tx1 = texture(texture_1, fsh_in_scaled);
vec4 color_tx2 = texture(texture_2, fsh_in_scaled);
fsh_out_color = mix(color_tx1, color_tx2, blend_vec.r);
}
fsh_in_scaled
是 fsh_in_coords
的缩放版本,因此实际应用的纹理在屏幕上的分辨率更高。
现在我的问题是:texture_1
和 texture_2
具有相同的图像格式和大小 (512x512)。因此,当我使用相同的坐标对它们进行采样时,计算机是否会在每次调用 texture(...)
时进行相同的计算,直到纹理的颜色被实际采样为止?还是编译器会以某种方式自行优化?
如果不优化,有没有办法精简两次texture(...)
调用,让代码更高效?我确实计划在未来向混合贴图添加至少两个纹理,它们将具有与现有 texture_1
& texture_2
.
纹理采样是通过硬件纹理单元完成的,因此无法进一步优化。纹理查找的主要成本是内存访问,因此您可以考虑 mipmaping 以避免缓存未命中。