Сначала я записал код ниже. При запуске на Nexus 6P производительность получала всего 1 FPS.
vec4 show(vec2 start[100], vec2 end[100], int n, float scale) {
vec4 color;
vec2 loc = v_TexCoordinate;
for (int i = 0; i < 4; i ++) {
loc = real_loc(start[i], end[i], scale, loc);
}
color = texture2D(u_TextureA, loc);
return (1.0 - abs(scale)) * color;
}
После этого я попытался изменить его, как показано ниже. Тогда производительность выросла до 60 FPS.
vec4 show(vec2 start[100], vec2 end[100], int n, float scale) {
vec4 color;
vec2 loc = v_TexCoordinate;
for (int i = 0; i < 3; i ++) {
loc = real_loc(start[i], end[i], scale, loc);
}
loc = real_loc(start[3], end[3], scale, loc);
color = texture2D(u_TextureA, loc);
return (1.0 - abs(scale)) * color;
}
Итак, мои вопросы:
1. Почему производительность так отличается?
2. Как написать высокопроизводительный код в GLSL? Я не могу развернуть все петли.
3. Как узнать, что компилятор действительно делает с моим кодом?