GLSL:对多个sampler2D变量

时间:2017-07-18 17:30:45

标签: opengl glsl lwjgl

我正在研究一个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_scaledfsh_in_coords的缩放版本,因此在屏幕上以更好的分辨率显示实际应用的纹理。

现在我的问题是:texture_1texture_2具有相同的图片格式和尺寸(512x512)。因此,当我使用相同的坐标对它们进行采样时,计算机是否对每次调用texture(...)进行相同的计算,直到实际采样纹理的颜色为止?或者编译器是否以某种方式单独优化它?

如果没有进行优化,是否有办法简化两个texture(...)调用以提高代码效率?我计划将来在混合贴图中添加至少两个纹理,它们的尺寸和格式与现有texture_1&的尺寸和格式相同。 texture_2

1 个答案:

答案 0 :(得分:1)

纹理采样是通过硬件纹理单元完成的,因此无法进一步优化它。纹理查找的主要成本在于内存访问,因此您可以考虑使用mipmapping来避免缓存未命中。