|
|
|
Supreme Being
      
участник
Last Login: 14.05.2008 23:42
Сообщ.: 121,
Visits: 2 333
|
|
| Привет. Делаю программное альфа наложение в DDRAW1 (аппаратное недоступно). Пытаюсь оптимизировать алгоритм наложения двух изображений глубиной 32 бита (24-битный цвет, 4 байт - альфа канал). Вроде бы с изначально заготовленной таблицей значений цветов: BYTE Tab[256][256][256];//what a huge table! for(int a=0; a<256; ++a) for(int d=0; d<256; ++d) for(int s=0; s<256; ++s) Tab[a][d][s] = (BYTE)(s*a/255.+d*(255-a)/255.); работает быстрее, чем с реальным просчетом: DestCol = DestCol*Alpha/255 + SourceCol*(255-Alpha)/255 Формулу, конечно, можно оптимизировать: DestCol = (DestCol*Alpha + SourceCol*(~Alpha))/255, но, все равно, считать дольше, чем адресовать цвет из таблицы. Вроде бы оптимизировал адресацию с помощью ассемблерных вставок. Но работает не намного быстрее C++-эквивалента. Куда еще больше оптимизировать, незнаю. Может быть кто-то делал такое, или, может быть, не стоит пытаться - все равно тормоза жесткие будут?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 14.05.2008 23:42
Сообщ.: 121,
Visits: 2 333
|
|
точнее, даже так DestCol = (DestCol*Alpha + SourceCol*((BYTE)~Alpha))>>8тормозит :(
|
|
|
|
|
новичок
      
участник
Last Login: 28.08.2006 19:27
Сообщ.: 8,
Visits: 12
|
|
John Paramol (22.05.2006) Привет.
Делаю программное альфа наложение в DDRAW1 (аппаратное недоступно). Пытаюсь оптимизировать алгоритм наложения двух изображений глубиной 32 бита (24-битный цвет, 4 байт - альфа канал).
Вроде бы с изначально заготовленной таблицей значений цветов:
BYTE Tab[256][256][256];//what a huge table!
for(int a=0; a<256; ++a)
for(int d=0; d<256; ++d)
for(int s=0; s<256; ++s)
Tab[a][d][s] = (BYTE)(s*a/255.+d*(255-a)/255.);
работает быстрее, чем с реальным просчетом:
DestCol = DestCol*Alpha/255 + SourceCol*(255-Alpha)/255
Формулу, конечно, можно оптимизировать:
DestCol = (DestCol*Alpha + SourceCol*(~Alpha))/255,
но, все равно, считать дольше, чем адресовать цвет из таблицы.
Вроде бы оптимизировал адресацию с помощью ассемблерных вставок. Но работает не намного быстрее C++-эквивалента.
Куда еще больше оптимизировать, незнаю. Может быть кто-то делал такое, или, может быть, не стоит пытаться - все равно тормоза жесткие будут?
Офигеть...
|
|
|
|
|
Supreme Being
      
участник
Last Login: 14.05.2008 23:42
Сообщ.: 121,
Visits: 2 333
|
|
| Миша, пока ты офигевал, я давно уже решил проблему
|
|
|
|