Я пытаюсь оптимизировать скорость шейдера для старых устройств на Android и iOS. Очевидно, что я мог проверить это на отдельных устройствах, но меня больше интересует общая производительность моей игры на всех платформах. У меня есть две функции, которые используются для получения оценочного значения в спектре, основанного на процентах.
float wave(float pos)
{
float frac = mod(pos, 1.0);
float val1 = mod(floor(pos), 6.0);
float val2 = mod(val1 + 1.0, 6.0);
return floor(val1 / 3.0) * (1.0 - frac) + floor(val2 / 3.0) * frac;
}
vec3 spectrum(float percent)
{
float wave_pos = percent * 6.;
float r = wave(wave_pos);
float g = wave(wave_pos + 2.);
float b = wave(wave_pos + 4.);
return vec3(r,g,b);
}
Я подумывал заменить его на 1D-текстуру поиска. Это будет обрабатывать и линейную интерполяцию. Я знаю, что поиск текстуры случайного местоположения не всегда оптимизирован на старых устройствах. Как видите, он заменит около 18 вызовов встроенных функций, а также 13 умножений. Это обычно считается хорошей практикой?