Интересно, есть ли более эффективный способ в (расширенном) GLSL для выполнения следующих действий:GLSL: самый эффективный способ сделать 4 отфильтрованных текстурные выборки, в 4 различных координатах текстуры, из 4-х различных каналов
float r_1 = texture(my_texture, uv_1).x;
float g_2 = texture(my_texture, uv_2).y;
float b_3 = texture(my_texture, uv_3).z;
float a_4 = texture(my_texture, uv_4).w;
vec4 col = vec4(r_1, g_2, b_3, a_4);
Обратите внимание, что координата uv отличается для каждого компонента (4 uv обычно близки друг к другу). Это 4 вида текстур, каждый из которых отбрасывает 3 возвращенных компонента, которые кажутся расточительными (и, да, есть узкое место вокруг этого, т. Е. Наличие единственного поиска текстуры() имеет заметную разницу в производительности по сравнению с 4 поисками) ,
Я вижу, что
gvec4 textureGatherOffsets(gsampler2D sampler, vec2 P, ivec2 offsets[4], [int comp]);
Который несколько движется в правильном направлении, но он возвращает отфильтрованные значения тексел и принимает только постоянные смещения ivec2.
Я предполагаю, что я искал что-то вроде
gvec4 TextureWithSeparateCoordinateForEachComponent(gsampler2D sampler, vec2 P[4]);
Есть ли что-то подобное в расширенном GLSL (или GLSL ES)?
// Редактировать: Это функция, которая может быть полезной для каждого приложения VR.
... зачем вам это нужно? –
Хроматическая аберрация – user1282931