Subversion Repositories Kolibri OS

Rev

Rev 2658 | Rev 2758 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2658 Rev 2748
Line 46... Line 46...
46
BUF2D_BIT_OPT_CROP_TOP equ 0
46
BUF2D_BIT_OPT_CROP_TOP equ 0
47
BUF2D_BIT_OPT_CROP_LEFT equ 1
47
BUF2D_BIT_OPT_CROP_LEFT equ 1
48
BUF2D_BIT_OPT_CROP_BOTTOM equ 2
48
BUF2D_BIT_OPT_CROP_BOTTOM equ 2
49
BUF2D_BIT_OPT_CROP_RIGHT equ 3
49
BUF2D_BIT_OPT_CROP_RIGHT equ 3
Line -... Line 50...
-
 
50
 
-
 
51
vox_offs_tree_table equ 4
-
 
52
vox_offs_data equ 12
50
 
53
 
51
;input:
54
;input:
52
; eax = 㪠§ â¥«ì ­  äã­ªæ¨î ¢ë¤¥«¥­¨ï ¯ ¬ïâ¨
55
; eax = 㪠§ â¥«ì ­  äã­ªæ¨î ¢ë¤¥«¥­¨ï ¯ ¬ïâ¨
53
; ebx = ... ®á¢®¡®¦¤¥­¨ï ¯ ¬ïâ¨
56
; ebx = ... ®á¢®¡®¦¤¥­¨ï ¯ ¬ïâ¨
54
; ecx = ... ¯¥à¥à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨
57
; ecx = ... ¯¥à¥à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨
Line 2183... Line 2186...
2183
; [edi] = combine color
2186
; [edi] = combine color
2184
align 4
2187
align 4
2185
combine_colors:
2188
combine_colors:
2186
	push ax bx cx dx
2189
	push ax bx cx dx
2187
	mov bx,0x00ff ;---get transparent---
2190
	mov bx,0x00ff ;---get transparent---
2188
	mov cl,byte[esi+3] ;pro
2191
	movzx cx,byte[esi+3] ;pro
2189
	xor ch,ch
-
 
2190
	sub bx,cx ;256-pro
2192
	sub bx,cx ;256-pro
2191
	;---blye---
2193
	;---blye---
2192
	xor ah,ah
-
 
2193
	mov al,byte[esi]
2194
	movzx ax,byte[esi]
2194
	imul ax,bx
2195
	imul ax,bx
2195
	xor dh,dh
-
 
2196
	mov dl,byte[edi]
2196
	movzx dx,byte[edi]
2197
	imul dx,cx
2197
	imul dx,cx
2198
	add ax,dx
2198
	add ax,dx
2199
	mov byte[edi],ah
2199
	mov byte[edi],ah
2200
	;---green---
2200
	;---green---
2201
	xor ah,ah
-
 
2202
	mov al,byte[esi+1]
2201
	movzx ax,byte[esi+1]
2203
	imul ax,bx
2202
	imul ax,bx
2204
	xor dh,dh
-
 
2205
	mov dl,byte[edi+1]
2203
	movzx dx,byte[edi+1]
2206
	imul dx,cx
2204
	imul dx,cx
2207
	add ax,dx
2205
	add ax,dx
2208
	mov byte[edi+1],ah
2206
	mov byte[edi+1],ah
2209
	;---red---
2207
	;---red---
2210
	xor ah,ah
-
 
2211
	mov al,byte[esi+2]
2208
	movzx ax,byte[esi+2]
2212
	imul ax,bx
2209
	imul ax,bx
2213
	xor dh,dh
-
 
2214
	mov dl,byte[edi+2]
2210
	movzx dx,byte[edi+2]
2215
	imul dx,cx
2211
	imul dx,cx
2216
	add ax,dx
2212
	add ax,dx
2217
	mov byte[edi+2],ah
2213
	mov byte[edi+2],ah
Line 2218... Line 2214...
2218
 
2214
 
Line 2337... Line 2333...
2337
	xor ch,ch
2333
	xor ch,ch
2338
	mov si,0x00ff ;---get transparent---
2334
	mov si,0x00ff ;---get transparent---
2339
	sub si,cx ;256-pro
2335
	sub si,cx ;256-pro
Line 2340... Line 2336...
2340
 
2336
 
2341
		;---blye---
2337
		;---blye---
2342
		mov al,bl
-
 
2343
		xor ah,ah
2338
		movzx ax,bl
2344
		shr ebx,8
2339
		shr ebx,8
2345
		imul ax,si
-
 
2346
		xor dh,dh
2340
		imul ax,si
2347
		mov dl,byte[edi]
2341
		movzx dx,byte[edi]
2348
		imul dx,cx
2342
		imul dx,cx
2349
		add ax,dx
2343
		add ax,dx
2350
		mov byte[edi],ah
2344
		mov byte[edi],ah
2351
		;---green---
2345
		;---green---
2352
		mov al,bl
-
 
2353
		xor ah,ah
2346
		movzx ax,bl
2354
		shr ebx,8
2347
		shr ebx,8
2355
		imul ax,si
-
 
2356
		xor dh,dh
2348
		imul ax,si
2357
		mov dl,byte[edi+1]
2349
		movzx dx,byte[edi+1]
2358
		imul dx,cx
2350
		imul dx,cx
2359
		add ax,dx
2351
		add ax,dx
2360
		mov byte[edi+1],ah
2352
		mov byte[edi+1],ah
2361
		;---red---
2353
		;---red---
2362
		mov al,bl
-
 
2363
		xor ah,ah
2354
		movzx ax,bl
2364
		imul ax,si
-
 
2365
		xor dh,dh
2355
		imul ax,si
2366
		mov dl,byte[edi+2]
2356
		movzx dx,byte[edi+2]
2367
		imul dx,cx
2357
		imul dx,cx
2368
		add ax,dx
2358
		add ax,dx
Line 2369... Line 2359...
2369
		mov byte[edi+2],ah
2359
		mov byte[edi+2],ah
Line 2804... Line 2794...
2804
 
2794
 
2805
	popad
2795
	popad
2806
	ret
2796
	ret
Line -... Line 2797...
-
 
2797
endp
-
 
2798
 
-
 
2799
 
-
 
2800
 
-
 
2801
;*** ä㭪樨 ¤«ï à ¡®âë á ¢®ªá¥«ì­®© £à ä¨ª®© ***
-
 
2802
 
-
 
2803
 
-
 
2804
 
-
 
2805
;ᮧ¤ ­¨¥ ¢®ªá¥«ì­ëå ª¨á⥩
-
 
2806
align 4
-
 
2807
proc vox_brush_create uses eax ebx ecx edi, h_br:dword, buf_z:dword
-
 
2808
	mov edi,[h_br]
-
 
2809
	movzx ecx,byte[edi+3]
-
 
2810
	add edi,4
-
 
2811
 
-
 
2812
	; *** ᮧ¤ ­¨¥ ¥¤¨­¨ç­®© ª¨á⨠***
-
 
2813
	mov eax,[buf_z]
-
 
2814
	mov buf2d_data,eax
-
 
2815
	movzx eax,byte[edi-4] ;è¨à¨­  ¥¤¨­¨ç­®© ª¨áâ¨
-
 
2816
	mov buf2d_w,eax ;è¨à¨­  ¡ãä¥à 
-
 
2817
	movzx eax,byte[edi-4+1] ;¢ëá®â  ¥¤¨­¨ç­®© ª¨áâ¨
-
 
2818
	mov buf2d_h,eax ;¢ëá®â  ¡ãä¥à 
-
 
2819
	mov buf2d_size_lt,0 ;®âáâ㯠᫥¢  ¨ á¯à ¢  ¤«ï ¡ãä¥à 
-
 
2820
	mov buf2d_color,0 ;梥â ä®­  ¡ãä¥à 
-
 
2821
	mov buf2d_bits,32 ;ª®«¨ç¥á⢮ ¡¨â ¢ 1-© â®çª¥ ¨§®¡à ¦¥­¨ï
-
 
2822
 
-
 
2823
	; *** ᮧ¤ ­¨¥ á«¥¤ãîé¨å ª¨á⥩ ***
-
 
2824
	cmp ecx,1
-
 
2825
	jl .end_creat
-
 
2826
	movzx ebx,byte[edi-4+2] ;¢ëá®â  ®á­®¢ ­¨ï ¥¤¨­¨ç­®© ª¨áâ¨
-
 
2827
	shr ebx,1
-
 
2828
	cld
-
 
2829
	@@:
-
 
2830
		mov eax,edi
-
 
2831
		add edi,BUF_STRUCT_SIZE
-
 
2832
		stdcall vox_create_next_brush, eax, edi, ebx
-
 
2833
		shl ebx,1
-
 
2834
		loop @b
-
 
2835
	.end_creat:
-
 
2836
	ret
-
 
2837
endp
-
 
2838
 
-
 
2839
;㤠«¥­¨¥ ¢®ªá¥«ì­ëå ª¨á⥩
-
 
2840
align 4
-
 
2841
proc vox_brush_delete uses ecx edi, h_br:dword
-
 
2842
	mov edi,[h_br]
-
 
2843
	movzx ecx,byte[edi+3]
-
 
2844
	add edi,4
-
 
2845
 
-
 
2846
	; *** 㤠«¥­¨¥ ª¨á⥩ ***
-
 
2847
	cmp ecx,1
-
 
2848
	jl .end_delete
-
 
2849
	cld
-
 
2850
	@@:
-
 
2851
		add edi,BUF_STRUCT_SIZE
-
 
2852
		stdcall buf_delete, edi
-
 
2853
		loop @b
-
 
2854
	.end_delete:
-
 
2855
	ret
-
 
2856
endp
-
 
2857
 
-
 
2858
;äã­ªæ¨ï ¤«ï ᮧ¤ ­¨ï ¢®ªá¥«ï á«¥¤ãî饣® ¯®à浪 
-
 
2859
; buf_v1 - ¡ãä¥à á ¨á室­ë¬ ¢®ªá¥«¥¬
-
 
2860
; buf_v2 - ¡ãä¥à á 㢥«¨ç¥­ë¬ ¢®ªá¥«¥¬
-
 
2861
; h - ¢ëá®â  ®á­®¢ ­¨ï ¨á室­®£® ¢®ªá¥«ï : 2
-
 
2862
align 4
-
 
2863
proc vox_create_next_brush uses eax ebx ecx edx edi, buf_v1:dword, buf_v2:dword, h:dword
-
 
2864
	mov edi,[buf_v1]
-
 
2865
	mov ebx,buf2d_h
-
 
2866
	mov ecx,buf2d_w
-
 
2867
	mov edi,[buf_v2]
-
 
2868
	mov buf2d_h,ebx
-
 
2869
	shl buf2d_h,1
-
 
2870
	mov buf2d_w,ecx
-
 
2871
	shl buf2d_w,1
-
 
2872
	mov buf2d_color,0
-
 
2873
	mov buf2d_bits,32
-
 
2874
 
-
 
2875
	stdcall buf_create, [buf_v2] ;ᮧ¤ ­¨¥ ¡ãä¥à  £«ã¡¨­ë
-
 
2876
	shr ecx,1
-
 
2877
	mov edx,[h]
-
 
2878
	shl edx,1
-
 
2879
	sub ebx,edx
-
 
2880
	;ecx - è¨à¨­  ¨á室­®£® ¢®ªá¥«ï : 2
-
 
2881
	;ebx - ¢ëá®â  ¨á室­®£® ¢®ªá¥«ï (¡¥§ ®á­®¢ ­¨ï)
-
 
2882
	;edx - ¢ëá®â  ®á­®¢ ­¨ï ¨á室­®£® ¢®ªá¥«ï
-
 
2883
	stdcall vox_add, [buf_v2], [buf_v1], ecx,0,0
-
 
2884
	stdcall vox_add, [buf_v2], [buf_v1], ecx,ebx,0
-
 
2885
 
-
 
2886
	mov eax,[h]
-
 
2887
	stdcall vox_add, [buf_v2], [buf_v1], 0,eax,eax
-
 
2888
	push eax ;stdcall ...
-
 
2889
	add eax,ebx
-
 
2890
	stdcall vox_add, [buf_v2], [buf_v1], 0,eax ;,...
-
 
2891
	sub eax,ebx
-
 
2892
 
-
 
2893
	shl ecx,1
-
 
2894
	;ecx - è¨à¨­  ¨á室­®£® ¢®ªá¥«ï
-
 
2895
	mov eax,[h]
-
 
2896
	stdcall vox_add, [buf_v2], [buf_v1], ecx,eax,eax
-
 
2897
	push eax ;stdcall ...,[h]
-
 
2898
	add eax,ebx
-
 
2899
	stdcall vox_add, [buf_v2], [buf_v1], ecx,eax;,[h]
-
 
2900
	;sub eax,ebx
-
 
2901
	shr ecx,1
-
 
2902
 
-
 
2903
	;ecx - è¨à¨­  ¨á室­®£® ¢®ªá¥«ï : 2
-
 
2904
	stdcall vox_add, [buf_v2], [buf_v1], ecx,edx,edx
-
 
2905
	add ebx,edx
-
 
2906
	stdcall vox_add, [buf_v2], [buf_v1], ecx,ebx,edx
-
 
2907
 
-
 
2908
	ret
-
 
2909
endp
-
 
2910
 
-
 
2911
;
-
 
2912
align 4
-
 
2913
proc vox_add uses ebx ecx, buf_v1:dword, buf_v2:dword, coord_x:dword, coord_y:dword, coord_z:dword
-
 
2914
pushad
-
 
2915
	mov eax,[coord_x]
-
 
2916
	mov ebx,[coord_y]
-
 
2917
	mov edi,[buf_v2]
-
 
2918
	mov ecx,buf2d_h
-
 
2919
	mov esi,buf2d_w
-
 
2920
	imul ecx,esi
-
 
2921
	add esi,eax
-
 
2922
	mov edx,buf2d_data
-
 
2923
	cld
-
 
2924
	;ecx - count pixels in voxel
-
 
2925
	;edx - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢ ¢®ªá¥«ì­®¬ ¡ãä¥à¥
-
 
2926
	;edi - 㪠§ â¥«ì ­  ¢®ªá¥«ì­ë© ¡ãä¥à
-
 
2927
	;esi - width voxel buffer add coord x
-
 
2928
	.cycle:
-
 
2929
		cmp dword[edx],0
-
 
2930
		je @f
-
 
2931
			;¯à®¢¥à塞 ¡ãä¥à £«ã¡¨­ë
-
 
2932
			push eax ecx esi
-
 
2933
			mov ecx,eax
-
 
2934
			stdcall buf_get_pixel, [buf_v1],ecx,ebx
-
 
2935
			mov esi,[edx]
-
 
2936
			add esi,[coord_z]
-
 
2937
			cmp eax,esi
-
 
2938
			jge .end_draw
-
 
2939
			stdcall buf_set_pixel, [buf_v1],ecx,ebx,esi ;esi = new coord z
-
 
2940
			.end_draw:
-
 
2941
			pop esi ecx eax
-
 
2942
		@@:
-
 
2943
		add edx,4
-
 
2944
		inc eax
-
 
2945
		cmp eax,esi
-
 
2946
		jl @f
-
 
2947
			inc ebx
-
 
2948
			sub eax,buf2d_w
-
 
2949
		@@:
-
 
2950
		loop .cycle
-
 
2951
popad
-
 
2952
	ret
2807
endp
2953
endp
2808
 
2954
 
2809
txt_err_n8b db 'need buffer 8 bit',13,10,0
2955
txt_err_n8b db 'need buffer 8 bit',13,10,0
Line 2810... Line 2956...
2810
txt_err_n24b db 'need buffer 24 bit',13,10,0
2956
txt_err_n24b db 'need buffer 24 bit',13,10,0
Line 2837... Line 2983...
2837
	dd sz_buf2d_crop_color, buf_crop_color
2983
	dd sz_buf2d_crop_color, buf_crop_color
2838
	dd sz_buf2d_offset_h, buf_offset_h
2984
	dd sz_buf2d_offset_h, buf_offset_h
2839
	dd sz_buf2d_flood_fill, buf_flood_fill
2985
	dd sz_buf2d_flood_fill, buf_flood_fill
2840
	dd sz_buf2d_set_pixel, buf_set_pixel
2986
	dd sz_buf2d_set_pixel, buf_set_pixel
2841
	dd sz_buf2d_get_pixel, buf_get_pixel
2987
	dd sz_buf2d_get_pixel, buf_get_pixel
-
 
2988
	dd sz_buf2d_vox_brush_create, vox_brush_create
-
 
2989
	dd sz_buf2d_vox_brush_delete, vox_brush_delete
2842
	dd 0,0
2990
	dd 0,0
2843
	sz_lib_init db 'lib_init',0
2991
	sz_lib_init db 'lib_init',0
2844
	sz_buf2d_create db 'buf2d_create',0
2992
	sz_buf2d_create db 'buf2d_create',0
2845
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
2993
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
2846
	sz_buf2d_clear db 'buf2d_clear',0 ;®ç¨á⪠ ¡ãä¥à  㪠§ ­­ë¬ 梥⮬
2994
	sz_buf2d_clear db 'buf2d_clear',0 ;®ç¨á⪠ ¡ãä¥à  㪠§ ­­ë¬ 梥⮬
Line 2865... Line 3013...
2865
	sz_buf2d_crop_color db 'buf2d_crop_color',0
3013
	sz_buf2d_crop_color db 'buf2d_crop_color',0
2866
	sz_buf2d_offset_h db 'buf2d_offset_h',0
3014
	sz_buf2d_offset_h db 'buf2d_offset_h',0
2867
	sz_buf2d_flood_fill db 'buf2d_flood_fill',0
3015
	sz_buf2d_flood_fill db 'buf2d_flood_fill',0
2868
	sz_buf2d_set_pixel db 'buf2d_set_pixel',0
3016
	sz_buf2d_set_pixel db 'buf2d_set_pixel',0
2869
	sz_buf2d_get_pixel db 'buf2d_get_pixel',0
3017
	sz_buf2d_get_pixel db 'buf2d_get_pixel',0
-
 
3018
	sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
-
 
3019
	sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0