Форум: "Начинающим";
Текущий архив: 2011.05.01;
Скачать: [xml.tar.bz2];
ВнизПомогите оптимизировать не большой код Найти похожие ветки
← →
RWolf © (2011-01-26 14:55) [40]
> Slym © (26.01.11 14:29) [38]
> 2. регистры 64 битные т.е. в пакет по 4 пикселя 16бит, 3 24бит и 2 32бит.
тоже верно :) 510 fps.
← →
novai (2011-01-26 14:56) [41]я смотрю, вы тут фпс"ами меряетесь?)
← →
Slym © (2011-01-26 15:00) [42]24 битный вариант с развернутым циклом
procedure Fade24(Bitmap:TBitmap;const Value:integer);
label ll;
var
y,lp:integer;
p:pointer;
begin
if Bitmap.PixelFormat<>pf24bit then exit;
asm
mov eax,Value
and eax, $ff
movd mm0,eax
punpcklbw mm0, mm0
punpcklwd mm0, mm0
punpckldq mm0, mm0
end;
for y:= 0 to Bitmap.Height - 1 do
begin
p:=Bitmap.ScanLine[y];
lp:=Bitmap.Width div 16;// 8*6 в байтах = 16 в пикселях
asm
push ecx
push edi
mov ecx,lp
mov edi,p
ll:
movq mm1,[edi]
movq mm2,[edi+8]
movq mm3,[edi+16]
movq mm4,[edi+24]
movq mm5,[edi+32]
movq mm6,[edi+40]
psubusb mm1,mm0
psubusb mm2,mm0
psubusb mm3,mm0
psubusb mm4,mm0
psubusb mm5,mm0
psubusb mm6,mm0
movq [edi] ,mm1
movq [edi+8] ,mm2
movq [edi+16],mm3
movq [edi+24],mm4
movq [edi+32],mm5
movq [edi+40],mm6
add edi,48
loop ll
pop edi
pop ecx
end;
end;
asm
EMMS
end;
end;
← →
Slym © (2011-01-26 15:05) [43]все мои варианты без обработки хвостов!
вариант Slym © (26.01.11 15:00) [42] выравнивается на 16 пикселей, т.е. хвостовые пиксели (Bitmap.Width mod 16) нужно допиливать вручную
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.05.01;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.005 c