diff --git a/programs/develop/libraries/buf2d/trunk/about.htm b/programs/develop/libraries/buf2d/trunk/about.htm index 43d85831e3..5b87002478 100644 --- a/programs/develop/libraries/buf2d/trunk/about.htm +++ b/programs/develop/libraries/buf2d/trunk/about.htm @@ -49,9 +49,15 @@ table { font-size: 15px; }

Оглавление

@@ -60,11 +66,13 @@ table { font-size: 15px; }

Документация к свободной библиотеке buf2d.asm, для ОС Колибри. Эта библиотека создана для работы с 2d изображениями. С ее помощью можно создавать буфера с изображениями в памяти, и при необходимости выводить их на экран. - Изображения можно накладывать одно на другое, поддерживается работа с прозрачными изображениями, есть функция рисования лини пока на этом все.

+ Изображения можно накладывать одно на другое, поддерживается работа с прозрачными изображениями. + Есть функции рисования линий, кривых Безье, прямоугольников, окружностей. + Также есть функции для рисований воксельной графики.

-

Последнее обновление библиотеки 11.05.12.

+

Последнее обновление библиотеки 12.06.12.

-

Форматы буферов

+

Форматы буферов

Поддерживается 3 формата буферов. Каждая функция при работе с буферами может быть расчитана на работу с определенными форматами изображений.

@@ -90,11 +98,14 @@ buf_0: dd 0x80 ;+16 фоновый цвет db 24 ;+20 бит на пиксель -

lib_init

+

lib_init

Эта функция получает указатели на функции работы с памятью, вызыватся должна при загрузке библиотеки. Можете использовать макрос @use_library_mem, для ее автоматической настройки.

-

buf2d_create

-

Создает буфер и чистит его фоновым цветом.

+

buf2d_create

+

Создает буфер и чистит его фоновым цветом. Пример:

+
stdcall [buf2d_create], buf_0
+

где buf_0 - структура буфера.

+

Параметры для создания буфера берутся из структуры.

buf2d_create_f_img

Создает буфер на основе изображения в формате rgb.

@@ -229,6 +240,33 @@ stdcall [buf2d_convert_text_matrix], buf_1

100,150 - координаты точки;

eax - цвет точки (для 8 и 24 битных буферов не используемые старшие биты в eax равны 0) или значение -1 в случае ошибки.

+

buf2d_vox_brush_create

+

Создание воксельной кисти.

+ +

buf2d_vox_brush_delete

+

Удаление воксельной кисти.

+ +

buf2d_vox_obj_get_img_w_3g

+

Возврашает ширину воксельного изображения с 3-мя гранями (которое рисуется функцией buf2d_vox_obj_draw_3g), принимает указатель на кисть и масштаб.

+ +

buf2d_vox_obj_get_img_h_3g

+

Возврашает высоту воксельного изображения с 3-мя гранями (которое рисуется функцией buf2d_vox_obj_draw_3g), принимает указатель на кисть и масштаб.

+ +

buf2d_vox_obj_draw_3g

+

Рисование воксельного объекта с 3-мя гранями.

+ +

buf2d_vox_obj_draw_3g_scaled

+

Рисование части воксельного объекта.

+ +

buf2d_vox_obj_draw_3g_shadows

+

Функция рисующая тени для изображений нарисованных с помощью функции buf2d_vox_obj_draw_3g или buf2d_vox_obj_draw_3g_scaled.

+ +

buf2d_vox_obj_draw_pl

+

Функция рисующая срез воксельного обьекта.

+ +

buf2d_vox_obj_draw_pl_scaled

+

Функция рисующая срез части воксельного обьекта.

+

Константы

BUF2D_OPT_CROP_TOP equ 1

Константа для функции buf2d_crop_color, обозначает обрезку буфера сверху

@@ -271,6 +309,17 @@ import_buf2d_lib: buf2d_set_pixel dd sz_buf2d_set_pixel buf2d_get_pixel dd sz_buf2d_get_pixel + ;воксельные функции: + buf2d_vox_brush_create dd sz_buf2d_vox_brush_create + buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete + buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g + buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g + buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g + buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled + buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows + buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl + buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled + dd 0,0 sz_lib_init db 'lib_init',0 sz_buf2d_create db 'buf2d_create',0 @@ -298,7 +347,18 @@ import_buf2d_lib: sz_buf2d_offset_h db 'buf2d_offset_h',0 sz_buf2d_flood_fill db 'buf2d_flood_fill',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_vox_brush_create db 'buf2d_vox_brush_create',0 + sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0 + sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0 + sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0 + sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0 + sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0 + sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0 + sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0 + sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0

История

02.07.10 - самая первая версия библиотеки, 2 примера использования.

@@ -321,5 +381,6 @@ import_buf2d_lib:

20.02.12 - функции buf2d_filled_rect_by_size и buf2d_rect_by_size могут принимать отрицательные размеры для прямоугольников, в функции buf2d_line горизонтальная линия рисуется на 1 пиксель длинее (раньше не дорисовывало), некоторые функции могут рисовать в 8 битных буферах.

23.02.12 - функция buf2d_bit_blt_alpha может принимать отрицательные координаты в позиции копируемого буфера, небольшие доработки в buf2d_bit_blt_transp

11.05.12 - добавлена функция для взятия цвета точки buf2d_get_pixel, доработки в buf2d_set_pixel.

+

12.06.12 - добавлены функции для рисования воксельной графики.

\ No newline at end of file diff --git a/programs/develop/libraries/buf2d/trunk/buf2d.asm b/programs/develop/libraries/buf2d/trunk/buf2d.asm index df46efba8d..9d6278e9dc 100644 --- a/programs/develop/libraries/buf2d/trunk/buf2d.asm +++ b/programs/develop/libraries/buf2d/trunk/buf2d.asm @@ -2912,13 +2912,13 @@ endp align 4 proc vox_add, buf_v1:dword, buf_v2:dword, coord_x:dword, coord_y:dword, coord_z:dword pushad - mov eax,[coord_x] - mov ebx,[coord_y] + mov ebx,[coord_x] + mov eax,[coord_y] mov edi,[buf_v2] mov ecx,buf2d_h mov esi,buf2d_w imul ecx,esi - add esi,eax + add esi,ebx mov edx,buf2d_data cld ;ecx - count pixels in voxel @@ -2929,23 +2929,24 @@ pushad cmp dword[edx],0 je @f ;Їа®ўҐа塞 ЎгдҐа Ј«гЎЁ­л - push eax ecx esi + push eax ecx edi esi mov ecx,eax - stdcall buf_get_pixel, [buf_v1],ecx,ebx + mov edi,[buf_v1] + call get_pixel_32 ;stdcall buf_get_pixel, [buf_v1],ebx,ecx mov esi,[edx] add esi,[coord_z] cmp eax,esi jge .end_draw - stdcall buf_set_pixel, [buf_v1],ecx,ebx,esi ;esi = new coord z + stdcall buf_set_pixel, [buf_v1],ebx,ecx,esi ;esi = new coord z .end_draw: - pop esi ecx eax + pop esi edi ecx eax @@: add edx,4 - inc eax - cmp eax,esi + inc ebx + cmp ebx,esi jl @f - inc ebx - sub eax,buf2d_w + inc eax + sub ebx,buf2d_w @@: loop .cycle popad diff --git a/programs/media/voxel_editor/trunk/house1.vox b/programs/media/voxel_editor/trunk/house1.vox index ec0db8ab4a..4003ee679f 100644 Binary files a/programs/media/voxel_editor/trunk/house1.vox and b/programs/media/voxel_editor/trunk/house1.vox differ diff --git a/programs/media/voxel_editor/trunk/vaz2106.vox b/programs/media/voxel_editor/trunk/vaz2106.vox new file mode 100644 index 0000000000..c92cfa43f2 Binary files /dev/null and b/programs/media/voxel_editor/trunk/vaz2106.vox differ diff --git a/programs/media/voxel_editor/trunk/voxel_editor.asm b/programs/media/voxel_editor/trunk/voxel_editor.asm index ead0afa8e8..90b8b4e96a 100644 --- a/programs/media/voxel_editor/trunk/voxel_editor.asm +++ b/programs/media/voxel_editor/trunk/voxel_editor.asm @@ -9,15 +9,15 @@ use32 dd 0 dd sys_path -include 'd:/kolibri/svn/programs/macros.inc' -include 'd:/kolibri/svn/programs/proc32.inc' -include 'd:/kolibri/svn/programs/develop/libraries/box_lib/load_lib.mac' +include '../../../../programs/macros.inc' +include '../../../../programs/proc32.inc' +include '../../../../programs/develop/libraries/box_lib/load_lib.mac' include 'mem.inc' include 'dll.inc' include 'vox_draw.inc' @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load -caption db 'Voxel editor 11.06.12',0 ;Ї®¤ЇЁбм ®Є­  +caption db 'Voxel editor 12.06.12',0 ;Ї®¤ЇЁбм ®Є­  struct FileInfoBlock Function dd ? @@ -302,12 +302,7 @@ pushad jg .end_f stdcall [buf2d_get_pixel], edi,ebx,eax mov [v_color],eax - ;stdcall [buf2d_filled_rect_by_size], buf_0, 5,3, 8,8,eax - ;stdcall [buf2d_draw], buf_0 ;®Ў­®ў«пҐ¬ ЎгдҐа ­  нЄа ­Ґ - mov ebx,((OT_CAPT_X_COLOR+35) shl 16)+16 ;Ї® ®бЁ x - mov ecx,(OT_CAPT_Y_COLOR shl 16)+12 ;Ї® ®бЁ y - mov edx,[v_color] - mcall 13 + call on_change_color ;®в®Ўа ¦ Ґ¬ Ё§¬Ґ­Ґ­Ёп жўҐв  .end_f: popad ret @@ -472,24 +467,21 @@ draw_pok: mov eax,47 mov ecx,[v_zoom] - mov ebx,(2 shl 16) + mov ebx,(3 shl 16)+(1 shl 31) mov edx,((365+6*9) shl 16)+5 mov esi,[sc.work_button_text] or esi,(1 shl 30) mov edi,[sc.work_button] int 0x40 ;¬ бив Ў - mov ebx,(5 shl 16) mov ecx,[v_cur_x] add edx,(6*2)*65536+9 int 0x40 ; - mov ebx,(5 shl 16) mov ecx,[v_cur_y] add edx,(6*0)*65536+9 int 0x40 ; - mov ebx,(5 shl 16) mov ecx,[n_plane] add edx,(6*0)*65536+9 - int 0x40 ; + int 0x40 ;­®¬Ґа бҐзҐ­Ёп mov eax,4 ;аЁб®ў ­ЁҐ ⥪бв  mov ebx,(OT_CAPT_X_COLOR shl 16)+OT_CAPT_Y_COLOR+2 @@ -498,10 +490,25 @@ draw_pok: mov edx,txt_color int 0x40 + call on_change_color + ret + +align 4 +on_change_color: +pushad mov ebx,((OT_CAPT_X_COLOR+35) shl 16)+16 ;Ї® ®бЁ x mov ecx,(OT_CAPT_Y_COLOR shl 16)+12 ;Ї® ®бЁ y mov edx,[v_color] mcall 13 + + mov ebx,(1 shl 8)+(6 shl 16) + mov ecx,edx + mov edx,((OT_CAPT_X_COLOR+55) shl 16)+OT_CAPT_Y_COLOR+2 + mov esi,[sc.work_text] + add esi,(1 shl 30) + mov edi,[sc.work] + mcall 47 +popad ret align 4 @@ -529,11 +536,11 @@ button: @@: cmp ah,6 jne @f - call but_1 + call but_zoom_p @@: cmp ah,7 jne @f - call but_2 + call but_zoom_m @@: cmp ah,8 jne @f @@ -639,6 +646,9 @@ but_open_file: movzx eax,byte[eax] and eax,0xff ;ЎҐаҐ¬ ¬ бив Ў Ї® 㬮«з ­Ёо mov dword[v_zoom],eax ;ЎҐаҐ¬ ¬ бив Ў Ї® 㬮«з ­Ёо + mov dword[cam_x],0 + mov dword[cam_y],0 + mov dword[cam_z],0 call draw_objects .end_open_file: popad @@ -679,7 +689,7 @@ but_save_file: ;㢥«ЁзҐ­ЁҐ ¬ бив Ў  align 4 -but_1: +but_zoom_p: cmp dword[v_zoom],10 ;¬ ЄбЁ¬ «м­л© а §¬Ґа, ¤® Є®в®а®Ј® ¬®¦­® 㢥«ЁзЁвм 2^10=1024 jge @f inc dword[v_zoom] @@ -688,9 +698,21 @@ but_1: mov eax,[v_zoom] cmp eax,[scaled_zoom] jl .end_0 + push ecx + mov ecx,[scaled_zoom] + xor eax,eax + inc eax + shl eax,cl shl dword[cam_x],1 shl dword[cam_y],1 shl dword[cam_z],1 + cmp eax,[n_plane] + jg .end_1 + ;Є®аҐЄвЁа®ўЄ  Ї®«§г­Є  + sub [n_plane],eax + inc dword[cam_y] + .end_1: + pop ecx .end_0: pop eax call draw_objects @@ -700,8 +722,8 @@ but_1: ;㬥­м襭ЁҐ ¬ бив Ў  align 4 -but_2: - cmp dword[v_zoom],-1 +but_zoom_m: + cmp dword[v_zoom],1 jl @f dec dword[v_zoom] shr dword[n_plane],1 @@ -711,6 +733,17 @@ but_2: jl .end_0 shr dword[cam_x],1 shr dword[cam_y],1 + jnc .end_1 + ;Є®аҐЄвЁа®ўЄ  Ї®«§г­Є  + push ecx + mov ecx,[scaled_zoom] + dec ecx + xor eax,eax + inc eax + shl eax,cl + add [n_plane],eax + pop ecx + .end_1: shr dword[cam_z],1 .end_0: pop eax @@ -731,21 +764,83 @@ but_4: call draw_objects ret +;б¤ўЁЈ Ґ¬ Ї«®бЄ®бвм б१  align 4 but_5: +push eax ecx inc dword[n_plane] + mov eax,[v_zoom] + cmp eax,[scaled_zoom] + jle .end_0 + ;Їа®Ёб室Ёв ¬ бив ЎЁа®ў ­ЁҐ + mov ecx,[scaled_zoom] + xor eax,eax + inc eax + shl eax,cl + cmp eax,[n_plane] + jg @f + mov dword[n_plane],0 + inc dword[cam_y] ;ЇҐаҐе®¤Ё¬ ў б®бҐ¤­Ё© ЄгЎ + neg ecx + ;inc ecx + add ecx,[v_zoom] + xor eax,eax + inc eax + shl eax,cl + cmp eax,[cam_y] + jg @f + mov dword[cam_y],0 ;§ жЁЄ«Ёў Ґ¬ Ґб«Ё ўл«Ґ§«Ё §  ЇаҐ¤Ґ«л Ї®б«Ґ¤­ҐЈ® ЄгЎ  + @@: + jmp .end_1 + .end_0: + ;¬ бив ЎЁа®ў ­ЁҐ ­Ґ Їа®Ёб室Ёв + mov ecx,eax + xor eax,eax + inc eax + shl eax,cl + cmp eax,[n_plane] + jg .end_1 + mov dword[n_plane],0 + .end_1: call draw_objects call draw_pok +pop ecx eax ret +;б¤ўЁЈ Ґ¬ Ї«®бЄ®бвм б१  align 4 but_6: + dec dword[n_plane] cmp dword[n_plane],0 - jle @f - dec dword[n_plane] - call draw_objects - call draw_pok - @@: + jge .end_f +push eax ecx + mov ecx,[scaled_zoom] + xor eax,eax + inc eax + shl eax,cl + dec eax + mov dword[n_plane],eax + + mov eax,[v_zoom] + cmp eax,[scaled_zoom] + jle .end_0 + ;Їа®Ёб室Ёв ¬ бив ЎЁа®ў ­ЁҐ + dec dword[cam_y] ;ЇҐаҐе®¤Ё¬ ў б®бҐ¤­Ё© ЄгЎ + cmp dword[cam_y],0 + jge .end_0 + + mov ecx,eax + sub ecx,[scaled_zoom] + xor eax,eax + inc eax + shl eax,cl + dec eax + mov dword[cam_y],eax ;Ґб«Ё ­®¬Ґа ЄгЎ  ®Є § «бп ¬Ґ­миҐ 0 ЁбЇа ў«пҐ¬ ­  ¬ ЄбЁ¬ «м­®Ґ §­ зҐ­ЁҐ + .end_0: +pop ecx eax + .end_f: + call draw_objects + call draw_pok ret align 4 @@ -922,8 +1017,10 @@ draw_objects: cmp eax,[scaled_zoom] jg @f ;®Ўлз­л© ०Ё¬ Ё§®Ўа ¦Ґ­Ёп - stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_0z, buf_vox, [open_file_vox], ebx,ecx, 0, eax - stdcall [buf2d_vox_obj_draw_pl], buf_pl, [open_file_vox], OT_MAP_X,OT_MAP_Y,TILE_SIZE, [v_zoom], [n_plane], 0xd0d0d0 + stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_0z, buf_vox,\ + [open_file_vox], ebx,ecx, 0, eax + stdcall [buf2d_vox_obj_draw_pl], buf_pl, [open_file_vox],\ + OT_MAP_X,OT_MAP_Y,TILE_SIZE, [v_zoom], [n_plane], [sc.work_graph] bt dword[mode_light],0 jnc .end_1 stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_0z, buf_vox, ebx,ecx, 0, eax, 3 @@ -1179,9 +1276,10 @@ import_buf2d: buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled + buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled - buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows + dd 0,0 sz_init db 'lib_init',0 sz_buf2d_create db 'buf2d_create',0 @@ -1214,9 +1312,9 @@ import_buf2d: sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0 sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0 sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0 + sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0 sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0 sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0 - sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0 mouse_dd dd 0x0 sc system_colors