Качественное смешивание текстур
Тогда можно использовать 128-битный формат текстур и каждый раз менять альфу, но данный подход оказывается слишком медленным.
Возможно ли решить поставленную задачу?
Размеры картинок удобные, кратные 2-ке. Хотя потребуются дополнительные телодвижения с получением смикшированного изображения текстур из видеопамяти обратно, что скажется на скорости. Хотя, как я понял, скорость здесь не критична.
Такой вариант подходит? Если да, то могу кинуть вариантик решения, не сразу правда. ;)
Решение в итоге было принято такое: из всех изображений составлялась одна volume-текстура, все коэффициенты загонялись в одномерную текстуру. Непосредственно сложение производилось в цикле в пиксельном шейдере.
Итого это есть перемножение матрицы на вектор (набор исходных текстур - строки матрицы, коэффициенты - столбец). Далее была предпринята попытка обобщить данную процедуру на случай матриц произвольного размера, в конкретном случае примерно 15000 x 50 и 50 x 15000. В первом случае проблему ограничение размера текстуры (у меня 2048) решилась просто: разбиваем матрицу на вертикальные куски и перемножаем несколько раз. Но со вторым возникли проблемы: на данный момент существует аппаратное ограничение на длину цикла - 256, и поэтому накладные расходы вносят ощутимый вклад в быстродействие (около 60 групп операций нарисовать и lock/unlock на одно перемножение). Дальше есть вариант много раз вызывать непосредственно рисование, "дописывая" результат в результирующую текстуру, но при этом необходимо использовать 32-битный blending, что, на сколько я знаю, поддерживается только 8-й серией GeForce. Поэтому пока небольшой стопор.
Забыл добавить: скорость критична, иначе бы можно было спокойно это сделать на CPU