forked from KolibriOS/kolibrios
add new function 'buf2d_flip_h' & optimizations
git-svn-id: svn://kolibrios.org@5389 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
4cce570333
commit
8ec9e02040
@ -59,9 +59,16 @@ table { font-size: 15px; }
|
|||||||
<li><a href="#f_b_draw">buf2d_draw</a></li>
|
<li><a href="#f_b_draw">buf2d_draw</a></li>
|
||||||
<li><a href="#f_b_delete">buf2d_delete</a></li>
|
<li><a href="#f_b_delete">buf2d_delete</a></li>
|
||||||
<li><a href="#f_b_rotate">buf2d_rotate</a></li>
|
<li><a href="#f_b_rotate">buf2d_rotate</a></li>
|
||||||
|
<li><a href="#f_b_resize">buf2d_resize</a></li>
|
||||||
|
<li><a href="#f_b_line">buf2d_line</a></li>
|
||||||
|
<li><a href="#f_b_line_sm">buf2d_line_sm</a></li>
|
||||||
|
<li><a href="#f_b_rect">buf2d_rect_by_size</a></li>
|
||||||
|
<li><a href="#f_b_fil_rect">buf2d_filled_rect_by_size</a></li>
|
||||||
|
<li><a href="#f_b_circle">buf2d_circle</a></li>
|
||||||
<li><a href="#f_b_hdiv2">buf2d_img_hdiv2</a></li>
|
<li><a href="#f_b_hdiv2">buf2d_img_hdiv2</a></li>
|
||||||
<li><a href="#f_b_wdiv2">buf2d_img_wdiv2</a></li>
|
<li><a href="#f_b_wdiv2">buf2d_img_wdiv2</a></li>
|
||||||
<li><a href="#f_c_color">buf2d_crop_color</a></li>
|
<li><a href="#f_c_color">buf2d_crop_color</a></li>
|
||||||
|
<li><a href="#f_flip_h">buf2d_flip_h</a></li>
|
||||||
<li><a href="#f_flip_v">buf2d_flip_v</a></li>
|
<li><a href="#f_flip_v">buf2d_flip_v</a></li>
|
||||||
<li><a href="#f_filter_d">buf2d_filter_dither</a></li>
|
<li><a href="#f_filter_d">buf2d_filter_dither</a></li>
|
||||||
|
|
||||||
@ -81,7 +88,7 @@ table { font-size: 15px; }
|
|||||||
Есть функции рисования линий, кривых Безье, прямоугольников, окружностей.
|
Есть функции рисования линий, кривых Безье, прямоугольников, окружностей.
|
||||||
Также есть функции для рисований воксельной графики.</p>
|
Также есть функции для рисований воксельной графики.</p>
|
||||||
|
|
||||||
<p>Последнее обновление библиотеки 15.11.12.</p>
|
<p>Ďîńëĺäíĺĺ îáíîâëĺíčĺ áčáëčîňĺęč 30.01.15.</p>
|
||||||
|
|
||||||
<h1><a name="format_buf">Форматы буферов</a></h1>
|
<h1><a name="format_buf">Форматы буферов</a></h1>
|
||||||
<p>Поддерживается 3 формата буферов.
|
<p>Поддерживается 3 формата буферов.
|
||||||
@ -139,31 +146,31 @@ stdcall [buf2d_clear], edi, buf2d_color ;
|
|||||||
<pre>stdcall [buf2d_rotate], buf_0, 90</pre>
|
<pre>stdcall [buf2d_rotate], buf_0, 90</pre>
|
||||||
<p>где buf_0 - структура буфера (может быть 8, 24 или 32 битным); 90 - угол поворота.</p>
|
<p>где buf_0 - структура буфера (может быть 8, 24 или 32 битным); 90 - угол поворота.</p>
|
||||||
|
|
||||||
<h4>buf2d_resize</h4>
|
<h4><a name="f_b_resize">buf2d_resize</a></h4>
|
||||||
<p>Изменяет размеры буфера. Пока поддерживаются буфера с глубиной цвета 24 бита. Пример:</p>
|
<p>Изменяет размеры буфера. Пока поддерживаются буфера с глубиной цвета 24 бита. Пример:</p>
|
||||||
<pre>stdcall [buf2d_resize], buf_0, 0,300 ;изменяем высоту буфера</pre>
|
<pre>stdcall [buf2d_resize], buf_0, 0,300 ;изменяем высоту буфера</pre>
|
||||||
<p>где buf_0 - структура буфера в котором будет рисоваться линия; 0 - новая ширина буфера (0 означает не изменять размер); 300 - новая высота буфера.</p>
|
<p>где buf_0 - структура буфера в котором будет рисоваться линия; 0 - новая ширина буфера (0 означает не изменять размер); 300 - новая высота буфера.</p>
|
||||||
|
|
||||||
<h4>buf2d_line</h4>
|
<h4><a name="f_b_line">buf2d_line</a></h4>
|
||||||
<p>Рисует в буфере линию с заданным цветом и координатами. Пример:</p>
|
<p>Рисует в буфере линию с заданным цветом и координатами. Пример:</p>
|
||||||
<pre>stdcall [buf2d_line], buf_0, 30,10, 110,70, 0xffff00 ;рисуем линию</pre>
|
<pre>stdcall [buf2d_line], buf_0, 30,10, 110,70, 0xffff00 ;рисуем линию</pre>
|
||||||
<p>где buf_0 - структура буфера в котором будет рисоваться линия; 30, 10, 110, 70 - координаты линии; 0xffff00 - цвет линии.</p>
|
<p>где buf_0 - структура буфера в котором будет рисоваться линия; 30, 10, 110, 70 - координаты линии; 0xffff00 - цвет линии.</p>
|
||||||
<p>Для рисования сглаженной линии используйте <b>buf2d_line_sm</b>.</p>
|
<p>Для рисования сглаженной линии используйте <b>buf2d_line_sm</b>.</p>
|
||||||
|
|
||||||
<h4>buf2d_line_sm</h4>
|
<h4><a name="f_b_line_sm">buf2d_line_sm</a></h4>
|
||||||
<p>Рисует в буфере линию принимает такиже параметры как и функция <b>buf2d_line</b>. Данная функция рисует сглаженную линию более красивую чем <b>buf2d_line</b>, но работает медленнее неё за счет вычисления смешанных цветов фона и самой линии.</p>
|
<p>Рисует в буфере линию принимает такиже параметры как и функция <b>buf2d_line</b>. Данная функция рисует сглаженную линию более красивую чем <b>buf2d_line</b>, но работает медленнее неё за счет вычисления смешанных цветов фона и самой линии.</p>
|
||||||
|
|
||||||
<h4>buf2d_rect_by_size</h4>
|
<h4><a name="f_b_rect">buf2d_rect_by_size</a></h4>
|
||||||
<p>Рисует прямоугольную рамку, по двум координатам, 2-я координата задана по размеру. Если размеры отрицательные рамка рисуется в обратном направлении.</p>
|
<p>Рисует прямоугольную рамку, по двум координатам, 2-я координата задана по размеру. Если размеры отрицательные рамка рисуется в обратном направлении.</p>
|
||||||
<pre>stdcall [buf2d_rect_by_size], buf_0, 10,10,150,100, 0x8080</pre>
|
<pre>stdcall [buf2d_rect_by_size], buf_0, 10,10,150,100, 0x8080</pre>
|
||||||
<p>где buf_0 - структура буфера в котором будет рисоваться прямоугольник; 10, 10 - координаты левого верхнего угла (при отрицательных размерах координата правого нижнего); 150, 100 - размер прямоугольника; 0x8080 - цвет линии.</p>
|
<p>где buf_0 - структура буфера в котором будет рисоваться прямоугольник; 10, 10 - координаты левого верхнего угла (при отрицательных размерах координата правого нижнего); 150, 100 - размер прямоугольника; 0x8080 - цвет линии.</p>
|
||||||
|
|
||||||
<h4>buf2d_filled_rect_by_size</h4>
|
<h4><a name="f_b_fil_rect">buf2d_filled_rect_by_size</a></h4>
|
||||||
<p>Рисует закрашенный прямоугольник, по двум координатам, 2-я координата задана по размеру. Если размер задать 1*1, то будет нарисована точка размером в 1 пиксель, т.е. размер прямоугольника в пикселях будет равен указанному. Если размеры отрицательные прямоугольник рисуется в обратном направлении.</p>
|
<p>Рисует закрашенный прямоугольник, по двум координатам, 2-я координата задана по размеру. Если размер задать 1*1, то будет нарисована точка размером в 1 пиксель, т.е. размер прямоугольника в пикселях будет равен указанному. Если размеры отрицательные прямоугольник рисуется в обратном направлении.</p>
|
||||||
<pre>stdcall [buf2d_rect_by_size], buf_0, 10,10,150,100, 0x8080</pre>
|
<pre>stdcall [buf2d_rect_by_size], buf_0, 10,10,150,100, 0x8080</pre>
|
||||||
<p>где buf_0 - структура буфера в котором будет рисоваться прямоугольник; 10, 10 - координаты левого верхнего угла (при отрицательных размерах координата правого нижнего); 150, 100 - размер прямоугольника; 0x8080 - цвет прямоуголика.</p>
|
<p>где buf_0 - структура буфера в котором будет рисоваться прямоугольник; 10, 10 - координаты левого верхнего угла (при отрицательных размерах координата правого нижнего); 150, 100 - размер прямоугольника; 0x8080 - цвет прямоуголика.</p>
|
||||||
|
|
||||||
<h4>buf2d_circle</h4>
|
<h4><a name="f_b_circle">buf2d_circle</a></h4>
|
||||||
<p>Рисует в буфере окружность с заданным цветом и радиусом. Пример:</p>
|
<p>Рисует в буфере окружность с заданным цветом и радиусом. Пример:</p>
|
||||||
<pre>stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000</pre>
|
<pre>stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000</pre>
|
||||||
<p>где buf_0 - структура буфера в котором будет рисоваться окружность; 25, 70 - координаты центра; 15 - радиус; 0xff0000 - цвет.</p>
|
<p>где buf_0 - структура буфера в котором будет рисоваться окружность; 25, 70 - координаты центра; 15 - радиус; 0xff0000 - цвет.</p>
|
||||||
@ -256,15 +263,20 @@ stdcall [buf2d_convert_text_matrix], buf_1</pre>
|
|||||||
<p>100,150 - координаты точки;</p>
|
<p>100,150 - координаты точки;</p>
|
||||||
<p>eax - цвет точки (для 8 и 24 битных буферов не используемые старшие биты в eax равны 0) или значение -1 в случае ошибки.</p>
|
<p>eax - цвет точки (для 8 и 24 битных буферов не используемые старшие биты в eax равны 0) или значение -1 в случае ошибки.</p>
|
||||||
|
|
||||||
|
<h4><a name="f_flip_h">buf2d_flip_h</a></h4>
|
||||||
|
<p>Îňđŕćŕĺň čçîáđŕćĺíčĺ â áóôĺđĺ ďî ăîđčçîíňŕëč (ëĺâî č ďđŕâî ěĺí˙ţňń˙ ěĺńňŕěč). Ďđčěĺđ:</p>
|
||||||
|
<pre>stdcall buf2d_flip_h, buf_0</pre>
|
||||||
|
<p>ăäĺ buf_0 - ńňđóęňóđŕ 24-ő čëč 32-ő áčňíîăî áóôĺđŕ.</p>
|
||||||
|
|
||||||
<h4><a name="f_flip_v">buf2d_flip_v</a></h4>
|
<h4><a name="f_flip_v">buf2d_flip_v</a></h4>
|
||||||
<p>Отражает изображение в буфере по вертикали (верх и низ меняются местами). Пример:</p>
|
<p>Отражает изображение в буфере по вертикали (верх и низ меняются местами). Пример:</p>
|
||||||
<pre>stdcall buf2d_flip_v, buf_0</pre>
|
<pre>stdcall buf2d_flip_v, buf_0</pre>
|
||||||
<p>где buf_0 - структура 24-х битного буфера.</p>
|
<p>ăäĺ buf_0 - ńňđóęňóđŕ 24-ő čëč 32-ő áčňíîăî áóôĺđŕ.</p>
|
||||||
|
|
||||||
<h4><a name="f_filter_d">buf2d_filter_dither</a></h4>
|
<h4><a name="f_filter_d">buf2d_filter_dither</a></h4>
|
||||||
<p>Фильтр, который преобразует изображение из 24 битного буфера в 8-ми цветное. Разрядность буфера не меняется. Пример:</p>
|
<p>Фильтр, который преобразует изображение из 24 битного буфера в 8-ми цветное. Разрядность буфера не меняется. Пример:</p>
|
||||||
<pre>stdcall [buf2d_filter_dither], buf_0, 0</pre>
|
<pre>stdcall [buf2d_filter_dither], buf_0, 0</pre>
|
||||||
<p>где buf_0 - структура 24-х битного буфера.</p>
|
<p>ăäĺ buf_0 - ńňđóęňóđŕ 24-ő áčňíîăî áóôĺđŕ;</p>
|
||||||
<p>0 - алгоритм (возможные значения: 0 - Sierra Lite, 1 - Floyd-Steinberg, 2 - Burkers, 3 - Heavyiron_mod, 4 - Atkinson).</p>
|
<p>0 - алгоритм (возможные значения: 0 - Sierra Lite, 1 - Floyd-Steinberg, 2 - Burkers, 3 - Heavyiron_mod, 4 - Atkinson).</p>
|
||||||
|
|
||||||
<h4><a name="f_v_brush_c">buf2d_vox_brush_create</a></h4>
|
<h4><a name="f_v_brush_c">buf2d_vox_brush_create</a></h4>
|
||||||
@ -359,6 +371,7 @@ import_buf2d_lib:
|
|||||||
buf2d_flood_fill dd sz_buf2d_flood_fill
|
buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||||
buf2d_set_pixel dd sz_buf2d_set_pixel
|
buf2d_set_pixel dd sz_buf2d_set_pixel
|
||||||
buf2d_get_pixel dd sz_buf2d_get_pixel
|
buf2d_get_pixel dd sz_buf2d_get_pixel
|
||||||
|
buf2d_flip_h dd sz_buf2d_flip_h
|
||||||
buf2d_flip_v dd sz_buf2d_flip_v
|
buf2d_flip_v dd sz_buf2d_flip_v
|
||||||
buf2d_filter_dither dd sz_buf2d_filter_dither
|
buf2d_filter_dither dd sz_buf2d_filter_dither
|
||||||
|
|
||||||
@ -403,6 +416,7 @@ import_buf2d_lib:
|
|||||||
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||||
sz_buf2d_get_pixel db 'buf2d_get_pixel',0
|
sz_buf2d_get_pixel db 'buf2d_get_pixel',0
|
||||||
|
sz_buf2d_flip_h db 'buf2d_flip_h',0
|
||||||
sz_buf2d_flip_v db 'buf2d_flip_v',0
|
sz_buf2d_flip_v db 'buf2d_flip_v',0
|
||||||
sz_buf2d_filter_dither db 'buf2d_filter_dither',0
|
sz_buf2d_filter_dither db 'buf2d_filter_dither',0
|
||||||
|
|
||||||
@ -445,5 +459,6 @@ import_buf2d_lib:
|
|||||||
<p>15.11.12 - добавлена функция отражения 24 битных изображений по вертикали buf_flip_v, исправления в функции buf2d_img_hdiv2.</p>
|
<p>15.11.12 - добавлена функция отражения 24 битных изображений по вертикали buf_flip_v, исправления в функции buf2d_img_hdiv2.</p>
|
||||||
<p>14.12.12 - добавлена функция наложения фильтра buf2d_filter_dither.</p>
|
<p>14.12.12 - добавлена функция наложения фильтра buf2d_filter_dither.</p>
|
||||||
<p>24.12.12 - добавлены 2 новых алгоритма в функцию наложения фильтра buf2d_filter_dither.</p>
|
<p>24.12.12 - добавлены 2 новых алгоритма в функцию наложения фильтра buf2d_filter_dither.</p>
|
||||||
|
<p>30.01.15 - äîáŕâëĺíŕ ďîääĺđćęŕ 32 áčňíűő áóôĺđîâ â ôóíęöčţ buf_flip_v, äîáŕâëĺíŕ ôóíęöč˙ îňđŕćĺíč˙ ďî ăîđčçîíňŕëč buf_flip_h.</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -1986,52 +1986,156 @@ proc buf_get_pixel uses ebx ecx edi, buf_struc:dword, coord_x:dword, coord_y:dwo
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
align 4
|
||||||
|
proc buf_flip_h, buf_struc:dword
|
||||||
|
pushad
|
||||||
|
mov edi,[buf_struc]
|
||||||
|
cmp buf2d_bits,24
|
||||||
|
jne .end_24
|
||||||
|
mov esi,buf2d_data
|
||||||
|
mov eax,buf2d_w
|
||||||
|
mov ecx,eax
|
||||||
|
shr ecx,1
|
||||||
|
dec eax
|
||||||
|
lea eax,[eax+eax*2]
|
||||||
|
mov ebx,buf2d_h
|
||||||
|
mov edi,esi
|
||||||
|
add esi,eax
|
||||||
|
add eax,3
|
||||||
|
cld
|
||||||
|
.cycle_24:
|
||||||
|
push ecx edi esi
|
||||||
|
align 4
|
||||||
|
@@:
|
||||||
|
;swap word[edi] <-> word[esi]
|
||||||
|
mov dx,[edi]
|
||||||
|
movsw
|
||||||
|
mov [esi-2],dx
|
||||||
|
;swap byte[edi] <-> byte[esi]
|
||||||
|
mov dl,[edi]
|
||||||
|
movsb
|
||||||
|
mov [esi-1],dl
|
||||||
|
sub esi,6
|
||||||
|
loop @b
|
||||||
|
pop esi edi ecx
|
||||||
|
add edi,eax
|
||||||
|
add esi,eax
|
||||||
|
dec ebx
|
||||||
|
or ebx,ebx
|
||||||
|
jnz .cycle_24
|
||||||
|
jmp .end_32
|
||||||
|
.end_24:
|
||||||
|
cmp buf2d_bits,32
|
||||||
|
jne .end_32
|
||||||
|
mov esi,buf2d_data
|
||||||
|
mov eax,buf2d_w
|
||||||
|
dec eax
|
||||||
|
shl eax,2
|
||||||
|
mov ebx,buf2d_h
|
||||||
|
mov edi,esi
|
||||||
|
add esi,eax
|
||||||
|
add eax,4
|
||||||
|
cld
|
||||||
|
.cycle_32:
|
||||||
|
mov ecx,eax
|
||||||
|
shr ecx,3
|
||||||
|
push edi esi
|
||||||
|
align 4
|
||||||
|
@@:
|
||||||
|
;swap dword[edi] <-> dword[esi]
|
||||||
|
mov edx,[edi]
|
||||||
|
movsd
|
||||||
|
mov [esi-4],edx
|
||||||
|
sub esi,8
|
||||||
|
loop @b
|
||||||
|
pop esi edi
|
||||||
|
add edi,eax
|
||||||
|
add esi,eax
|
||||||
|
dec ebx
|
||||||
|
or ebx,ebx
|
||||||
|
jnz .cycle_32
|
||||||
|
.end_32:
|
||||||
|
popad
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
;®âà §¨âì ¯® ¢¥à⨪ «¨ (¢¥àå ¨ ¨§ ¬¥ïîâáï ¬¥áâ ¬¨)
|
;®âà §¨âì ¯® ¢¥à⨪ «¨ (¢¥àå ¨ ¨§ ¬¥ïîâáï ¬¥áâ ¬¨)
|
||||||
align 4
|
align 4
|
||||||
proc buf_flip_v, buf_struc:dword
|
proc buf_flip_v, buf_struc:dword
|
||||||
locals
|
locals
|
||||||
line_pix dd ? ;ª®«. ¯¨ªá¥«¥© ¢ «¨¨¨ ¡ãä¥à
|
line_pix dd ? ;ª®«. ¯¨ªá¥«¥© ¢ «¨¨¨ ¡ãä¥à
|
||||||
line_2byte dd ? ;ª®«. ¡ ©â ¢ «¨¨¨ ¡ãä¥à * 2
|
line_2byte dd ? ;ª®«. ¡ ©â ¢ «¨¨¨ ¡ãä¥à * 2
|
||||||
endl
|
endl
|
||||||
pushad
|
pushad
|
||||||
mov edi,[buf_struc]
|
mov edi,[buf_struc]
|
||||||
cmp buf2d_bits,24
|
cmp buf2d_bits,24
|
||||||
jne .end_24
|
jne .end_24
|
||||||
mov edx,buf2d_w
|
mov edx,buf2d_w
|
||||||
mov [line_pix],edx
|
mov [line_pix],edx
|
||||||
mov ebx,buf2d_h
|
mov ebx,buf2d_h
|
||||||
lea edx,[edx+edx*2]
|
lea edx,[edx+edx*2]
|
||||||
mov esi,edx
|
mov esi,edx
|
||||||
imul esi,ebx
|
imul esi,ebx
|
||||||
sub esi,edx
|
sub esi,edx
|
||||||
add esi,buf2d_data ;㪠§ â¥«ì ¨¦îî «¨¨î
|
add esi,buf2d_data ;㪠§ â¥«ì ¨¦îî «¨¨î
|
||||||
shr ebx,1 ;ª®«. «¨¥©ëå 横«®¢
|
shr ebx,1 ;ª®«. «¨¥©ëå 横«®¢
|
||||||
shl edx,1
|
shl edx,1
|
||||||
mov [line_2byte],edx
|
mov [line_2byte],edx
|
||||||
mov edi,buf2d_data
|
mov edi,buf2d_data
|
||||||
xchg edi,esi
|
xchg edi,esi
|
||||||
cld
|
cld
|
||||||
.flip_24:
|
.flip_24:
|
||||||
cmp ebx,0
|
cmp ebx,0
|
||||||
jle .end_24
|
jle .end_32 ;§¤¥áì ¢ë室 ¨§ äãªæ¨¨ (¯®â®¬ã .end_24 ¥ ¯®¤å®¤¨â)
|
||||||
mov ecx,[line_pix]
|
mov ecx,[line_pix]
|
||||||
@@:
|
align 4
|
||||||
lodsw
|
@@:
|
||||||
mov dx,word[edi]
|
lodsw
|
||||||
mov word[esi-2],dx
|
mov dx,word[edi]
|
||||||
mov [edi],ax
|
mov word[esi-2],dx
|
||||||
lodsb
|
stosw
|
||||||
mov ah,byte[edi+2]
|
lodsb
|
||||||
mov byte[esi-1],ah
|
mov ah,byte[edi]
|
||||||
mov [edi+2],al
|
mov byte[esi-1],ah
|
||||||
add edi,3
|
stosb
|
||||||
loop @b
|
loop @b
|
||||||
sub edi,[line_2byte]
|
sub edi,[line_2byte]
|
||||||
dec ebx
|
dec ebx
|
||||||
jmp .flip_24
|
jmp .flip_24
|
||||||
.end_24:
|
.end_24:
|
||||||
popad
|
cmp buf2d_bits,32
|
||||||
ret
|
jne .end_32
|
||||||
|
mov edx,buf2d_w
|
||||||
|
mov [line_pix],edx
|
||||||
|
mov ebx,buf2d_h
|
||||||
|
shl edx,2
|
||||||
|
mov esi,edx
|
||||||
|
imul esi,ebx
|
||||||
|
sub esi,edx
|
||||||
|
add esi,buf2d_data ;㪠§ â¥«ì ¨¦îî «¨¨î
|
||||||
|
shr ebx,1 ;ª®«. «¨¥©ëå 横«®¢
|
||||||
|
shl edx,1
|
||||||
|
mov [line_2byte],edx
|
||||||
|
mov edi,buf2d_data
|
||||||
|
xchg edi,esi
|
||||||
|
cld
|
||||||
|
.flip_32:
|
||||||
|
cmp ebx,0
|
||||||
|
jle .end_32
|
||||||
|
mov ecx,[line_pix]
|
||||||
|
align 4
|
||||||
|
@@:
|
||||||
|
lodsd
|
||||||
|
mov edx,dword[edi]
|
||||||
|
mov dword[esi-4],edx
|
||||||
|
stosd
|
||||||
|
loop @b
|
||||||
|
sub edi,[line_2byte]
|
||||||
|
dec ebx
|
||||||
|
jmp .flip_32
|
||||||
|
.end_32:
|
||||||
|
popad
|
||||||
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -3318,14 +3422,13 @@ align 4
|
|||||||
line_len4i:
|
line_len4i:
|
||||||
push ebp
|
push ebp
|
||||||
mov ebp,esp
|
mov ebp,esp
|
||||||
finit
|
|
||||||
fild word [ebp+8]
|
fild word [ebp+8]
|
||||||
fisub word [ebp+12]
|
fisub word [ebp+12]
|
||||||
fmul st0,st0 ;st0=x^2
|
fmul st0,st0 ;st0=x^2
|
||||||
fild word [ebp+10]
|
fild word [ebp+10]
|
||||||
fisub word [ebp+14]
|
fisub word [ebp+14]
|
||||||
fmul st0,st0 ;st0=y^2
|
fmul st0,st0 ;st0=y^2
|
||||||
fadd st0,st1
|
faddp
|
||||||
fsqrt
|
fsqrt
|
||||||
fstp dword [ebp+12]
|
fstp dword [ebp+12]
|
||||||
pop ebp
|
pop ebp
|
||||||
@ -3353,6 +3456,7 @@ proc buf_curve_bezier, buffer:dword, coord_p0:dword,coord_p1:dword,coord_p2:dwor
|
|||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
|
|
||||||
finit
|
finit
|
||||||
|
fldz
|
||||||
|
|
||||||
; calculate delta t
|
; calculate delta t
|
||||||
stdcall line_len4i, dword[coord_p1],dword[coord_p0]
|
stdcall line_len4i, dword[coord_p1],dword[coord_p0]
|
||||||
@ -3374,7 +3478,8 @@ proc buf_curve_bezier, buffer:dword, coord_p0:dword,coord_p1:dword,coord_p2:dwor
|
|||||||
@@:
|
@@:
|
||||||
fstp dword[delt_t]
|
fstp dword[delt_t]
|
||||||
|
|
||||||
finit
|
ffree st0 ;1.0
|
||||||
|
fincstp
|
||||||
|
|
||||||
;fild word[coord_p2+2] ;y2
|
;fild word[coord_p2+2] ;y2
|
||||||
fild word[coord_p1+2] ;y1
|
fild word[coord_p1+2] ;y1
|
||||||
@ -3400,10 +3505,9 @@ proc buf_curve_bezier, buffer:dword, coord_p0:dword,coord_p1:dword,coord_p2:dwor
|
|||||||
mov esi,dword[opr_param]
|
mov esi,dword[opr_param]
|
||||||
fstp dword[opr_param]
|
fstp dword[opr_param]
|
||||||
|
|
||||||
fldz
|
fld st0 ;st0=t
|
||||||
fadd st0,st1 ;0+t
|
fmul st0,st0 ;t^2
|
||||||
fmul st0,st0 ;t*t
|
fmul st0,st5 ;(t^2)*x2
|
||||||
fmul st0,st5 ;...*x2
|
|
||||||
|
|
||||||
fadd dword[opr_param]
|
fadd dword[opr_param]
|
||||||
mov dword[opr_param],esi
|
mov dword[opr_param],esi
|
||||||
@ -3424,10 +3528,9 @@ proc buf_curve_bezier, buffer:dword, coord_p0:dword,coord_p1:dword,coord_p2:dwor
|
|||||||
mov esi,dword[opr_param]
|
mov esi,dword[opr_param]
|
||||||
fstp dword[opr_param]
|
fstp dword[opr_param]
|
||||||
|
|
||||||
fldz
|
fld st0 ;st0=t
|
||||||
fadd st0,st1 ;0+t
|
fmul st0,st0 ;t^2
|
||||||
fmul st0,st0 ;t*t
|
fimul word[coord_p2+2] ;(t^2)*y2
|
||||||
fimul word[coord_p2+2] ;...*y2
|
|
||||||
|
|
||||||
fadd dword[opr_param]
|
fadd dword[opr_param]
|
||||||
mov dword[opr_param],esi
|
mov dword[opr_param],esi
|
||||||
@ -5270,6 +5373,7 @@ EXPORTS:
|
|||||||
dd sz_buf2d_flood_fill, buf_flood_fill
|
dd sz_buf2d_flood_fill, buf_flood_fill
|
||||||
dd sz_buf2d_set_pixel, buf_set_pixel
|
dd sz_buf2d_set_pixel, buf_set_pixel
|
||||||
dd sz_buf2d_get_pixel, buf_get_pixel
|
dd sz_buf2d_get_pixel, buf_get_pixel
|
||||||
|
dd sz_buf2d_flip_h, buf_flip_h
|
||||||
dd sz_buf2d_flip_v, buf_flip_v
|
dd sz_buf2d_flip_v, buf_flip_v
|
||||||
dd sz_buf2d_filter_dither, buf_filter_dither
|
dd sz_buf2d_filter_dither, buf_filter_dither
|
||||||
dd sz_buf2d_vox_brush_create, vox_brush_create
|
dd sz_buf2d_vox_brush_create, vox_brush_create
|
||||||
@ -5311,6 +5415,7 @@ EXPORTS:
|
|||||||
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||||
sz_buf2d_get_pixel db 'buf2d_get_pixel',0
|
sz_buf2d_get_pixel db 'buf2d_get_pixel',0
|
||||||
|
sz_buf2d_flip_h db 'buf2d_flip_h',0
|
||||||
sz_buf2d_flip_v db 'buf2d_flip_v',0
|
sz_buf2d_flip_v db 'buf2d_flip_v',0
|
||||||
sz_buf2d_filter_dither db 'buf2d_filter_dither',0
|
sz_buf2d_filter_dither db 'buf2d_filter_dither',0
|
||||||
sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
|
sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
|
||||||
|
Loading…
Reference in New Issue
Block a user