Je travaille sur un projet LWJGL et je suis en train de texturer mon terrain en utilisant une carte de mélange. Voici un exemple très simple:GLSL: Appel plus efficace à la texture pour plusieurs variables sampler2D
#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
est une version réduite de fsh_in_coords
de sorte que les textures appliquées réelles sont vues à une meilleure résolution à l'écran.
Maintenant, voici ma question: texture_1
et texture_2
ont des formats d'image et des tailles identiques (512x512). Donc, quand je les échantillonne avec les mêmes coordonnées, l'ordinateur ne fait-il pas des calculs identiques pour chaque appel à texture(...)
jusqu'à ce que la couleur de la texture soit réellement échantillonnée? Ou est-ce que le compilateur l'optimise d'une manière ou d'une autre?
S'il n'est pas optimisé, est-il possible de rationaliser les deux appels texture(...)
pour rendre le code plus efficace? J'ai l'intention d'ajouter au moins deux autres textures à la carte de mélange dans le futur et ils seraient de mêmes dimensions et le format que le texture_1
& texture_2
existant.
Le coût principal ici est l'extraction de texture réelle de la mémoire. Ne vous inquiétez pas à moins que votre fragment de shader ne soit assez lent (et mesurez-le!) Que vous devez accélérer. –
Existe-t-il un moyen de rendre les choses plus rapides? Même si cela n'a pas d'importance du tout, il serait toujours intéressant de savoir @DietrichEpp –
La première étape lorsque vous voulez faire quelque chose de plus rapide est de mesurer à quelle vitesse il est, et quelle est la partie lente. Commencez là. –