Subversion Repositories Kolibri OS

Rev

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

Rev 5389 Rev 6175
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 50... Line -...
50
 
-
 
51
vox_offs_tree_table equ 4
-
 
52
vox_offs_data equ 12
-
 
53
 
50
 
54
;input:
51
;input:
55
; eax = 㪠§ â¥«ì ­  äã­ªæ¨î ¢ë¤¥«¥­¨ï ¯ ¬ïâ¨
52
; eax = 㪠§ â¥«ì ­  äã­ªæ¨î ¢ë¤¥«¥­¨ï ¯ ¬ïâ¨
56
; ebx = ... ®á¢®¡®¦¤¥­¨ï ¯ ¬ïâ¨
53
; ebx = ... ®á¢®¡®¦¤¥­¨ï ¯ ¬ïâ¨
57
; ecx = ... ¯¥à¥à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨
54
; ecx = ... ¯¥à¥à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨
Line 62... Line 59...
62
	mov dword[mem.free], ebx
59
	mov dword[mem.free], ebx
63
	mov dword[mem.realloc], ecx
60
	mov dword[mem.realloc], ecx
64
	mov dword[dll.load], edx
61
	mov dword[dll.load], edx
65
	ret
62
	ret
Line 66... Line -...
66
 
-
 
67
;input:
-
 
68
; ebx = coord x
-
 
69
; ecx = coord y
-
 
70
; edx = pixel color
-
 
71
; edi = pointer to buffer struct
-
 
72
align 4
-
 
73
draw_pixel:
-
 
74
	;cmp buf2d_bits,24
-
 
75
	;jne @f
-
 
76
	bt ebx,31
-
 
77
	jc @f
-
 
78
	bt ecx,31
-
 
79
	jc @f
-
 
80
	cmp ebx,buf2d_w
-
 
81
	jge @f
-
 
82
	cmp ecx,buf2d_h
-
 
83
	jge @f
-
 
84
	push esi
-
 
85
		mov esi,buf2d_w ;size x
-
 
86
		imul esi,ecx ;size_x*y
-
 
87
		add esi,ebx	 ;size_x*y+x
-
 
88
		cmp buf2d_bits,8
-
 
89
		je .beg8
-
 
90
		cmp buf2d_bits,32
-
 
91
		je .beg32
-
 
92
			lea esi,[esi+esi*2] ;(size_x*y+x)*3
-
 
93
			add esi,buf2d_data  ;ptr+(size_x*y+x)*3
-
 
94
			mov word[esi],dx ;copy pixel color
-
 
95
			ror edx,16
-
 
96
			mov byte[esi+2],dl
-
 
97
			ror edx,16
-
 
98
			jmp .end_draw
63
 
99
		.beg8: ;à¨á®¢ ­¨¥ â®çª¨ ¢ 8 ¡¨â­®¬ ¡ãä¥à¥
-
 
100
			add esi,buf2d_data  ;ptr+(size_x*y+x)
-
 
101
			mov byte[esi],dl
-
 
102
			jmp .end_draw
-
 
103
		.beg32: ;à¨á®¢ ­¨¥ â®çª¨ ¢ 32 ¡¨â­®¬ ¡ãä¥à¥
-
 
104
			shl esi,2
-
 
105
			add esi,buf2d_data  ;ptr+(size_x*y+x)
-
 
106
			mov dword[esi],edx
-
 
107
		.end_draw:
-
 
108
	pop esi
-
 
109
	@@:
-
 
110
	ret
-
 
111
 
-
 
112
;input:
-
 
113
; ebx = coord x
-
 
114
; ecx = coord y
-
 
115
; edi = pointer to buffer struct
-
 
116
;output:
-
 
117
; eax = 梥â â®çª¨
-
 
118
; ¢ á«ãç ¥ ®è¨¡ª¨ eax = 0xffffffff
-
 
119
align 4
-
 
120
get_pixel_8:
-
 
121
	mov eax,0xffffffff
-
 
122
 
-
 
123
	bt ebx,31
-
 
124
	jc @f
-
 
125
	bt ecx,31
-
 
126
	jc @f
-
 
127
	cmp ebx,buf2d_w
-
 
128
	jge @f
-
 
129
	cmp ecx,buf2d_h
-
 
130
	jge @f
-
 
131
	push esi
-
 
132
		mov esi,buf2d_w ;size x
-
 
133
		imul esi,ecx ;size_x*y
-
 
134
		add esi,ebx	 ;size_x*y+x
-
 
135
		add esi,buf2d_data  ;ptr+(size_x*y+x)
-
 
136
 
-
 
137
		movzx eax,byte[esi] ;copy pixel color
-
 
138
	pop esi
-
 
139
	@@:
-
 
140
	ret
-
 
141
 
-
 
142
;input:
-
 
143
; ebx = coord x
-
 
144
; ecx = coord y
-
 
145
; edi = pointer to buffer struct
-
 
146
;output:
-
 
147
; eax = 梥â â®çª¨
-
 
148
; ¢ á«ãç ¥ ®è¨¡ª¨ eax = 0xffffffff
-
 
149
align 4
-
 
150
get_pixel_24:
-
 
151
	mov eax,0xffffffff
-
 
152
 
-
 
153
	bt ebx,31
-
 
154
	jc @f
-
 
155
	bt ecx,31
-
 
156
	jc @f
-
 
157
	cmp ebx,buf2d_w
-
 
158
	jge @f
-
 
159
	cmp ecx,buf2d_h
-
 
160
	jge @f
-
 
161
	push esi
-
 
162
		mov esi,buf2d_w ;size x
-
 
163
		imul esi,ecx ;size_x*y
-
 
164
		add esi,ebx	 ;size_x*y+x
-
 
165
		lea esi,[esi+esi*2] ;(size_x*y+x)*3
-
 
166
		add esi,buf2d_data  ;ptr+(size_x*y+x)*3
-
 
167
 
-
 
168
		xor eax,eax
-
 
169
		mov ax,word[esi] ;copy pixel color
-
 
170
		ror eax,16
-
 
171
		mov al,byte[esi+2]
-
 
172
		ror eax,16
-
 
173
	pop esi
-
 
174
	@@:
-
 
175
	ret
-
 
176
 
-
 
177
;input:
-
 
178
; ebx = coord x
-
 
179
; ecx = coord y
-
 
180
; edi = pointer to buffer struct
-
 
181
;output:
-
 
182
; eax = 梥â â®çª¨
-
 
183
; ¢ á«ãç ¥ ®è¨¡ª¨ eax = 0xffffffff
-
 
184
align 4
-
 
185
get_pixel_32:
-
 
186
	mov eax,0xffffffff
-
 
187
 
-
 
188
	bt ebx,31
-
 
189
	jc @f
-
 
190
	bt ecx,31
-
 
191
	jc @f
-
 
192
	cmp ebx,buf2d_w
-
 
193
	jge @f
-
 
194
	cmp ecx,buf2d_h
-
 
195
	jge @f
-
 
196
	push esi
-
 
197
		mov esi,buf2d_w ;size x
-
 
198
		imul esi,ecx ;size_x*y
-
 
199
		add esi,ebx	 ;size_x*y+x
-
 
200
		shl esi,2
-
 
201
		add esi,buf2d_data  ;ptr+(size_x*y+x)*4
-
 
202
 
-
 
203
		mov eax,dword[esi] ;copy pixel color
-
 
204
	pop esi
-
 
205
	@@:
-
 
206
	ret
-
 
207
 
-
 
208
;input:
-
 
209
; ebx = coord x
-
 
210
; ecx = coord y
-
 
211
; edx = pixel color + transparent
-
 
212
; edi = pointer to buffer struct
-
 
213
; t_prop, m_prop - ª®íä¨æ¨¥­âë ­¥®¡å®¤¨¬ë¥ ¤«ï ¢ëç¨á«¥­¨ï á⥯¥­¨ ¯à®§à ç­®áâ¨
-
 
214
align 4
-
 
215
transp_32 dd 0 ;梥â à¨á㥬®© â®çª¨ + ¯à®§à ç­®áâì
-
 
216
align 4
-
 
217
proc draw_pixel_transp, t_prop:dword, m_prop:dword
-
 
218
	;cmp buf2d_bits,24
-
 
219
	;jne @f
-
 
220
	bt ebx,31
-
 
221
	jc @f
-
 
222
	bt ecx,31
-
 
223
	jc @f
-
 
224
	cmp ebx,buf2d_w
-
 
225
	jge @f
-
 
226
	cmp ecx,buf2d_h
-
 
227
	jge @f
-
 
228
	push eax ebx edx edi esi
-
 
229
		mov esi,buf2d_w ;size x
-
 
230
		imul esi,ecx ;size_x*y
-
 
231
		add esi,ebx	 ;size_x*y+x
-
 
232
		lea esi,[esi+esi*2] ;(size_x*y+x)*3
-
 
233
		add esi,buf2d_data  ;ptr+(size_x*y+x)*3
-
 
234
 
-
 
235
		mov edi,esi ;㪠§ â¥«ì ­  梥â ä®­ 
-
 
236
		mov dword[transp_32],edx ;梥â à¨á㥬®© â®çª¨
-
 
237
 
-
 
238
		xor edx,edx
-
 
239
		mov eax,[t_prop]
-
 
240
		shl eax,8 ;*=256
-
 
241
		mov ebx,[m_prop]
-
 
242
		div ebx ;¢ëç¨á«ï¥¬ ª®íä. ¯à®§à ç­®á⨠(¤®«¦¥­ ¡ëâì ®â 0 ¤® 255)
-
 
243
		bt ax,8
-
 
244
		jnc .over_255
-
 
245
			;¥á«¨ ª®¥ä. ¯à®§à ç­®á⨠>=256 ⮠㬥­ìè ¥¬ ¥£® ¤® 255
-
 
246
			mov al,0xff
-
 
247
		.over_255:
-
 
248
 
-
 
249
		mov byte[transp_32+3],al ;¯à®§à ç­®áâì à¨á㥬®© â®çª¨
-
 
250
		mov esi,dword transp_32 ;㪠§ â¥«ì ­  梥â à¨á㥬®© â®çª¨
-
 
251
 
-
 
252
		call combine_colors_0
-
 
253
	pop esi edi edx ebx eax
-
 
254
	@@:
-
 
255
	ret
-
 
Line 256... Line 64...
256
endp
64
include 'fun_draw.inc' ;ä㭪樨 à¨á®¢ ­¨ï ¢ ¡ãä¥à¥
257
 
65
 
258
;ᮧ¤ ­¨¥ ¡ãä¥à 
66
;ᮧ¤ ­¨¥ ¡ãä¥à 
259
align 4
67
align 4
Line 312... Line 120...
312
	.end_create:
120
	.end_create:
313
	popad
121
	popad
314
	ret
122
	ret
315
endp
123
endp
Line 316... Line -...
316
 
-
 
317
align 4
-
 
318
proc buf_clear, buf_struc:dword, color:dword ;®ç¨á⪠ ¡ãä¥à  § ¤ ­ë¬ 梥⮬
-
 
319
	pushad
-
 
320
	mov edi,dword[buf_struc]
-
 
321
 
-
 
322
	mov ecx,buf2d_w
-
 
323
	mov ebx,buf2d_h
-
 
324
	imul ecx,ebx
-
 
325
 
-
 
326
	cld
-
 
327
 
-
 
328
	cmp buf2d_bits,8
-
 
329
	jne .end_clear_8
-
 
330
		mov edi,buf2d_data
-
 
331
		mov al,byte[color]
-
 
332
		rep stosb
-
 
333
		jmp .end_clear_32
-
 
334
	.end_clear_8:
-
 
335
 
-
 
336
	cmp buf2d_bits,24
-
 
337
	jne .end_clear_24
-
 
338
		mov edi,buf2d_data
-
 
339
		mov eax,dword[color]
-
 
340
		mov ebx,eax
-
 
341
		shr ebx,16
-
 
342
		@@:
-
 
343
			stosw
-
 
344
			mov byte[edi],bl
-
 
345
			inc edi
-
 
346
			loop @b
-
 
347
		jmp .end_clear_32
-
 
348
	.end_clear_24:
-
 
349
 
-
 
350
	cmp buf2d_bits,32
-
 
351
	jne .end_clear_32
-
 
352
		mov edi,buf2d_data
-
 
353
		mov eax,dword[color]
-
 
354
		rep stosd
-
 
355
		;jmp .end_clear_32
-
 
356
	.end_clear_32:
-
 
357
	popad
-
 
358
	ret
-
 
359
endp
-
 
360
 
124
 
361
;äã­ªæ¨ï ¤«ï ®¡à¥§ ­¨ï ¡ãä¥à®¢ 8 ¨ 24 ¡¨â­ëå, ¯® § ¤ ­®¬ã 梥âã.
125
;äã­ªæ¨ï ¤«ï ®¡à¥§ ­¨ï ¡ãä¥à®¢ 8 ¨ 24 ¡¨â­ëå, ¯® § ¤ ­®¬ã 梥âã.
362
;¯ à ¬¥âà opt § ¤ ¥âáï ª®¬¡¨­ æ¨¥© ª®­áâ ­â:
126
;¯ à ¬¥âà opt § ¤ ¥âáï ª®¬¡¨­ æ¨¥© ª®­áâ ­â:
363
; BUF2D_OPT_CROP_TOP - ®¡à¥§ª  ᢥàåã
127
; BUF2D_OPT_CROP_TOP - ®¡à¥§ª  ᢥàåã
364
; BUF2D_OPT_CROP_LEFT - ®¡à¥§ª  á«¥¢ 
128
; BUF2D_OPT_CROP_LEFT - ®¡à¥§ª  á«¥¢ 
Line 1007... Line 771...
1007
	.end_f:
771
	.end_f:
1008
	popad
772
	popad
1009
	ret
773
	ret
1010
endp
774
endp
Line 1011... Line -...
1011
 
-
 
1012
 
-
 
1013
align 4
-
 
1014
proc buf_draw_buf, buf_struc:dword
-
 
1015
	pushad
-
 
1016
	mov edi,dword[buf_struc]
-
 
1017
	cmp buf2d_bits,24
-
 
1018
	jne .error
-
 
1019
		mov eax,7
-
 
1020
		mov ebx,buf2d_data
-
 
1021
 
-
 
1022
		mov ecx,buf2d_w
-
 
1023
		ror ecx,16
-
 
1024
		mov edx,buf2d_h
-
 
1025
		mov cx,dx
-
 
1026
 
-
 
1027
		mov edx,buf2d_size_lt
-
 
1028
		ror edx,16
-
 
1029
		int 0x40
-
 
1030
		jmp .end_draw_24
-
 
1031
	.error:
-
 
1032
		stdcall print_err,sz_buf2d_draw,txt_err_n24b
-
 
1033
	.end_draw_24:
-
 
1034
	popad
-
 
1035
	ret
-
 
1036
endp
-
 
1037
 
775
 
1038
align 4
776
align 4
1039
proc buf_delete, buf_struc:dword
777
proc buf_delete, buf_struc:dword
1040
	push eax edi
778
	push eax edi
1041
	mov edi,dword[buf_struc]
779
	mov edi,dword[buf_struc]
1042
	invoke mem.free,buf2d_data
780
	invoke mem.free,buf2d_data
1043
	pop edi eax
781
	pop edi eax
1044
	ret
782
	ret
Line -... Line 783...
-
 
783
endp
-
 
784
 
-
 
785
;input:
-
 
786
; new_w - ­®¢ ï è¨à¨­  (¥á«¨ 0 â® ­¥ ¬¥­ï¥âáï)
-
 
787
; new_h - ­®¢ ï ¢ëá®â  (¥á«¨ 0 â® ­¥ ¬¥­ï¥âáï)
1045
endp
788
; options - ¯ à ¬¥âàë ¨§¬¥­¥­¨ï ¡ãä¥à  (1 - ¨§¬¥­ïâì à §¬¥à ¡ãä¥à ,
1046
 
789
;    2 - ¨§¬¥­ïâì ¨§®¡à ¦¥­¨¥ ¢ ¡ãä¥à¥, 3 - ¨§¬¥­ïâì ¡ãä¥à ¨ ¨§®¡à ¦¥­¨¥)
1047
align 4
790
align 4
1048
proc buf_resize, buf_struc:dword, new_w:dword, new_h:dword
791
proc buf_resize, buf_struc:dword, new_w:dword, new_h:dword, options:dword
-
 
792
	pushad
-
 
793
	mov edi,dword[buf_struc]
-
 
794
	cmp buf2d_bits,8
-
 
795
	jne .8bit
-
 
796
		bt dword[options],1 ;ᦠ⨥ ¨§®¡à.
-
 
797
		jnc @f
-
 
798
			;...
-
 
799
		@@:
-
 
800
		bt dword[options],0 ;¨§¬¥­. ¡ãä¥à
-
 
801
		jnc .end_f
-
 
802
			;...
1049
	pushad
803
		jmp .end_f
1050
	mov edi,dword[buf_struc]
804
	.8bit:
-
 
805
	cmp buf2d_bits,24
-
 
806
	jne .24bit
-
 
807
		bt dword[options],1 ;ᦠ⨥ ¨§®¡à.
-
 
808
		jnc .24_end_r
-
 
809
			mov eax,dword[new_w]
-
 
810
			cmp eax,1
-
 
811
			jl @f
-
 
812
			cmp eax,buf2d_w
-
 
813
			jge @f
-
 
814
				;ᦠ⨥ ¯® è¨à¨­¥
-
 
815
				stdcall img_rgb24_wresize, buf2d_data,buf2d_w,buf2d_h,eax
-
 
816
				jmp .24_r_h
-
 
817
			@@:
-
 
818
			mov eax,buf2d_w
-
 
819
			.24_r_h: ;eax - è¨à¨­  ¡ãä¥à  ¨«¨ è¨à¨­  ᦠ⮣® ¨§®¡à ¦¥­¨ï
-
 
820
			mov ebx,dword[new_h]
-
 
821
			cmp ebx,1
-
 
822
			jl @f
-
 
823
			cmp ebx,buf2d_h
-
 
824
			jge @f
-
 
825
				;ᦠ⨥ ¯® ¢ëá®â¥
-
 
826
				;... ¥é¥ ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ...
-
 
827
			@@:
-
 
828
		.24_end_r:
1051
	cmp buf2d_bits,24
829
		bt dword[options],0 ;¨§¬¥­. ¡ãä¥à
1052
	jne .24bit
830
		jnc .end_f
1053
		mov eax,dword[new_w]
831
		mov eax,dword[new_w]
1054
		cmp eax,1
832
		cmp eax,1
1055
		jl @f
833
		jl @f
Line 1065... Line 843...
1065
		imul ecx,ebx
843
		imul ecx,ebx
1066
		lea ecx,[ecx+ecx*2] ; 24 bit = 3
844
		lea ecx,[ecx+ecx*2] ; 24 bit = 3
1067
		invoke mem.realloc,buf2d_data,ecx ;¨§¬¥­ï¥¬ ¯ ¬ïâì § ­¨¬ ¥¬ãî ¡ãä¥à®¬
845
		invoke mem.realloc,buf2d_data,ecx ;¨§¬¥­ï¥¬ ¯ ¬ïâì § ­¨¬ ¥¬ãî ¡ãä¥à®¬
1068
		mov buf2d_data,eax ;­  á«ãç © ¥á«¨ ¨§¬¥­¨«áï 㪠§ â¥«ì ­  ¤ ­­ë¥
846
		mov buf2d_data,eax ;­  á«ãç © ¥á«¨ ¨§¬¥­¨«áï 㪠§ â¥«ì ­  ¤ ­­ë¥
1069
	.24bit:
847
	.24bit:
-
 
848
	.end_f:
1070
	popad
849
	popad
1071
	ret
850
	ret
1072
endp
851
endp
Line 1073... Line 852...
1073
 
852
 
Line 1313... Line 1092...
1313
	popad
1092
	popad
1314
	ret
1093
	ret
1315
endp
1094
endp
Line 1316... Line 1095...
1316
 
1095
 
1317
align 4
-
 
1318
proc buf_line_brs, buf_struc:dword, coord_x0:dword, coord_y0:dword, coord_x1:dword, coord_y1:dword, color:dword
-
 
1319
locals
-
 
1320
	loc_1 dd ?
-
 
1321
	loc_2 dd ?
-
 
1322
	napravl db ?
-
 
1323
endl
-
 
1324
	pushad
-
 
1325
		mov eax,dword[coord_x1]
-
 
1326
		sub eax,dword[coord_x0]
-
 
1327
		bt eax,31
-
 
1328
		jae @f
-
 
1329
			neg eax
-
 
1330
			inc eax
-
 
1331
		@@:
-
 
1332
		mov ebx,dword[coord_y1]
-
 
1333
		sub ebx,dword[coord_y0]
-
 
1334
		jnz @f
-
 
1335
			;¥á«¨ § ¤ ­  £®à¨§®­â «ì­ ï «¨­¨ï y0=y1
-
 
1336
			stdcall buf_line_h, [buf_struc], [coord_x0], [coord_y0], [coord_x1], [color]
-
 
1337
			jmp .coord_end
-
 
1338
		@@:
-
 
1339
		bt ebx,31
-
 
1340
		jae @f
-
 
1341
			neg ebx
-
 
1342
			inc ebx
-
 
1343
		@@:
-
 
1344
		mov edx,dword[color]
-
 
1345
 
-
 
1346
		mov [napravl],byte 0 ;bool steep=false
-
 
1347
		cmp eax,ebx
-
 
1348
		jle @f
-
 
1349
			mov [napravl],byte 1 ;bool steep=true
-
 
1350
			swap dword[coord_x0],dword[coord_y0] ;swap(x0, y0);
-
 
1351
			swap dword[coord_x1],dword[coord_y1] ;swap(x1, y1);
-
 
1352
		@@:
-
 
1353
		mov eax,dword[coord_y0] ;x0
-
 
1354
		cmp eax,dword[coord_y1] ;if(x0>x1)
-
 
1355
		jle @f
-
 
1356
			swap dword[coord_y0],dword[coord_y1] ;swap(x0, x1);
-
 
1357
			swap dword[coord_x0],dword[coord_x1] ;swap(y0, y1);
-
 
1358
		@@:
-
 
1359
 
-
 
1360
; int deltax esi
-
 
1361
; int deltay edi
-
 
1362
; int error  ebp-6
-
 
1363
; int ystep  ebp-8
-
 
1364
 
-
 
1365
		mov eax,dword[coord_y0]
-
 
1366
		mov esi,dword[coord_y1]
-
 
1367
		sub esi,eax ;deltax = y1-y0
-
 
1368
		mov ebx,esi
-
 
1369
		shr ebx,1
-
 
1370
		mov [loc_1],ebx ;error = deltax/2
-
 
1371
 
-
 
1372
		mov eax,dword[coord_x0]
-
 
1373
		mov edi,dword[coord_x1]
-
 
1374
		mov [loc_2],dword -1 ;ystep = -1
-
 
1375
		cmp eax,edi ;if (x0
-
 
1376
		jge @f
-
 
1377
			mov [loc_2],dword 1 ;ystep = 1
-
 
1378
		@@:
-
 
1379
		sub edi,eax ;x1-x0
-
 
1380
 
-
 
1381
		bts edi,31
-
 
1382
		jae @f
-
 
1383
			neg edi
-
 
1384
			inc edi
-
 
1385
		@@:
-
 
1386
		and edi,0x7fffffff ;deltay = abs(x1-x0)
-
 
1387
 
-
 
1388
		mov eax,edi
-
 
1389
		mov edi,[buf_struc]
-
 
1390
		cmp buf2d_bits,8
-
 
1391
		je @f
-
 
1392
		cmp buf2d_bits,24
-
 
1393
		je @f
-
 
1394
			jmp .coord_end
-
 
1395
		@@:
-
 
1396
 
-
 
1397
		cmp [napravl],0
-
 
1398
		jne .coord_yx
-
 
1399
			mov ebx,dword[coord_x0]
-
 
1400
			mov ecx,dword[coord_y0]
-
 
1401
 
-
 
1402
			@@: ;for (x=x0 ; x
-
 
1403
				cmp ecx,dword[coord_y1]
-
 
1404
				jg @f ;jge ???
-
 
1405
				call draw_pixel
-
 
1406
 
-
 
1407
				sub dword[loc_1],eax ;error -= deltay
-
 
1408
				cmp dword[loc_1],0 ;if(error<0)
-
 
1409
				jge .if0
-
 
1410
					add ebx,[loc_2] ;y += ystep
-
 
1411
					add [loc_1],esi ;error += deltax
-
 
1412
				.if0:
-
 
1413
				inc ecx
-
 
1414
				jmp @b
-
 
1415
			@@:
-
 
1416
			jmp .coord_end
-
 
1417
		.coord_yx:
-
 
1418
			mov ebx,dword[coord_y0]
-
 
1419
			mov ecx,dword[coord_x0]
-
 
1420
 
-
 
1421
			@@: ;for (x=x0 ; x
-
 
1422
				cmp ebx,dword[coord_y1]
-
 
1423
				jg @f ;jge ???
-
 
1424
				call draw_pixel
-
 
1425
 
-
 
1426
				sub dword[loc_1],eax ;error -= deltay
-
 
1427
				cmp dword[loc_1],0 ;if(error<0)
-
 
1428
				jge .if1
-
 
1429
					add ecx,[loc_2] ;y += ystep
-
 
1430
					add [loc_1],esi ;error += deltax
-
 
1431
				.if1:
-
 
1432
				inc ebx
-
 
1433
				jmp @b
-
 
1434
			@@:
-
 
1435
	.coord_end:
-
 
1436
	popad
-
 
1437
	ret
-
 
1438
endp
-
 
1439
 
-
 
1440
;à¨á®¢ ­¨¥ ᣫ ¦¥­­®© «¨­¨¨
-
 
1441
align 4
-
 
1442
proc buf_line_brs_sm, buf_struc:dword, coord_x0:dword, coord_y0:dword, coord_x1:dword, coord_y1:dword, color:dword
-
 
1443
locals
-
 
1444
	loc_1 dd ?
-
 
1445
	loc_2 dd ?
-
 
1446
	napravl db ?
-
 
1447
endl
-
 
1448
	pushad
-
 
1449
		mov eax,dword[coord_x1]
-
 
1450
		sub eax,dword[coord_x0]
-
 
1451
		bt eax,31
-
 
1452
		jae @f
-
 
1453
			neg eax
-
 
1454
			inc eax
-
 
1455
		@@:
-
 
1456
		mov ebx,dword[coord_y1]
-
 
1457
		sub ebx,dword[coord_y0]
-
 
1458
		jnz @f
-
 
1459
			;¥á«¨ § ¤ ­  £®à¨§®­â «ì­ ï «¨­¨ï y0=y1
-
 
1460
			stdcall buf_line_h, [buf_struc], [coord_x0], [coord_y0], [coord_x1], [color]
-
 
1461
			jmp .coord_end
-
 
1462
		@@:
-
 
1463
		bt ebx,31
-
 
1464
		jae @f
-
 
1465
			neg ebx
-
 
1466
			inc ebx
-
 
1467
		@@:
-
 
1468
		mov edx,dword[color]
-
 
1469
 
-
 
1470
		mov [napravl],byte 0 ;bool steep=false
-
 
1471
		cmp eax,ebx
-
 
1472
		jle @f
-
 
1473
			mov [napravl],byte 1 ;bool steep=true
-
 
1474
			swap dword[coord_x0],dword[coord_y0] ;swap(x0, y0);
-
 
1475
			swap dword[coord_x1],dword[coord_y1] ;swap(x1, y1);
-
 
1476
		@@:
-
 
1477
		mov eax,dword[coord_y0] ;x0
-
 
1478
		cmp eax,dword[coord_y1] ;if(x0>x1)
-
 
1479
		jle @f
-
 
1480
			swap dword[coord_y0],dword[coord_y1] ;swap(x0, x1);
-
 
1481
			swap dword[coord_x0],dword[coord_x1] ;swap(y0, y1);
-
 
1482
		@@:
-
 
1483
 
-
 
1484
; int deltax esi
-
 
1485
; int deltay edi
-
 
1486
; int error  ebp-6
-
 
1487
; int ystep  ebp-8
-
 
1488
 
-
 
1489
		mov eax,dword[coord_y0]
-
 
1490
		mov esi,dword[coord_y1]
-
 
1491
		sub esi,eax ;deltax = y1-y0
-
 
1492
		mov ebx,esi
-
 
1493
		shr ebx,1
-
 
1494
		mov [loc_1],ebx ;error = deltax/2
-
 
1495
 
-
 
1496
		mov eax,dword[coord_x0]
-
 
1497
		mov edi,dword[coord_x1]
-
 
1498
		mov [loc_2],dword -1 ;ystep = -1
-
 
1499
		cmp eax,edi ;if (x0
-
 
1500
		jge @f
-
 
1501
			mov [loc_2],dword 1 ;ystep = 1
-
 
1502
		@@:
-
 
1503
		sub edi,eax ;x1-x0
-
 
1504
 
-
 
1505
		bts edi,31
-
 
1506
		jae @f
-
 
1507
			neg edi
-
 
1508
			inc edi
-
 
1509
		@@:
-
 
1510
		and edi,0x7fffffff ;deltay = abs(x1-x0)
-
 
1511
 
-
 
1512
		mov eax,edi
-
 
1513
		mov edi,[buf_struc]
-
 
1514
		cmp buf2d_bits,24
-
 
1515
		jne .coord_end
-
 
1516
 
-
 
1517
		cmp [napravl],0
-
 
1518
		jne .coord_yx
-
 
1519
			mov ebx,dword[coord_x0]
-
 
1520
			mov ecx,dword[coord_y0]
-
 
1521
 
-
 
1522
			@@: ;for (x=x0 ; x
-
 
1523
				cmp ecx,dword[coord_y1]
-
 
1524
				jg @f ;jge ???
-
 
1525
				push eax
-
 
1526
					mov eax,esi
-
 
1527
					sub eax,[loc_1]
-
 
1528
					stdcall draw_pixel_transp, eax,esi
-
 
1529
				pop eax
-
 
1530
				add ebx,[loc_2]
-
 
1531
				stdcall draw_pixel_transp, [loc_1],esi
-
 
1532
				sub ebx,[loc_2]
-
 
1533
 
-
 
1534
				sub dword[loc_1],eax ;error -= deltay
-
 
1535
				cmp dword[loc_1],0 ;if(error<0)
-
 
1536
				jge .if0
-
 
1537
					add ebx,[loc_2] ;y += ystep
-
 
1538
					add [loc_1],esi ;error += deltax
-
 
1539
				.if0:
-
 
1540
				inc ecx
-
 
1541
				jmp @b
-
 
1542
			@@:
-
 
1543
			jmp .coord_end
-
 
1544
		.coord_yx:
-
 
1545
			mov ebx,dword[coord_y0]
-
 
1546
			mov ecx,dword[coord_x0]
-
 
1547
 
-
 
1548
			@@: ;for (x=x0 ; x
-
 
1549
				cmp ebx,dword[coord_y1]
-
 
1550
				jg @f ;jge ???
-
 
1551
				push eax
-
 
1552
					mov eax,esi
-
 
1553
					sub eax,[loc_1]
-
 
1554
					stdcall draw_pixel_transp, eax,esi
-
 
1555
				pop eax
-
 
1556
				add ecx,[loc_2]
-
 
1557
				stdcall draw_pixel_transp, [loc_1],esi
-
 
1558
				sub ecx,[loc_2]
-
 
1559
 
-
 
1560
				sub dword[loc_1],eax ;error -= deltay
-
 
1561
				cmp dword[loc_1],0 ;if(error<0)
-
 
1562
				jge .if1
-
 
1563
					add ecx,[loc_2] ;y += ystep
-
 
1564
					add [loc_1],esi ;error += deltax
-
 
1565
				.if1:
-
 
1566
				inc ebx
-
 
1567
				jmp @b
-
 
1568
			@@:
-
 
1569
	.coord_end:
-
 
1570
	popad
-
 
1571
	ret
-
 
1572
endp
-
 
1573
 
-
 
1574
;à¨á®¢ ­¨¥ £®à¨§®­â «ì­®© «¨­¨¨, ¯®â®¬ã ­¥â ¯ à ¬¥âà  coord_y1
-
 
1575
align 4
-
 
1576
proc buf_line_h, buf_struc:dword, coord_x0:dword, coord_y0:dword, coord_x1:dword, color:dword
-
 
1577
	pushad
-
 
1578
	pushfd
-
 
1579
		mov edi,[buf_struc]
-
 
1580
		cmp buf2d_bits,8
-
 
1581
		je @f
-
 
1582
		cmp buf2d_bits,24
-
 
1583
		je @f
-
 
1584
			jmp .end24
-
 
1585
		@@: ;®¯à¥¤¥«¥­¨¥ ª®®à¤¨­ â «¨­¨¨ ®â­®á¨â¥«ì­® ¡ãä¥à 
-
 
1586
 
-
 
1587
		mov ecx,dword[coord_y0]
-
 
1588
		bt ecx,31
-
 
1589
		jc .end24 ;¥á«¨ ª®®à¤¨­ â  y0 ®âà¨æ â¥«ì­ ï
-
 
1590
		cmp ecx,buf2d_h
-
 
1591
		jge .end24 ;¥á«¨ ª®®à¤¨­ â  y0 ¡®«ìè¥ ¢ëá®âë ¡ãä¥à 
-
 
1592
 
-
 
1593
		mov ebx,dword[coord_x0]
-
 
1594
		mov esi,dword[coord_x1]
-
 
1595
		cmp ebx,esi
-
 
1596
		jle @f
-
 
1597
			xchg ebx,esi ;¥á«¨ x0 > x1 â® ¬¥­ï¥¬ ¬¥áâ ¬¨ x0 ¨ x1
-
 
1598
		@@:
-
 
1599
		bt ebx,31
-
 
1600
		jae @f
-
 
1601
			;¥á«¨ ª®®à¤¨­ â  x0 ®âà¨æ â¥«ì­ ï
-
 
1602
			xor ebx,ebx
-
 
1603
		@@:
-
 
1604
		cmp esi,buf2d_w
-
 
1605
		jl @f
-
 
1606
			;¥á«¨ ª®®à¤¨­ â  x0 ¡®«ìè¥ è¨à¨­ë ¡ãä¥à 
-
 
1607
			mov esi,buf2d_w
-
 
1608
			dec esi
-
 
1609
		@@:
-
 
1610
		cmp ebx,esi
-
 
1611
		jg .end24 ;¥á«¨ x0 > x1 ¬®¦¥â ¢®§­¨ª­ãâì ª®£¤  ®¡¥ ª®®à¤¨­ âë x0, x1 ­ å®¤¨«¨áì §  ®¤­¨¬ ¨§ ¯à¥¤¥«®¢ ¡ãä¥à 
-
 
1612
 
-
 
1613
		cmp buf2d_bits,24
-
 
1614
		je .beg24
-
 
1615
			;à¨á®¢ ­¨¥ ¢ 8 ¡¨â­®¬ ¡ãä¥à¥
-
 
1616
			;¢ edx ¢ëç¨á«ï¥¬ ­ ç «® 1-© â®çª¨ «¨­¨¨ ¢ ¡ãä¥à¥ ¨§®¡à ¦¥­¨ï
-
 
1617
			mov edx,buf2d_w ;size x
-
 
1618
			imul edx,ecx ;size_x*y
-
 
1619
			add edx,ebx	 ;size_x*y+x
-
 
1620
			add edx,buf2d_data ;ptr+(size_x*y+x)
-
 
1621
			mov edi,edx ;⥯¥àì ¬®¦¥¬ ¯®àâ¨âì 㪠§ â¥«ì ­  ¡ãä¥à
-
 
1622
 
-
 
1623
			mov ecx,esi
-
 
1624
			sub ecx,ebx ;¢ ecx ª®««¨ç¥á⢮ â®ç¥ª «¨­¨¨ ¢ë¢®¤¨¬ëå ¢ ¡ãä¥à
-
 
1625
			inc ecx ;çâ®-¡ë ¯®á«¥¤­ïï â®çª  «¨­¨¨ â ª¦¥ ®â®¡à ¦ « áì
-
 
1626
			mov eax,dword[color] ;¡ã¤¥¬ ¨á¯®«ì§®¢ âì ⮫쪮 §­ ç¥­¨¥ ¢ al
-
 
1627
			cld
-
 
1628
			rep stosb ;横« ¯® ®á¨ x ®â x0 ¤® x1 (¢ª«îç ï x1)
-
 
1629
			jmp .end24
-
 
1630
 
-
 
1631
		.beg24: ;à¨á®¢ ­¨¥ ¢ 24 ¡¨â­®¬ ¡ãä¥à¥
-
 
1632
		;¢ eax ¢ëç¨á«ï¥¬ ­ ç «® 1-© â®çª¨ «¨­¨¨ ¢ ¡ãä¥à¥ ¨§®¡à ¦¥­¨ï
-
 
1633
		mov eax,buf2d_w ;size x
-
 
1634
		imul eax,ecx ;size_x*y
-
 
1635
		add eax,ebx	 ;size_x*y+x
-
 
1636
		lea eax,[eax+eax*2] ;(size_x*y+x)*3
-
 
1637
		add eax,buf2d_data  ;ptr+(size_x*y+x)*3
-
 
1638
 
-
 
1639
		mov ecx,esi
-
 
1640
		sub ecx,ebx ;¢ ecx ª®««¨ç¥á⢮ â®ç¥ª «¨­¨¨ ¢ë¢®¤¨¬ëå ¢ ¡ãä¥à
-
 
1641
		inc ecx ;çâ®-¡ë ¯®á«¥¤­ïï â®çª  «¨­¨¨ â ª¦¥ ®â®¡à ¦ « áì
-
 
1642
		mov edx,dword[color]
-
 
1643
		mov ebx,edx ;ª®®à¤¨­ â  x0 ¢ ebx 㦥 ­¥ ­ã¦­ 
-
 
1644
		ror edx,16 ;¯®¢®à ç¨¢ ¥¬ ॣ¨áâà çâ® ¡ë 3-© ¡ ©â ¯®¯ « ¢ dl
-
 
1645
		cld
-
 
1646
		@@: ;横« ¯® ®á¨ x ®â x0 ¤® x1 (¢ª«îç ï x1)
-
 
1647
			mov word[eax],bx ;copy pixel color
-
 
1648
			mov byte[eax+2],dl
-
 
1649
			add eax,3
-
 
1650
			loop @b
-
 
1651
		.end24:
-
 
1652
	popfd
-
 
1653
	popad
-
 
1654
	ret
-
 
1655
endp
-
 
1656
 
-
 
1657
align 4
-
 
1658
proc buf_rect_by_size, buf_struc:dword, coord_x:dword,coord_y:dword,w:dword,h:dword, color:dword
-
 
1659
pushad
-
 
1660
	mov edi,[buf_struc]
-
 
1661
	cmp buf2d_bits,8
-
 
1662
	je @f
-
 
1663
	cmp buf2d_bits,24
-
 
1664
	je @f
-
 
1665
		jmp .coord_end
-
 
1666
	@@:
-
 
1667
 
-
 
1668
		mov eax,[coord_x]
-
 
1669
		mov ebx,[coord_y]
-
 
1670
		mov ecx,[w]
-
 
1671
		;cmp ecx,1
-
 
1672
		;jl .coord_end
-
 
1673
		cmp ecx,0
-
 
1674
		je .coord_end
-
 
1675
		jg @f
-
 
1676
			add eax,ecx
-
 
1677
			inc eax
-
 
1678
			neg ecx
-
 
1679
		@@:
-
 
1680
		add ecx,eax
-
 
1681
		dec ecx
-
 
1682
		mov edx,[h]
-
 
1683
		;cmp edx,1
-
 
1684
		;jl .coord_end
-
 
1685
		cmp edx,0
-
 
1686
		je .coord_end
-
 
1687
		jg @f
-
 
1688
			add ebx,edx
-
 
1689
			inc ebx
-
 
1690
			neg edx
-
 
1691
		@@:
-
 
1692
 
-
 
1693
		add edx,ebx
-
 
1694
		dec edx
-
 
1695
		mov esi,dword[color]
-
 
1696
		stdcall buf_line_h, edi, eax, ebx, ecx, esi ;«¨­¨ï -
-
 
1697
		stdcall buf_line_brs, edi, eax, ebx, eax, edx, esi ;«¨­¨ï |
-
 
1698
		stdcall buf_line_h, edi, eax, edx, ecx, esi ;«¨­¨ï -
-
 
1699
		stdcall buf_line_brs, edi, ecx, ebx, ecx, edx, esi ;«¨­¨ï |
-
 
1700
	.coord_end:
-
 
1701
popad
-
 
1702
	ret
-
 
1703
endp
-
 
1704
 
-
 
1705
align 4
-
 
1706
proc buf_filled_rect_by_size, buf_struc:dword, coord_x:dword,coord_y:dword,w:dword,h:dword, color:dword
-
 
1707
pushad
-
 
1708
	mov edi,[buf_struc]
-
 
1709
	cmp buf2d_bits,8
-
 
1710
	je @f
-
 
1711
	cmp buf2d_bits,24
-
 
1712
	je @f
-
 
1713
		jmp .coord_end
-
 
1714
	@@:
-
 
1715
		mov eax,[coord_x]
-
 
1716
		mov ebx,[coord_y]
-
 
1717
		mov edx,[w]
-
 
1718
		cmp edx,0
-
 
1719
		je .coord_end ;¥á«¨ ¢ëá®â  0 ¯¨ªá¥«¥©
-
 
1720
		jg @f ;¥á«¨ ¢ëá®â  ¯®«®¦¨â¥«ì­ ï
-
 
1721
			add eax,edx
-
 
1722
			inc eax
-
 
1723
			neg edx ;è¨à¨­ã ¤¥« ¥¬ ¯®«®¦¨â¥«ì­®©
-
 
1724
			;inc edx ;¯®ç¥¬ã âãâ ­¥ ¤®¡ ¢«ï¥¬ 1-æã ï ­¥ §­ î, ­® á ­¥© à ¡®â ¥â ­¥ ¯à ¢¨«ì­®
-
 
1725
		@@:
-
 
1726
		add edx,eax
-
 
1727
		dec edx
-
 
1728
		mov ecx,[h]
-
 
1729
		cmp ecx,0
-
 
1730
		je .coord_end ;¥á«¨ ¢ëá®â  0 ¯¨ªá¥«¥©
-
 
1731
		jg @f ;¥á«¨ ¢ëá®â  ¯®«®¦¨â¥«ì­ ï
-
 
1732
			add ebx,ecx ;ᤢ¨£ ¥¬ ¢¥àå­îî ª®®à¤¨­ âã ¯àאַ㣮«ì­¨ª 
-
 
1733
			inc ebx
-
 
1734
			neg ecx ;¢ëá®âã ¤¥« ¥¬ ¯®«®¦¨â¥«ì­®©
-
 
1735
			;inc ecx ;¯®ç¥¬ã âãâ ­¥ ¤®¡ ¢«ï¥¬ 1-æã ï ­¥ §­ î, ­® á ­¥© à ¡®â ¥â ­¥ ¯à ¢¨«ì­®
-
 
1736
		@@:
-
 
1737
		mov esi,dword[color]
-
 
1738
		cld
-
 
1739
		@@:
-
 
1740
			stdcall buf_line_h, edi, eax, ebx, edx, esi ;«¨­¨ï -
-
 
1741
			inc ebx
-
 
1742
			loop @b
-
 
1743
	.coord_end:
-
 
1744
popad
-
 
1745
	ret
-
 
1746
endp
-
 
1747
 
-
 
1748
align 4
-
 
1749
proc buf_circle, buf_struc:dword, coord_x:dword, coord_y:dword, r:dword, color:dword
-
 
1750
locals
-
 
1751
	po_x dd ?
-
 
1752
	po_y dd ?
-
 
1753
endl
-
 
1754
	pushad
-
 
1755
	mov edi,dword[buf_struc]
-
 
1756
	cmp buf2d_bits,8
-
 
1757
	je @f
-
 
1758
	cmp buf2d_bits,24
-
 
1759
	je @f
-
 
1760
		jmp .error
-
 
1761
	@@:
-
 
1762
		mov edx,dword[color]
-
 
1763
 
-
 
1764
		finit
-
 
1765
		fild dword[coord_x]
-
 
1766
		fild dword[coord_y]
-
 
1767
		fild dword[r]
-
 
1768
		fldz ;px=0
-
 
1769
		fld st1 ;py=r
-
 
1770
 
-
 
1771
		fldpi
-
 
1772
		fmul st0,st3
-
 
1773
		fistp dword[po_x]
-
 
1774
		mov esi,dword[po_x] ;esi=pi*r
-
 
1775
		shl esi,1 ;esi=2*pi*r
-
 
1776
 
-
 
1777
		;st0 = py
-
 
1778
		;st1 = px
-
 
1779
		;st2 = r
-
 
1780
		;st3 = y
-
 
1781
		;st4 = x
-
 
1782
 
-
 
1783
		@@:
-
 
1784
			;Point(px + x, y - py)
-
 
1785
			fld st1 ;st0=px
-
 
1786
			fadd st0,st5 ;st0=px+x
-
 
1787
			fistp dword[po_x]
-
 
1788
			mov ebx,dword[po_x]
-
 
1789
			fld st3 ;st0=y
-
 
1790
			fsub st0,st1 ;st0=y-py
-
 
1791
			fistp dword[po_y]
-
 
1792
			mov ecx,dword[po_y]
-
 
1793
			call draw_pixel
-
 
1794
			;px += py/r
-
 
1795
			fld st0 ;st0=py
-
 
1796
			fdiv st0,st3 ;st0=py/r
-
 
1797
			faddp st2,st0 ;st3+=st0
-
 
1798
			;py -= px/r
-
 
1799
			fld st1 ;st0=px
-
 
1800
			fdiv st0,st3 ;st0=px/r
-
 
1801
			fsubp st1,st0 ;st2-=st0
-
 
1802
 
-
 
1803
			dec esi
-
 
1804
			cmp esi,0
-
 
1805
			jge @b
-
 
1806
		jmp .exit_fun
-
 
1807
	.error:
-
 
1808
		stdcall print_err,sz_buf2d_circle,txt_err_n8_24b
-
 
1809
	.exit_fun:
-
 
1810
 
-
 
1811
	popad
-
 
1812
	ret
-
 
1813
endp
-
 
1814
 
-
 
1815
;äã­ªæ¨ï ¤«ï § «¨¢ª¨ ®¡« á⨠¢ë¡à ­­ë¬ 梥⮬
-
 
1816
align 4
-
 
1817
proc buf_flood_fill, buf_struc:dword, coord_x:dword, coord_y:dword, mode:dword, color_f:dword, color_b:dword
-
 
1818
	pushad
-
 
1819
		mov edi,[buf_struc]
-
 
1820
		cmp buf2d_bits,24
-
 
1821
		jne .end24
-
 
1822
 
-
 
1823
			mov ebx,dword[coord_x]
-
 
1824
			mov ecx,dword[coord_y]
-
 
1825
			mov edx,dword[color_f]
-
 
1826
			mov esi,dword[color_b]
-
 
1827
 
-
 
1828
			cmp dword[mode],1 ;¢ § ¢¨á¨¬®á⨠®â 'mode' ®¯à¥¤¥«ï¥¬ ª ª¨¬  «£®à¨â¬®¬ ¡ã¤¥¬ ¯®«ì§®¢ âìáï
-
 
1829
			je @f
-
 
1830
				call buf_flood_fill_recurs_0 ;§ «¨¢ ¥¬ ¤® ¯¨ªá¥«¥© æ¢¥â  esi
-
 
1831
				jmp .end24
-
 
1832
			@@:
-
 
1833
				call buf_flood_fill_recurs_1 ;§ «¨¢ ¥¬ ¯¨ªá¥«¨ ¨¬¥î騥 梥â esi
-
 
1834
 
-
 
1835
		.end24:
-
 
1836
	popad
-
 
1837
	ret
-
 
1838
endp
-
 
1839
 
-
 
1840
;input:
-
 
1841
; ebx = coord_x
-
 
1842
; ecx = coord_y
-
 
1843
; edx = 梥⠧ «¨¢ª¨
-
 
1844
; esi = 梥⠣࠭¨æë, ¤® ª®â®à®© ¡ã¤¥â ¨â¨ § «¨¢ª 
-
 
1845
; edi = buf_struc
-
 
1846
;output:
-
 
1847
; eax = ¯®àâ¨âáï
-
 
1848
align 4
-
 
1849
buf_flood_fill_recurs_0:
-
 
1850
	call get_pixel_24
-
 
1851
	cmp eax,0xffffffff ;if error coords
-
 
1852
	je .end_fun
-
 
1853
	cmp eax,edx ;¥á«¨ 梥⠯¨ªá¥«ï ᮢ¯ « á 梥⮬ § «¨¢ª¨, §­ ç¨â § «¨¢ª  ¢ í⮩ ®¡« á⨠㦥 ¡ë«  ᤥ« ­ 
-
 
1854
	je .end_fun
-
 
1855
 
-
 
1856
		call draw_pixel
-
 
1857
 
-
 
1858
		dec ebx
-
 
1859
		call get_pixel_24
-
 
1860
		cmp eax,esi
-
 
1861
		je @f
-
 
1862
			call buf_flood_fill_recurs_0
-
 
1863
		@@:
-
 
1864
		inc ebx
-
 
1865
 
-
 
1866
 
-
 
1867
		inc ebx
-
 
1868
		call get_pixel_24
-
 
1869
		cmp eax,esi
-
 
1870
		je @f
-
 
1871
			call buf_flood_fill_recurs_0
-
 
1872
		@@:
-
 
1873
		dec ebx
-
 
1874
 
-
 
1875
		dec ecx
-
 
1876
		call get_pixel_24
-
 
1877
		cmp eax,esi
-
 
1878
		je @f
-
 
1879
			call buf_flood_fill_recurs_0
-
 
1880
		@@:
-
 
1881
		inc ecx
-
 
1882
 
-
 
1883
		inc ecx
-
 
1884
		call get_pixel_24
-
 
1885
		cmp eax,esi
-
 
1886
		je @f
-
 
1887
			call buf_flood_fill_recurs_0
-
 
1888
		@@:
-
 
1889
		dec ecx
-
 
1890
 
-
 
1891
	.end_fun:
-
 
1892
	ret
-
 
1893
 
-
 
1894
;input:
-
 
1895
; ebx = coord_x
-
 
1896
; ecx = coord_y
-
 
1897
; edx = 梥⠧ «¨¢ª¨
-
 
1898
; esi = 梥⠯¨ªá¥«¥©, ¯® ª®â®àë¬ ¡ã¤¥â ¨â¨ § «¨¢ª 
-
 
1899
; edi = buf_struc
-
 
1900
;output:
-
 
1901
; eax = ¯®àâ¨âáï
-
 
1902
align 4
-
 
1903
buf_flood_fill_recurs_1:
-
 
1904
	call get_pixel_24
-
 
1905
	cmp eax,0xffffffff ;if error coords
-
 
1906
	je .end_fun
-
 
1907
	cmp eax,edx ;¥á«¨ 梥⠯¨ªá¥«ï ᮢ¯ « á 梥⮬ § «¨¢ª¨, §­ ç¨â § «¨¢ª  ¢ í⮩ ®¡« á⨠㦥 ¡ë«  ᤥ« ­ 
-
 
1908
	je .end_fun
-
 
1909
	cmp eax,esi ;¥á«¨ 梥⠯¨ªá¥«ï ­¥ ᮢ¯ « á § «¨¢ ¥¬ë¬ 梥⮬ § «¨¢ª¨, â® ¯à¥ªà é ¥¬ § «¨¢ªã
-
 
1910
	jne .end_fun
-
 
1911
 
-
 
1912
		call draw_pixel
-
 
1913
 
-
 
1914
		dec ebx
-
 
1915
		call get_pixel_24
-
 
1916
		cmp eax,esi
-
 
1917
		jne @f
-
 
1918
			call buf_flood_fill_recurs_1
-
 
1919
		@@:
-
 
1920
		inc ebx
-
 
1921
 
-
 
1922
 
-
 
1923
		inc ebx
-
 
1924
		call get_pixel_24
-
 
1925
		cmp eax,esi
-
 
1926
		jne @f
-
 
1927
			call buf_flood_fill_recurs_1
-
 
1928
		@@:
-
 
1929
		dec ebx
-
 
1930
 
-
 
1931
		dec ecx
-
 
1932
		call get_pixel_24
-
 
1933
		cmp eax,esi
-
 
1934
		jne @f
-
 
1935
			call buf_flood_fill_recurs_1
-
 
1936
		@@:
-
 
1937
		inc ecx
-
 
1938
 
-
 
1939
		inc ecx
-
 
1940
		call get_pixel_24
-
 
1941
		cmp eax,esi
-
 
1942
		jne @f
-
 
1943
			call buf_flood_fill_recurs_1
-
 
1944
		@@:
-
 
1945
		dec ecx
-
 
1946
 
-
 
1947
	.end_fun:
-
 
1948
	ret
-
 
1949
 
-
 
1950
;äã­ªæ¨ï ¤«ï à¨á®¢ ­¨ï â®çª¨
-
 
1951
align 4
-
 
1952
proc buf_set_pixel uses ebx ecx edx edi, buf_struc:dword, coord_x:dword, coord_y:dword, color:dword
-
 
1953
	mov edi,dword[buf_struc]
-
 
1954
	mov ebx,dword[coord_x]
-
 
1955
	mov ecx,dword[coord_y]
-
 
1956
	mov edx,dword[color]
-
 
1957
	call draw_pixel
-
 
1958
	ret
-
 
1959
endp
-
 
1960
 
-
 
1961
;output:
-
 
1962
; eax = 梥â â®çª¨
-
 
1963
; ¢ á«ãç ¥ ®è¨¡ª¨ eax = 0xffffffff
-
 
1964
align 4
-
 
1965
proc buf_get_pixel uses ebx ecx edi, buf_struc:dword, coord_x:dword, coord_y:dword
-
 
1966
	mov edi,dword[buf_struc]
-
 
1967
	mov ebx,[coord_x]
-
 
1968
	mov ecx,[coord_y]
-
 
1969
 
-
 
1970
	cmp buf2d_bits,8
-
 
1971
	jne @f
-
 
1972
		call get_pixel_8
-
 
1973
		jmp .end_fun
-
 
1974
	@@:
-
 
1975
	cmp buf2d_bits,24
-
 
1976
	jne @f
-
 
1977
		call get_pixel_24
-
 
1978
		jmp .end_fun
-
 
1979
	@@:
-
 
1980
	cmp buf2d_bits,32
-
 
1981
	jne @f
-
 
1982
		call get_pixel_32
-
 
1983
		;jmp .end_fun
-
 
1984
	@@:
-
 
1985
	.end_fun:
-
 
1986
	ret
-
 
1987
endp
-
 
1988
 
-
 
1989
align 4
1096
align 4
1990
proc buf_flip_h, buf_struc:dword
1097
proc buf_flip_h, buf_struc:dword
1991
pushad
1098
pushad
1992
	mov edi,[buf_struc]
1099
	mov edi,[buf_struc]
1993
	cmp buf2d_bits,24
1100
	cmp buf2d_bits,24
Line 2136... Line 1243...
2136
	.end_32:
1243
	.end_32:
2137
	popad
1244
	popad
2138
	ret
1245
	ret
2139
endp
1246
endp
Line -... Line 1247...
-
 
1247
 
-
 
1248
;description:
2140
 
1249
; ᦠ⨥ ¨§®¡à ¦¥­¨ï ¯® è¨à¨­¥ ¢ 2 à §  (à §¬¥àë ¡ãä¥à  ­¥ ¬¥­ïîâáï)
2141
align 4
1250
align 4
2142
proc buf_img_wdiv2, buf_struc:dword
1251
proc buf_img_wdiv2, buf_struc:dword
2143
	pushad
1252
	pushad
2144
	mov edi,dword[buf_struc]
1253
	mov edi,dword[buf_struc]
Line 2285... Line 1394...
2285
		loop @b
1394
		loop @b
2286
	ret
1395
	ret
2287
endp
1396
endp
Line 2288... Line 1397...
2288
 
1397
 
2289
;description:
1398
;description:
2290
; ᦠ⨥ ¨§®¡à ¦¥­¨ï ¯® ¢ëá®â¥ (¢ëá®â  ¡ãä¥à  ­¥ ¬¥­ï¥âáï)
1399
; ᦠ⨥ ¨§®¡à ¦¥­¨ï ¯® ¢ëá®â¥ ¢ 2 à §  (¢ëá®â  ¡ãä¥à  ­¥ ¬¥­ï¥âáï)
2291
align 4
1400
align 4
2292
proc buf_img_hdiv2, buf_struc:dword
1401
proc buf_img_hdiv2, buf_struc:dword
2293
	pushad
1402
	pushad
2294
	mov edi,dword[buf_struc]
1403
	mov edi,dword[buf_struc]
Line 2379... Line 1488...
2379
		jl .old_line_2
1488
		jl .old_line_2
2380
			add ebx,esi
1489
			add ebx,esi
2381
			xor edi,edi
1490
			xor edi,edi
2382
		.old_line_2:
1491
		.old_line_2:
2383
		loop @b
1492
		loop @b
2384
 
-
 
2385
	ret
1493
	ret
2386
endp
1494
endp
Line 2387... Line 1495...
2387
 
1495
 
2388
;input:
1496
;input:
Line 2424... Line 1532...
2424
      add ebx,esi
1532
      add ebx,esi
2425
      xor edi,edi
1533
      xor edi,edi
2426
    .old_line:
1534
    .old_line:
2427
    loop @b
1535
    loop @b
Line 2428... Line -...
2428
 
-
 
2429
 
1536
 
2430
  mov eax,dword[data_rgb] ;eax =
1537
  mov eax,dword[data_rgb] ;eax =
2431
  add eax,esi ;esi = width*3(rgb)
1538
  add eax,esi ;esi = width*3(rgb)
2432
  mov ebx,eax
1539
  mov ebx,eax
2433
  add ebx,esi
1540
  add ebx,esi
Line 2448... Line 1555...
2448
    jl .old_line_2
1555
    jl .old_line_2
2449
      add ebx,esi
1556
      add ebx,esi
2450
      xor edi,edi
1557
      xor edi,edi
2451
    .old_line_2:
1558
    .old_line_2:
2452
    loop @b
1559
    loop @b
2453
 
-
 
2454
  ret
1560
  ret
2455
endp
1561
endp
Line 2456... Line 1562...
2456
 
1562
 
2457
;input:
1563
;input:
Line 2480... Line 1586...
2480
			add ebx,dword[size_w_b]
1586
			add ebx,dword[size_w_b]
2481
			xor edi,edi
1587
			xor edi,edi
2482
		.old_line:
1588
		.old_line:
2483
		loop @b
1589
		loop @b
Line 2484... Line -...
2484
 
-
 
2485
 
1590
 
2486
	mov eax,dword[data_rgba] ;eax =
1591
	mov eax,dword[data_rgba] ;eax =
2487
	mov ebx,dword[size_w_b]
1592
	mov ebx,dword[size_w_b]
2488
	add eax,ebx
1593
	add eax,ebx
2489
	add ebx,eax
1594
	add ebx,eax
Line 2503... Line 1608...
2503
		jl .old_line_2
1608
		jl .old_line_2
2504
			add ebx,dword[size_w_b]
1609
			add ebx,dword[size_w_b]
2505
			xor edi,edi
1610
			xor edi,edi
2506
		.old_line_2:
1611
		.old_line_2:
2507
		loop @b
1612
		loop @b
2508
 
-
 
2509
	ret
1613
	ret
2510
endp
1614
endp
Line 2511... Line 1615...
2511
 
1615
 
2512
;input:
1616
;input:
Line 2620... Line 1724...
2620
		add edx,edi
1724
		add edx,edi
2621
	.end_f:
1725
	.end_f:
2622
	ret
1726
	ret
2623
endp
1727
endp
Line -... Line 1728...
-
 
1728
 
-
 
1729
;description:
-
 
1730
; ᦠ⨥ ¨§®¡à ¦¥­¨ï ¯® è¨à¨­¥ (à §¬¥àë ¡ãä¥à  ­¥ ¬¥­ïîâáï)
-
 
1731
;input:
-
 
1732
; data_rgb - pointer to rgb data
-
 
1733
; size_w - width img in pixels
-
 
1734
; size_h - height img in pixels
-
 
1735
; size_w_new - new width img in pixels
-
 
1736
align 16
-
 
1737
proc img_rgb24_wresize, data_rgb:dword, size_w:dword, size_h:dword, size_w_new:dword
-
 
1738
locals
-
 
1739
	pr dd 0
-
 
1740
	pg dd 0
-
 
1741
	pb dd 0
-
 
1742
	img_n dd ? ;㪠§ â¥«ì ­  ¤ ­­ë¥ ­®¢®£® ¨§®¡à ¦¥­¨ï
-
 
1743
	lines dd ?
-
 
1744
endl
-
 
1745
pushad
-
 
1746
;eax - delta for inp. img
-
 
1747
;ebx - delta for outp. img
-
 
1748
;esi - pointer to data_rgb
-
 
1749
	mov esi,[data_rgb]
-
 
1750
	mov [img_n],esi
-
 
1751
	mov eax,[size_h]
-
 
1752
	mov [lines],eax
-
 
1753
align 4
-
 
1754
	.cycyle_0:
-
 
1755
	mov eax,[size_w_new]
-
 
1756
	mov ecx,[size_w]
-
 
1757
	mov ebx,ecx
-
 
1758
align 4
-
 
1759
	.cycyle_1:
-
 
1760
		cmp eax,ebx
-
 
1761
		jg .else_0
-
 
1762
			;ª®¯¨àã¥¬ë© ¯¨ªá¥«ì ¬ ªá¨¬ «ì­® ¢«¨ï¥â ­  १ã«ìâ â
-
 
1763
			;­ ª ¯«¨¢ ¥¬ rgb ¤«ï ¨­â¥à¯®«ï樨 ¯¨ªá¥«¥©
-
 
1764
			mov edx,[size_w_new]
-
 
1765
			movzx edi,byte[esi]
-
 
1766
			imul edi,edx
-
 
1767
			add [pb],edi
-
 
1768
			movzx edi,byte[esi+1]
-
 
1769
			imul edi,edx
-
 
1770
			add [pg],edi
-
 
1771
			movzx edi,byte[esi+2]
-
 
1772
			imul edi,edx
-
 
1773
			add [pr],edi
-
 
1774
			cmp eax,ebx
-
 
1775
			je .d2_add
-
 
1776
			jmp .if_0_end
-
 
1777
		.else_0:
-
 
1778
			;ª®¯¨àã¥¬ë© ¯¨ªá¥«ì ¯®¯ ¤¥â ­  £à ­¨æã ¯¨ªá¥«¥©
-
 
1779
			mov edx,ebx
-
 
1780
			sub edx,eax
-
 
1781
			add edx,[size_w_new]
-
 
1782
			movzx edi,byte[esi]
-
 
1783
			imul edi,edx
-
 
1784
			add [pb],edi
-
 
1785
			movzx edi,byte[esi+1]
-
 
1786
			imul edi,edx
-
 
1787
			add [pg],edi
-
 
1788
			movzx edi,byte[esi+2]
-
 
1789
			imul edi,edx
-
 
1790
			add [pr],edi
-
 
1791
			;á®å࠭塞 £®â®¢®¥ rgb
-
 
1792
			.d2_add:
-
 
1793
			push eax
-
 
1794
				mov edi,[img_n]
-
 
1795
				mov eax,[pb]
-
 
1796
				xor edx,edx
-
 
1797
				div dword[size_w] ;eax /= [size_w]
-
 
1798
				stosb
-
 
1799
				mov eax,[pg]
-
 
1800
				xor edx,edx
-
 
1801
				div dword[size_w] ;eax /= [size_w]
-
 
1802
				stosb
-
 
1803
				mov eax,[pr]
-
 
1804
				xor edx,edx
-
 
1805
				div dword[size_w] ;eax /= [size_w]
-
 
1806
				stosb
-
 
1807
			pop eax
-
 
1808
			add dword[img_n],3 ;next pixel
-
 
1809
			;®¡­®¢«ï¥¬ rgb ¤«ï ­®¢®£® ¯¨ªá¥«ï
-
 
1810
			mov edx,eax
-
 
1811
			sub edx,ebx
-
 
1812
			movzx edi,byte[esi]
-
 
1813
			imul edi,edx
-
 
1814
			mov [pb],edi
-
 
1815
			movzx edi,byte[esi+1]
-
 
1816
			imul edi,edx
-
 
1817
			mov [pg],edi
-
 
1818
			movzx edi,byte[esi+2]
-
 
1819
			imul edi,edx
-
 
1820
			mov [pr],edi
-
 
1821
			add ebx,[size_w]
-
 
1822
		.if_0_end:
-
 
1823
		add eax,[size_w_new]
-
 
1824
		add esi,3 ;next pixel
-
 
1825
		dec ecx
-
 
1826
		jnz .cycyle_1
-
 
1827
	dec dword[lines]
-
 
1828
	jnz .cycyle_0
-
 
1829
popad
-
 
1830
	ret
-
 
1831
endp
2624
 
1832
 
2625
;¯à¥®¡à §®¢ ­¨¥ ¡ãä¥à  ¨§ 24-¡¨â­®£® ¢ 8-¡¨â­ë©
1833
;¯à¥®¡à §®¢ ­¨¥ ¡ãä¥à  ¨§ 24-¡¨â­®£® ¢ 8-¡¨â­ë©
2626
; spectr - ®¯à¥¤¥«ï¥â ª ª®© ᯥªâà ¡à âì ¯à¨ ¯à¥®¡à §®¢ ­¨¨ 0-ᨭ¨©, 1-§¥«¥­ë©, 2-ªà á­ë©
1834
; spectr - ®¯à¥¤¥«ï¥â ª ª®© ᯥªâà ¡à âì ¯à¨ ¯à¥®¡à §®¢ ­¨¨ 0-ᨭ¨©, 1-§¥«¥­ë©, 2-ªà á­ë©
2627
align 4
1835
align 4
2628
proc buf_conv_24_to_8, buf_struc:dword, spectr:dword
1836
proc buf_conv_24_to_8, buf_struc:dword, spectr:dword
Line 3247... Line 2455...
3247
	.copy_end:
2455
	.copy_end:
3248
	popad
2456
	popad
3249
	ret
2457
	ret
3250
endp
2458
endp
Line 3251... Line -...
3251
 
-
 
3252
;¯à¥®¡à §®¢ ­¨¥ 8-¡¨â­®£® ¡ãä¥à  à §¬¥à®¬ 16*16 ¢ à §¬¥à 1*256 ᨬ¢®«®¢
-
 
3253
align 4
-
 
3254
proc buf_convert_text_matrix, buf_struc:dword
-
 
3255
	locals
-
 
3256
		tmp_mem dd ?
-
 
3257
		c1 dw ?
-
 
3258
		c2 dd ?
-
 
3259
		c3 dw ?
-
 
3260
	endl
-
 
3261
	pushad
-
 
3262
	mov edi,dword[buf_struc]
-
 
3263
	cmp buf2d_bits,8
-
 
3264
	jne .error
-
 
3265
		mov ecx,buf2d_h
-
 
3266
		mov ebx,ecx
-
 
3267
		shr ebx,4 ;¯à¥¤¯®« £ ¥¬ çâ® ¢ ¡ãä¥à¥ 16 áâப á ᨬ¢®« ¬¨, ¯®â®¬ã ¤¥«¨¬ ­  2^4
-
 
3268
		mov edx,buf2d_w
-
 
3269
		imul ecx,edx ;ecx = size  8 b
-
 
3270
		invoke mem.alloc,ecx ;¢ë¤¥«ï¥¬ ¢à¥¬¥­­ãî ¯ ¬ïâì
-
 
3271
		mov [tmp_mem],eax ;eax - new memory
-
 
3272
 
-
 
3273
		shr edx,4 ;¯à¥¤¯®« £ ¥¬ çâ® ¢ ¡ãä¥à¥ 16 ª®«®­®ª á ᨬ¢®« ¬¨, ¯®â®¬ã ¤¥«¨¬ ­  2^4
-
 
3274
		mov eax,ebx
-
 
3275
		imul ebx,edx ;¢ëç¨á«ï¥¬ ª®®«¨ç¥á⢮ ¯¨ªá¥«¥© ­  1 ᨬ¢®«
-
 
3276
		;eax = bhe - ¢ëá®â  ¡ãª¢ë
-
 
3277
		;ebx = bwi*bhe - ª®««¨ç¥á⢮ ¯¨ªá¥«¥© ¢ 1-© ¡ãª¢¥
-
 
3278
		;edx = bwi - è¨à¨­  ¡ãª¢ë
-
 
3279
		;ecx,esi,edi - ¨á¯®«ì§ãîâáï ¢ 横«¥ .c_0
-
 
3280
		shr buf2d_w,4
-
 
3281
		shl buf2d_h,4 ;¯à¥®¡à §®¢ë¢ ¥¬ à §¬¥àë ¡ãä¥à 
-
 
3282
 
-
 
3283
		cld
-
 
3284
		mov esi,buf2d_data
-
 
3285
		mov edi,[tmp_mem]
-
 
3286
		mov word[c3],16
-
 
3287
		.c_3:
-
 
3288
			mov dword[c2],eax
-
 
3289
			.c_2:
-
 
3290
				mov word[c1],16
-
 
3291
				.c_1:
-
 
3292
					mov ecx,edx ;.c_0:
-
 
3293
					rep movsb
-
 
3294
					add edi,ebx
-
 
3295
					sub edi,edx ;edi+=(bwi*bhe-bwi)
-
 
3296
					dec word[c1]
-
 
3297
					cmp word[c1],0
-
 
3298
					jg .c_1
-
 
3299
				add edi,edx
-
 
3300
				shl ebx,4
-
 
3301
				sub edi,ebx ;edi-=(16*bwi*bhe-bwi)
-
 
3302
				shr ebx,4
-
 
3303
				dec dword[c2]
-
 
3304
				cmp dword[c2],0
-
 
3305
				jg .c_2
-
 
3306
			sub edi,ebx
-
 
3307
			shl ebx,4
-
 
3308
			add edi,ebx ;edi+=(15*bwi*bhe)
-
 
3309
			shr ebx,4
-
 
3310
			dec word[c3]
-
 
3311
			cmp word[c3],0
-
 
3312
			jg .c_3
-
 
3313
 
-
 
3314
		mov edi,dword[buf_struc] ;ª®¯¨à®¢ ­¨¥ ­®¢®© ¬ âà¨æë ¢ ®á­®¢­®© ¡ãä¥à
-
 
3315
		mov edi,buf2d_data
-
 
3316
		mov esi,[tmp_mem]
-
 
3317
		mov ecx,ebx
-
 
3318
		shl ecx,8
-
 
3319
		rep movsb
-
 
3320
		invoke mem.free,[tmp_mem] ;ç¨á⨬ ¢à¥¬¥­­ãî ¯ ¬ïâì
-
 
3321
		jmp .end_conv
-
 
3322
	.error:
-
 
3323
		stdcall print_err,sz_buf2d_convert_text_matrix,txt_err_n8b
-
 
3324
	.end_conv:
-
 
3325
	popad
-
 
3326
	ret
-
 
3327
endp
-
 
3328
 
-
 
3329
align 4
-
 
3330
buf_s_matr buf_2d_header ? ;«®ª «ì­ ï ¬ âà¨æ  ᨬ¢®« 
-
 
3331
 
-
 
3332
align 4
-
 
3333
proc buf_draw_text, buf_struc:dword, buf_t_matr:dword, text:dword, coord_x:dword, coord_y:dword, color:dword
-
 
3334
	locals
-
 
3335
		buf_t_matr_offs dd ?
-
 
3336
	endl
-
 
3337
	pushad
-
 
3338
	mov edi,dword[buf_struc]
-
 
3339
	cmp buf2d_bits,24
-
 
3340
	jne .error2
-
 
3341
	mov edi,dword[buf_t_matr]
-
 
3342
	cmp buf2d_bits,8
-
 
3343
	jne .error1
-
 
3344
		mov edx,buf2d_data
-
 
3345
		mov [buf_t_matr_offs],edx
-
 
3346
		mov ecx,BUF_STRUCT_SIZE ;ª®¯¨à㥬 áâàãªâãàã ⥪á⮢®© ¬ âà¨æë
-
 
3347
		mov esi,edi
-
 
3348
		lea edi,[buf_s_matr]
-
 
3349
		cld
-
 
3350
		rep movsb
-
 
3351
		lea edi,[buf_s_matr]
-
 
3352
		shr buf2d_h,8 ;¤¥«¨¬ ¢ëá®âã ᨬ¢®«ì­®£® ¡ãä¥à  ­  256, ¤«ï ­ å®¦¤¥­¨ï ¢ëá®âë 1-£® ᨬ¢®« 
-
 
3353
		mov ebx,buf2d_h ;¡¥à¥¬ ¢ëá®âã ᨬ¢®« 
-
 
3354
		mov ecx,buf2d_w ;¡¥à¥¬ è¨à¨­ã ᨬ¢®« 
-
 
3355
 
-
 
3356
		mov eax,[coord_x]
-
 
3357
		mov esi,[text]
-
 
3358
		cmp byte[esi],0
-
 
3359
		je .end_draw ;¥á«¨ ¯ãáâ ï áâப 
-
 
3360
		@@:
-
 
3361
			xor edx,edx
-
 
3362
			mov dl,byte[esi] ;¡¥à¥¬ ª®¤ ᨬ¢®« 
-
 
3363
			imul edx,ebx ;㬭®¦ ¥¬ ¥£® ­  ¢ëá®âã ᨬ¢®« 
-
 
3364
			imul edx,ecx ;㬭®¦ ¥¬ ­  è¨à¨­ã ᨬ¢®« 
-
 
3365
			add edx,[buf_t_matr_offs] ;¯à¨¡ ¢«ï¥¬ ᬥ饭¨¥ 0-£® ᨬ¢®« , â. ¥. ¯®«ãç ¥âáï ᬥ饭¨¥ ¢ë¢®¤¨¬®£® ᨬ¢®« 
-
 
3366
			mov buf2d_data,edx ;¢ «®ª «ì­ë© ¡ãä¥à ᨬ¢®« , áâ ¢¨¬ 㪠§ â¥«ì ­  ­ã¦­ë© ᨬ¢®« ¨§ ¡ãä¥à  buf_t_matr
-
 
3367
			stdcall buf_bit_blt_alpha, [buf_struc], eax,[coord_y], edi,[color]
-
 
3368
			add eax,ecx
-
 
3369
			.new_s:
-
 
3370
				inc esi
-
 
3371
				cmp byte[esi],13
-
 
3372
				jne .no_13
-
 
3373
					mov eax,[coord_x]
-
 
3374
					add [coord_y],ebx
-
 
3375
					jmp .new_s
-
 
3376
				.no_13:
-
 
3377
			cmp byte[esi],0
-
 
3378
			jne @b
-
 
3379
		jmp .end_draw
-
 
3380
	.error1:
-
 
3381
		stdcall print_err,sz_buf2d_draw_text,txt_err_n8b
-
 
3382
		jmp .end_draw
-
 
3383
	.error2:
-
 
3384
		stdcall print_err,sz_buf2d_draw_text,txt_err_n24b
-
 
3385
	.end_draw:
-
 
3386
	popad
-
 
3387
	ret
-
 
3388
endp
-
 
3389
 
2459
 
3390
align 4
2460
align 4
3391
proc print_err, fun:dword, mes:dword ;¢ë¢®¤¨¬ á®®¡é¥­¨¥ ®¡ 訡ª¥ ­  ¤®áªã ®â« ¤ª¨
2461
proc print_err, fun:dword, mes:dword ;¢ë¢®¤¨¬ á®®¡é¥­¨¥ ®¡ 訡ª¥ ­  ¤®áªã ®â« ¤ª¨
3392
	pushad
2462
	pushad
3393
	mov eax,63
2463
	mov eax,63
Line 3413... Line 2483...
3413
		jne @b
2483
		jne @b
3414
	popad
2484
	popad
3415
	ret
2485
	ret
3416
endp
2486
endp
Line 3417... Line -...
3417
 
-
 
3418
;input:
-
 
3419
; ebp+8  = p0
-
 
3420
; ebp+12 = p1
-
 
3421
align 4
-
 
3422
line_len4i:
-
 
3423
	push ebp
-
 
3424
	mov ebp,esp
-
 
3425
		fild word [ebp+8]
-
 
3426
		fisub word [ebp+12]
-
 
3427
		fmul st0,st0 ;st0=x^2
-
 
3428
		fild word [ebp+10]
-
 
3429
		fisub word [ebp+14]
-
 
3430
		fmul st0,st0 ;st0=y^2
-
 
3431
		faddp
-
 
3432
		fsqrt
-
 
3433
		fstp dword [ebp+12]
-
 
3434
	pop ebp
-
 
3435
	ret 4 ;8
-
 
3436
 
-
 
3437
align 4
-
 
3438
proc buf_curve_bezier, buffer:dword, coord_p0:dword,coord_p1:dword,coord_p2:dword, color:dword
-
 
3439
	locals
-
 
3440
		delt_t dd ?
-
 
3441
		opr_param dd ?
-
 
3442
		v_poi_0 dd ?
-
 
3443
	endl
-
 
3444
	pushad
-
 
3445
 
-
 
3446
;float t, xt,yt;
-
 
3447
;for(t=.0;t<1.;t+=.005){
-
 
3448
;  xt=pow(1.-t,2)*x0+2*t*(1.-t)*x1+pow(t,2)*x2;
-
 
3449
;  yt=pow(1.-t,2)*y0+2*t*(1.-t)*y1+pow(t,2)*y2;
-
 
3450
;  dc.SetPixel(xt,yt,255L);
-
 
3451
;}
-
 
3452
 
-
 
3453
	mov edx,[color] ;set curve color
-
 
3454
	mov edi,[buffer]
-
 
3455
	xor ebx,ebx
-
 
3456
	xor ecx,ecx
-
 
3457
 
-
 
3458
	finit
-
 
3459
	fldz
-
 
3460
 
-
 
3461
	; calculate delta t
-
 
3462
	stdcall line_len4i, dword[coord_p1],dword[coord_p0]
-
 
3463
	fadd dword[esp]
-
 
3464
	add esp,4 ;pop ...
-
 
3465
 
-
 
3466
	stdcall line_len4i, dword[coord_p2],dword[coord_p1]
-
 
3467
	fadd dword[esp]
-
 
3468
	add esp,4 ;pop ...
-
 
3469
 
-
 
3470
	fadd st0,st0 ; len*=2
-
 
3471
	ftst
-
 
3472
	fstsw ax
-
 
3473
 
-
 
3474
	fld1
-
 
3475
	sahf
-
 
3476
	jle @f ;¨§¡¥£ ¥¬ ¤¥«¥­¨ï ­  0
-
 
3477
		fdiv st0,st1
-
 
3478
	@@:
-
 
3479
	fstp dword[delt_t]
-
 
3480
 
-
 
3481
	ffree st0 ;1.0
-
 
3482
	fincstp
-
 
3483
 
-
 
3484
	;fild word[coord_p2+2] ;y2
-
 
3485
	fild word[coord_p1+2] ;y1
-
 
3486
	fild word[coord_p0+2] ;y0
-
 
3487
	fild word[coord_p2] ;x2
-
 
3488
	fild word[coord_p1] ;x1
-
 
3489
	fild word[coord_p0] ;x0
-
 
3490
	fld dword[delt_t]
-
 
3491
	fldz ;t=.0
-
 
3492
 
-
 
3493
	@@:
-
 
3494
		fld1
-
 
3495
		fsub st0,st1 ;1.-t
-
 
3496
		fmul st0,st0 ;pow(1.-t,2)
-
 
3497
		fmul st0,st3 ;...*x0
-
 
3498
		fstp dword[opr_param]
-
 
3499
 
-
 
3500
		fld1
-
 
3501
		fsub st0,st1 ;1.-t
-
 
3502
		fmul st0,st1 ;(1.-t)*t
-
 
3503
		fadd st0,st0
-
 
3504
		fmul st0,st4 ;...*x1
-
 
3505
		mov esi,dword[opr_param]
-
 
3506
		fstp dword[opr_param]
-
 
3507
 
-
 
3508
		fld st0 ;st0=t
-
 
3509
		fmul st0,st0 ;t^2
-
 
3510
		fmul st0,st5 ;(t^2)*x2
-
 
3511
 
-
 
3512
		fadd dword[opr_param]
-
 
3513
		mov dword[opr_param],esi
-
 
3514
		fadd dword[opr_param]
-
 
3515
		fistp word[v_poi_0] ;x
-
 
3516
 
-
 
3517
		fld1
-
 
3518
		fsub st0,st1 ;1.-t
-
 
3519
		fmul st0,st0 ;pow(1.-t,2)
-
 
3520
		fmul st0,st6 ;...*y0
-
 
3521
		fstp dword[opr_param]
-
 
3522
 
-
 
3523
		fld1
-
 
3524
		fsub st0,st1 ;1.-t
-
 
3525
		fmul st0,st1 ;(1.-t)*t
-
 
3526
		fadd st0,st0
-
 
3527
		fmul st0,st7 ;...*y1
-
 
3528
		mov esi,dword[opr_param]
-
 
3529
		fstp dword[opr_param]
-
 
3530
 
-
 
3531
		fld st0 ;st0=t
-
 
3532
		fmul st0,st0 ;t^2
-
 
3533
		fimul word[coord_p2+2] ;(t^2)*y2
-
 
3534
 
-
 
3535
		fadd dword[opr_param]
-
 
3536
		mov dword[opr_param],esi
-
 
3537
		fadd dword[opr_param]
-
 
3538
		fistp word[v_poi_0+2] ;y
-
 
3539
 
-
 
3540
		mov eax,1
-
 
3541
		mov bx,word[v_poi_0+2]
-
 
3542
		mov cx,word[v_poi_0]
-
 
3543
		call draw_pixel
-
 
3544
 
-
 
3545
		fadd st0,st1 ;t+dt
-
 
3546
 
-
 
3547
		fld1
-
 
3548
		fcomp
-
 
3549
		fstsw ax
-
 
3550
		sahf
-
 
3551
	jae @b
-
 
3552
 
-
 
3553
	popad
-
 
3554
	ret
-
 
3555
endp
-
 
3556
 
2487
 
3557
;䨫ìâà
2488
;䨫ìâà
3558
align 4
2489
align 4
3559
proc buf_filter_dither, buffer:dword, algor:dword
2490
proc buf_filter_dither, buffer:dword, algor:dword
3560
	pushad
2491
	pushad
Line 4009... Line 2940...
4009
    dec   esi
2940
    dec   esi
4010
    jnz   newp_4
2941
    jnz   newp_4
4011
    ret
2942
    ret
Line 4012... Line -...
4012
 
-
 
4013
 
-
 
4014
;*** ä㭪樨 ¤«ï à ¡®âë á ¢®ªá¥«ì­®© £à ä¨ª®© ***
-
 
4015
 
-
 
4016
 
-
 
4017
 
-
 
4018
;ᮧ¤ ­¨¥ ¢®ªá¥«ì­ëå ª¨á⥩
-
 
4019
align 4
-
 
4020
proc vox_brush_create uses eax ebx ecx edi, h_br:dword, buf_z:dword
-
 
4021
	mov edi,[h_br]
-
 
4022
	movzx ecx,byte[edi+3]
-
 
4023
	add edi,4
-
 
4024
 
-
 
4025
	; *** ᮧ¤ ­¨¥ ¥¤¨­¨ç­®© ª¨á⨠***
-
 
4026
	mov eax,[buf_z]
-
 
4027
	mov buf2d_data,eax
-
 
4028
	movzx eax,byte[edi-4] ;è¨à¨­  ¥¤¨­¨ç­®© ª¨áâ¨
-
 
4029
	mov buf2d_w,eax ;è¨à¨­  ¡ãä¥à 
-
 
4030
	movzx eax,byte[edi-4+1] ;¢ëá®â  ¥¤¨­¨ç­®© ª¨áâ¨
-
 
4031
	mov buf2d_h,eax ;¢ëá®â  ¡ãä¥à 
-
 
4032
	mov buf2d_size_lt,0 ;®âáâ㯠᫥¢  ¨ á¯à ¢  ¤«ï ¡ãä¥à 
-
 
Line 4033... Line -...
4033
	mov buf2d_color,0 ;梥â ä®­  ¡ãä¥à 
-
 
4034
	mov buf2d_bits,32 ;ª®«¨ç¥á⢮ ¡¨â ¢ 1-© â®çª¥ ¨§®¡à ¦¥­¨ï
-
 
4035
 
-
 
4036
	; *** ᮧ¤ ­¨¥ á«¥¤ãîé¨å ª¨á⥩ ***
-
 
4037
	cmp ecx,1
-
 
4038
	jl .end_creat
-
 
4039
	movzx ebx,byte[edi-4+2] ;¢ëá®â  ®á­®¢ ­¨ï ¥¤¨­¨ç­®© ª¨áâ¨
-
 
4040
	shr ebx,1
-
 
4041
	cld
-
 
4042
	@@:
-
 
4043
		mov eax,edi
-
 
4044
		add edi,BUF_STRUCT_SIZE
-
 
4045
		stdcall vox_create_next_brush, eax, edi, ebx
-
 
4046
		shl ebx,1
-
 
4047
		loop @b
-
 
4048
	.end_creat:
-
 
4049
	ret
-
 
4050
endp
-
 
4051
 
-
 
4052
;㤠«¥­¨¥ ¢®ªá¥«ì­ëå ª¨á⥩
-
 
4053
align 4
-
 
4054
proc vox_brush_delete uses ecx edi, h_br:dword
-
 
4055
	mov edi,[h_br]
-
 
4056
	movzx ecx,byte[edi+3]
-
 
4057
	add edi,4
-
 
4058
 
-
 
4059
	; *** 㤠«¥­¨¥ ª¨á⥩ ***
-
 
4060
	cmp ecx,1
-
 
4061
	jl .end_delete
-
 
4062
	cld
-
 
4063
	@@:
-
 
4064
		add edi,BUF_STRUCT_SIZE
-
 
4065
		stdcall buf_delete, edi
-
 
4066
		loop @b
-
 
4067
	.end_delete:
-
 
4068
	ret
-
 
4069
endp
-
 
4070
 
-
 
4071
;äã­ªæ¨ï ¤«ï ᮧ¤ ­¨ï ¢®ªá¥«ï á«¥¤ãî饣® ¯®à浪 
-
 
4072
; buf_v1 - ¡ãä¥à á ¨á室­ë¬ ¢®ªá¥«¥¬
-
 
4073
; buf_v2 - ¡ãä¥à á 㢥«¨ç¥­ë¬ ¢®ªá¥«¥¬
-
 
4074
; h - ¢ëá®â  ®á­®¢ ­¨ï ¨á室­®£® ¢®ªá¥«ï : 2
-
 
4075
align 4
-
 
4076
proc vox_create_next_brush uses eax ebx ecx edx edi, buf_v1:dword, buf_v2:dword, h:dword
-
 
4077
	mov edi,[buf_v1]
-
 
4078
	mov ebx,buf2d_h
-
 
4079
	mov ecx,buf2d_w
-
 
4080
	mov edi,[buf_v2]
-
 
4081
	mov buf2d_h,ebx
-
 
4082
	shl buf2d_h,1
-
 
4083
	mov buf2d_w,ecx
-
 
4084
	shl buf2d_w,1
-
 
4085
	mov buf2d_color,0
-
 
4086
	mov buf2d_bits,32
-
 
4087
 
-
 
4088
	stdcall buf_create, [buf_v2] ;ᮧ¤ ­¨¥ ¡ãä¥à  £«ã¡¨­ë
-
 
4089
	shr ecx,1
-
 
4090
	mov edx,[h]
-
 
4091
	shl edx,1
-
 
4092
	sub ebx,edx
-
 
4093
	;ecx - è¨à¨­  ¨á室­®£® ¢®ªá¥«ï : 2
-
 
4094
	;ebx - ¢ëá®â  ¨á室­®£® ¢®ªá¥«ï (¡¥§ ®á­®¢ ­¨ï)
-
 
4095
	;edx - ¢ëá®â  ®á­®¢ ­¨ï ¨á室­®£® ¢®ªá¥«ï
-
 
4096
	mov eax,[h]
-
 
4097
	cmp eax,0
-
 
4098
	je @f
-
 
4099
		stdcall vox_add, [buf_v2], [buf_v1], ecx,0,0
-
 
4100
		stdcall vox_add, [buf_v2], [buf_v1], ecx,ebx,0
-
 
4101
 
-
 
4102
		stdcall vox_add, [buf_v2], [buf_v1], 0,eax,eax
-
 
4103
		push eax ;stdcall ...
-
 
4104
		add eax,ebx
-
 
4105
		stdcall vox_add, [buf_v2], [buf_v1], 0,eax ;,...
-
 
4106
		sub eax,ebx
-
 
4107
		shl ecx,1
-
 
4108
 
-
 
4109
		;ecx - è¨à¨­  ¨á室­®£® ¢®ªá¥«ï
-
 
4110
		stdcall vox_add, [buf_v2], [buf_v1], ecx,eax,eax
-
 
4111
		push eax ;stdcall ...,[h]
-
 
4112
		add eax,ebx
-
 
4113
		stdcall vox_add, [buf_v2], [buf_v1], ecx,eax;,[h]
-
 
4114
		;sub eax,ebx
-
 
4115
		shr ecx,1
-
 
4116
 
-
 
4117
		;ecx - è¨à¨­  ¨á室­®£® ¢®ªá¥«ï : 2
-
 
4118
		stdcall vox_add, [buf_v2], [buf_v1], ecx,edx,edx
-
 
4119
		add ebx,edx
-
 
4120
		stdcall vox_add, [buf_v2], [buf_v1], ecx,ebx,edx
-
 
4121
 
-
 
4122
		jmp .end_0
-
 
4123
	@@:
-
 
4124
		;¥á«¨ h = 0, ⮣¤  ¯®«ãç ¥¬ ª¨áâì ­  2 £à ­¨
-
 
4125
		;¢ â ª®¬ á«ãç ¥ ¤«ï ¯®«ã祭¨ï £«ã¡¨­ë ¡¥à¥¬ è¨à¨­ã / 2
-
 
4126
		mov eax,ecx
-
 
4127
		;2 «¥¢ëå ¢®ªá¥«ï
-
 
4128
		stdcall vox_add, [buf_v2], [buf_v1], 0,0,eax
-
 
4129
		stdcall vox_add, [buf_v2], [buf_v1], 0,ebx,eax
-
 
4130
		shl eax,1
-
 
4131
		;2 業âà «ì­ëå ¯¥à¥¤­¨å ¢®ªá¥«ï (§ ¤­¨¥ 業âà «ì­ë¥ ­¥ ¢ë¢®¤¨¬)
-
 
4132
		stdcall vox_add, [buf_v2], [buf_v1], ecx,0,eax
-
 
4133
		stdcall vox_add, [buf_v2], [buf_v1], ecx,ebx,eax
-
 
4134
		shr eax,1
-
 
4135
		shl ecx,1
-
 
4136
		;2 ¯à ¢ëå ¢®ªá¥«ï
-
 
4137
		stdcall vox_add, [buf_v2], [buf_v1], ecx,0,eax
-
 
4138
		stdcall vox_add, [buf_v2], [buf_v1], ecx,ebx,eax
-
 
4139
 
-
 
4140
	.end_0:
-
 
4141
 
-
 
4142
 
-
 
4143
	ret
-
 
4144
endp
-
 
4145
 
-
 
4146
;
-
 
4147
align 4
-
 
4148
proc vox_add, buf_v1:dword, buf_v2:dword, coord_x:dword, coord_y:dword, coord_z:dword
-
 
4149
pushad
-
 
4150
	mov ebx,[coord_x]
-
 
4151
	mov eax,[coord_y]
-
 
4152
	mov edi,[buf_v2]
-
 
4153
	mov ecx,buf2d_h
-
 
4154
	mov esi,buf2d_w
-
 
4155
	imul ecx,esi
-
 
4156
	add esi,ebx
-
 
4157
	mov edx,buf2d_data
-
 
4158
	cld
-
 
4159
	;ecx - count pixels in voxel
-
 
4160
	;edx - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢ ¢®ªá¥«ì­®¬ ¡ãä¥à¥
-
 
4161
	;edi - 㪠§ â¥«ì ­  ¢®ªá¥«ì­ë© ¡ãä¥à
-
 
4162
	;esi - width voxel buffer add coord x
-
 
4163
	.cycle:
-
 
4164
		cmp dword[edx],0
-
 
4165
		je @f
-
 
4166
			;¯à®¢¥à塞 ¡ãä¥à £«ã¡¨­ë
-
 
4167
			push eax ecx edi esi
-
 
4168
			mov ecx,eax
-
 
4169
			mov edi,[buf_v1]
-
 
4170
			call get_pixel_32 ;stdcall buf_get_pixel, [buf_v1],ebx,ecx
-
 
4171
			mov esi,[edx]
-
 
4172
			add esi,[coord_z]
-
 
4173
			cmp eax,esi
-
 
4174
			jge .end_draw
-
 
4175
			stdcall buf_set_pixel, [buf_v1],ebx,ecx,esi ;esi = new coord z
-
 
4176
			.end_draw:
-
 
4177
			pop esi edi ecx eax
-
 
4178
		@@:
-
 
4179
		add edx,4
-
 
4180
		inc ebx
-
 
4181
		cmp ebx,esi
-
 
4182
		jl @f
-
 
4183
			inc eax
-
 
4184
			sub ebx,buf2d_w
-
 
4185
		@@:
-
 
4186
		loop .cycle
-
 
4187
popad
-
 
4188
	ret
-
 
4189
endp
-
 
4190
 
-
 
4191
;description:
-
 
4192
; ¢®§¢à è ¥â è¨à¨­ã ¢®ªá¥«ì­®£® ¨§®¡à ¦¥­¨ï á 3-¬ï £à ­ï¬¨
-
 
4193
; ¯à¨­¨¬ ¥â 㪠§ â¥«ì ­  ª¨áâì ¨ ¬ áèâ ¡
-
 
4194
align 4
-
 
4195
proc buf_vox_obj_get_img_w_3g uses ecx, h_br:dword,k_scale:dword
-
 
4196
	mov ecx,[h_br]
-
 
4197
 
-
 
4198
	movzx eax,byte[ecx]
-
 
4199
	cmp dword[k_scale],1
-
 
4200
	jl .end_c0
-
 
4201
		mov ecx,[k_scale]
-
 
4202
		shl eax,cl
-
 
4203
	.end_c0:
-
 
4204
	ret
-
 
4205
endp
-
 
4206
 
-
 
4207
;description:
-
 
4208
; ¢®§¢à è ¥â ¢ëá®âã ¢®ªá¥«ì­®£® ¨§®¡à ¦¥­¨ï á 3-¬ï £à ­ï¬¨
-
 
4209
; ¯à¨­¨¬ ¥â 㪠§ â¥«ì ­  ª¨áâì ¨ ¬ áèâ ¡
-
 
4210
align 4
-
 
4211
proc buf_vox_obj_get_img_h_3g uses ecx, h_br:dword,k_scale:dword
-
 
4212
	mov ecx,[h_br]
-
 
4213
 
-
 
4214
	movzx eax,byte[ecx+1]
-
 
4215
	cmp dword[k_scale],1
-
 
4216
	jl .end_c0
-
 
4217
		mov ecx,[k_scale]
-
 
4218
		shl eax,cl
-
 
4219
	.end_c0:
-
 
4220
	ret
-
 
4221
endp
-
 
4222
 
-
 
4223
;description:
-
 
4224
; äã­ªæ¨ï à¨áãîé ï ¢®ªá¥«ì­ë© ®¡ê¥ªâ (¢¨¤­  1 £à ­ì)
-
 
4225
;input:
-
 
4226
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â )
-
 
4227
; buf_z - ¡ãä¥à £«ã¡¨­ë (32 ¡¨â  ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥­ ᮢ¯ ¤ âì á buf_i)
-
 
4228
align 4
-
 
4229
proc buf_vox_obj_draw_1g, buf_i:dword, buf_z:dword, v_obj:dword, coord_x:dword,\
-
 
4230
coord_y:dword, k_scale:dword
-
 
4231
	cmp [k_scale],0
-
 
4232
	jl .end_f
-
 
4233
pushad
-
 
4234
	mov edi,[buf_i]
-
 
4235
	cmp buf2d_bits,24
-
 
4236
	jne .error1
-
 
4237
	mov edi,[buf_z]
-
 
4238
	cmp buf2d_bits,32
-
 
4239
	jne .error2
-
 
4240
 
-
 
4241
	mov ecx,[k_scale]
-
 
4242
	mov ebx,[coord_x]
-
 
4243
	mov edx,[coord_y]
-
 
4244
	mov edi,[v_obj]
-
 
4245
	add edi,vox_offs_data
-
 
4246
	xor esi,esi
-
 
4247
	stdcall draw_sub_vox_obj_1g, [buf_i],[buf_z],[v_obj]
-
 
4248
 
-
 
4249
	jmp .end_0
-
 
4250
	.error1:
-
 
4251
		stdcall print_err,sz_buf2d_vox_obj_draw_1g,txt_err_n24b
-
 
4252
		jmp .end_0
-
 
4253
	.error2:
-
 
4254
		stdcall print_err,sz_buf2d_vox_obj_draw_1g,txt_err_n32b
-
 
4255
	.end_0:
-
 
4256
popad
-
 
4257
	.end_f:
-
 
4258
	ret
-
 
4259
endp
-
 
4260
 
-
 
4261
;input:
-
 
4262
; ebx - coord_x
-
 
4263
; edx - coord_y
-
 
4264
; esi - coord_z
-
 
4265
; ecx - ã஢¥­ì ⥪ã襣® 㧫 
-
 
4266
; edi - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢®ªá¥«ì­®£® ®¡ê¥ªâ 
-
 
4267
align 4
-
 
4268
proc draw_sub_vox_obj_1g, buf_i:dword, buf_z:dword, v_obj:dword
-
 
4269
	cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï
-
 
4270
	je .sub_trees
-
 
4271
 
-
 
4272
		;¯à®à¨á®¢ª  à ¬ª¨ ¥á«¨ à §¬¥à 㧫  = 1
-
 
4273
		cmp ecx,0
-
 
4274
		jne @f
-
 
4275
			;¯à®¢¥àª  £«ã¡¨­ë esi
-
 
4276
			stdcall buf_get_pixel, [buf_z], ebx,edx, esi
-
 
4277
			cmp eax,esi
-
 
4278
			jge @f
-
 
4279
				push ecx
-
 
4280
				mov ecx,dword[edi]
-
 
4281
				and ecx,0xffffff
-
 
4282
				stdcall buf_set_pixel, [buf_i], ebx,edx, ecx
-
 
4283
				stdcall buf_set_pixel, [buf_z], ebx,edx, esi
-
 
4284
				pop ecx
-
 
4285
		@@:
-
 
4286
 
-
 
4287
		;४ãàᨢ­ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢
-
 
4288
		push edx
-
 
4289
		;¢å®¤ ¢­ãâàì 㧫 
-
 
4290
		dec ecx
-
 
4291
 
-
 
4292
		mov eax,1
-
 
4293
		cmp ecx,1
-
 
4294
		jl @f
-
 
4295
			shl eax,cl
-
 
4296
		@@:
-
 
4297
 
-
 
4298
		add edx,eax ;ª®à¥ªâ¨à®¢ª  ¢ëá®âë ¯®¤ ¢®ªá¥«ì ­¨¦­¥£® ã஢­ï
-
 
4299
 
-
 
4300
		mov ah,byte[edi+3]
-
 
4301
		add edi,4
-
 
4302
		mov al,8
-
 
4303
		.cycle:
-
 
4304
			bt ax,8 ;â¥áâ¨à㥬 ⮫쪮 ah
-
 
4305
			jnc .c_next
-
 
4306
				push eax ebx edx esi
-
 
4307
				stdcall vox_corect_coords_pl, [v_obj],1
-
 
4308
				stdcall draw_sub_vox_obj_1g, [buf_i],[buf_z],[v_obj]
-
 
4309
				pop esi edx ebx eax
-
 
4310
			.c_next:
-
 
4311
			shr ah,1
-
 
4312
			dec al
-
 
4313
			jnz .cycle
-
 
4314
		;¢ë室 ¨§ 㧫 
-
 
4315
		inc ecx
-
 
4316
		pop edx
-
 
4317
		jmp .end_f
-
 
4318
	.sub_trees:
-
 
4319
		cmp ecx,0
-
 
4320
		jl .end_0 ;­¥ à¨á㥬 ®ç¥­ì ¬ «¥­ìª¨¥ ¢®ªá¥«¨
-
 
4321
 
-
 
4322
			;à¨á㥬 㧥«
-
 
4323
			mov eax,[edi]
-
 
4324
			and eax,0xffffff
-
 
4325
			
-
 
4326
			cmp ecx,1
-
 
4327
			jl @f
-
 
4328
				;ª¢ ¤à â ¡®«ìè¥ â¥ªã饣® ¬ áèâ ¡ 
-
 
4329
				stdcall vox_draw_square_1g, [buf_i],[buf_z],eax
-
 
4330
				jmp .end_0
-
 
4331
			@@:
-
 
4332
				;ª¢ ¤à â ⥪ã饣® ¬ áèâ ¡ 
-
 
4333
				push ecx
-
 
4334
				mov ecx,eax
-
 
4335
				stdcall buf_get_pixel, [buf_z], ebx,edx
-
 
4336
				cmp eax,esi
-
 
4337
				jge .end_1
-
 
4338
				stdcall buf_set_pixel, [buf_i], ebx,edx,ecx
-
 
4339
				stdcall buf_set_pixel, [buf_z], ebx,edx,esi
-
 
4340
				.end_1:
-
 
4341
				pop ecx
-
 
4342
		.end_0:
-
 
4343
		add edi,4
-
 
4344
	.end_f:
-
 
4345
	ret
-
 
4346
endp
-
 
4347
 
-
 
4348
;output:
-
 
4349
; eax - à §àãè ¥âáï
-
 
4350
align 4
-
 
4351
proc vox_draw_square_1g uses ecx edx edi, buf_i:dword, buf_z:dword, color:dword
-
 
4352
locals
-
 
4353
	img_size dd ?
-
 
4354
	coord_y dd ?
-
 
4355
endl
-
 
4356
	mov edi,[buf_z]
-
 
4357
	xor eax,eax
-
 
4358
	inc eax
-
 
4359
	shl eax,cl
-
 
4360
	mov [img_size],eax
-
 
4361
	mov [coord_y],eax
-
 
4362
	.cycle_0:
-
 
4363
	push ebx
-
 
4364
	mov ecx,[img_size]
-
 
4365
	cld
-
 
4366
	.cycle_1:
-
 
4367
		push ecx
-
 
4368
		mov ecx,edx
-
 
4369
		call get_pixel_32
-
 
4370
		pop ecx
-
 
4371
		cmp eax,esi
-
 
4372
		jge @f
-
 
4373
			stdcall buf_set_pixel, [buf_i], ebx,edx, [color]
-
 
4374
			stdcall buf_set_pixel, edi, ebx,edx, esi
-
 
4375
		@@:
-
 
4376
		inc ebx
-
 
4377
	loop .cycle_1
-
 
4378
	pop ebx
-
 
4379
	inc edx
-
 
4380
	dec dword[coord_y]
-
 
4381
	jnz .cycle_0
-
 
4382
	ret
-
 
4383
endp
-
 
4384
 
-
 
4385
;description:
-
 
4386
; äã­ªæ¨ï à¨áãîé ï ¢®ªá¥«ì­ë© ®¡ê¥ªâ (¢¨¤­® 3 £à ­¨)
-
 
4387
;input:
-
 
4388
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â )
-
 
4389
; buf_z - ¡ãä¥à £«ã¡¨­ë (32 ¡¨â  ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥­ ᮢ¯ ¤ âì á buf_i)
-
 
4390
; h_br - ª¨áâì á ¨§®¡à ¦¥­¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â )
-
 
4391
; v_obj - ¢®ªá¥«ì­ë© ®¡ê¥ªâ
-
 
4392
; k_scale - ª®íä. ¤«ï ¬ áèâ ¡¨à®¢ ­¨ï ¨§®¡à ¦¥­¨ï
-
 
4393
align 4
-
 
4394
proc buf_vox_obj_draw_3g, buf_i:dword, buf_z:dword, h_br:dword, v_obj:dword,\
-
 
4395
coord_x:dword, coord_y:dword, coord_z:dword, k_scale:dword
-
 
4396
pushad
-
 
4397
	mov edi,[v_obj]
-
 
4398
	mov ecx,[k_scale]
-
 
4399
	mov ebx,[coord_x]
-
 
4400
	mov edx,[coord_y]
-
 
4401
	add edi,vox_offs_data
-
 
4402
	mov esi,[coord_z]
-
 
4403
	stdcall vox_go_in_node, [buf_i], [buf_z], [h_br], [v_obj]
-
 
4404
popad
-
 
4405
	ret
-
 
4406
endp
-
 
4407
 
-
 
4408
;description:
-
 
4409
; äã­ªæ¨ï à¨áãîé ï ç áâì ¢®ªá¥«ì­®£® ®¡ê¥ªâ 
-
 
4410
;input:
-
 
4411
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â )
-
 
4412
; buf_z - ¡ãä¥à £«ã¡¨­ë (32 ¡¨â  ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥­ ᮢ¯ ¤ âì á buf_i)
-
 
4413
; h_br - ª¨áâì á ¨§®¡à ¦¥­¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â )
-
 
4414
; v_obj - ¢®ªá¥«ì­ë© ®¡ê¥ªâ
-
 
4415
; k_scale - ª®íä. ¤«ï ¬ áèâ ¡¨à®¢ ­¨ï ¨§®¡à ¦¥­¨ï
-
 
4416
align 4
-
 
4417
proc buf_vox_obj_draw_3g_scaled, buf_i:dword, buf_z:dword, h_br:dword, v_obj:dword,\
-
 
4418
coord_x:dword, coord_y:dword, coord_z:dword, k_scale:dword,\
-
 
4419
s_c_x:dword, s_c_y:dword, s_c_z:dword, s_k_scale:dword,b_color:dword
-
 
4420
pushad
-
 
4421
locals
-
 
4422
	p_node dd 0 ;த¨â¥«ì᪨© 㧥«
-
 
4423
endl
-
 
4424
	mov edi,[v_obj]
-
 
4425
	add edi,vox_offs_data
-
 
4426
 
-
 
4427
	mov ecx,[k_scale]
-
 
4428
	mov ebx,[coord_x]
-
 
4429
 
-
 
4430
	;â¥á⮢ ï à ¬ª 
-
 
4431
	mov eax,[h_br]
-
 
4432
 
-
 
4433
	movzx edx,byte[eax]
-
 
4434
	movzx esi,byte[eax+1]
-
 
4435
	cmp ecx,1
-
 
4436
	jl .end_c0
-
 
4437
		shl edx,cl
-
 
4438
		shl esi,cl
-
 
4439
	.end_c0:
-
 
4440
	;stdcall buf_rect_by_size, [buf_i], ebx,[coord_y],edx,esi, [b_color]
-
 
4441
 
-
 
4442
	;¢¥à⨪ «ì­ ï ¯®«®á 
-
 
4443
	add ebx,edx
-
 
4444
	shr edx,cl
-
 
4445
	stdcall buf_rect_by_size, [buf_i], ebx,[coord_y],edx,esi, [b_color]
-
 
4446
	mov ecx,[s_k_scale]
-
 
4447
	shr esi,cl
-
 
4448
	xor eax,eax
-
 
4449
	inc eax
-
 
4450
	shl eax,cl
-
 
4451
	dec eax
-
 
4452
	sub eax,[s_c_z] ;§­ ç¥­¨ï ¯® ®á¨ z ¢®§à áâ îâ á ­¨§ã ¢¢¥àå
-
 
4453
	imul eax,esi
-
 
4454
	add eax,[coord_y]
-
 
4455
	stdcall buf_filled_rect_by_size, [buf_i], ebx,eax,edx,esi, [b_color]
-
 
4456
	mov ebx,[coord_y]
-
 
4457
	shl esi,cl
-
 
4458
	add ebx,esi
-
 
4459
	stdcall buf_vox_obj_get_img_w_3g, [h_br],[k_scale]
-
 
4460
	shr eax,1
-
 
4461
	mov esi,[h_br]
-
 
4462
	movzx esi,byte[esi+1]
-
 
4463
	;¯®«§ã­®ª
-
 
4464
	stdcall draw_polz_hor, [buf_i], [coord_x],ebx,eax,esi, [s_c_x], [s_k_scale], [b_color]
-
 
4465
	mov edx,[coord_x]
-
 
4466
	add edx,eax
-
 
4467
	;¯®«§ã­®ª
-
 
4468
	stdcall draw_polz_hor, [buf_i], edx,ebx,eax,esi, [s_c_y], [s_k_scale], [b_color]
-
 
4469
;---
-
 
4470
 
-
 
4471
	mov esi,[s_k_scale]
-
 
4472
	cmp esi,1
-
 
4473
	jl .end_2
-
 
4474
 
-
 
4475
	; *** (1) ***
-
 
4476
	.found:
-
 
4477
	stdcall vox_obj_get_node_position, [v_obj],[s_c_x],[s_c_y],[s_c_z],esi
-
 
4478
	movzx bx,byte[edi+3]
-
 
4479
	mov [p_node],edi
-
 
4480
	add edi,4
-
 
4481
	cmp eax,0
-
 
4482
	je .end_1
-
 
4483
	mov ecx,eax
-
 
4484
	cld
-
 
4485
	@@: ;横« ¤«ï ¯à®¯ã᪠ ¯à¥¤ë¤ãé¨å ¯®¤¤¥à¥¢ì¥¢ ¢ 㧫¥
-
 
4486
		bt bx,0 ;¯à®¢¥à塞 ¥áâì «¨ ¤®ç¥à­¨¥ 㧫ë
-
 
4487
		jnc .end_0
-
 
4488
			xor eax,eax
-
 
4489
			stdcall vox_obj_rec0 ;¢ eax ¢ëç¨á«ï¥âáï ç¨á«® ¤®ç¥à­¨å 㧫®¢, ¢ ¤ ­­®© ¢¥â¢¨
-
 
4490
		.end_0:
-
 
4491
		shr bx,1
-
 
4492
		loop @b
-
 
4493
	.end_1:
-
 
4494
	bt bx,0
-
 
4495
	jnc .end_2 ;¥á«¨ ¯®¤¤¥à¥¢  ­¥ áãé¥áâ¢ã¥â
-
 
4496
	dec esi
-
 
4497
	cmp esi,0
-
 
4498
	jg .found
-
 
4499
 
-
 
4500
	; *** (2) ***
-
 
4501
	;à¨á®¢ ­¨¥ ç á⨠®¡ê¥ªâ 
-
 
4502
	mov ecx,[k_scale]
-
 
4503
	mov ebx,[coord_x]
-
 
4504
	mov edx,[coord_y]
-
 
4505
	mov esi,[coord_z]
-
 
4506
	stdcall vox_go_in_node, [buf_i], [buf_z], [h_br], [v_obj]
-
 
4507
	.end_2:
-
 
4508
 
-
 
4509
popad
-
 
4510
	ret
-
 
4511
endp
-
 
4512
 
-
 
4513
;input:
-
 
4514
; h_br - ª¨áâì á ¨§®¡à ¦¥­¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â )
-
 
4515
; ebx - coord_x
-
 
4516
; edx - coord_y
-
 
4517
; esi - coord_z
-
 
4518
; ecx - ã஢¥­ì ⥪ã襣® 㧫 
-
 
4519
; edi - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢®ªá¥«ì­®£® ®¡ê¥ªâ 
-
 
4520
align 4
-
 
4521
proc vox_go_in_node, buf_i:dword, buf_z:dword, h_br:dword, v_obj:dword
-
 
4522
	cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï
-
 
4523
	je .sub_trees
-
 
4524
		;४ãàᨢ­ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢
-
 
4525
		push eax edx
-
 
4526
 
-
 
4527
		;¯à®à¨á®¢ª  à ¬ª¨ ¥á«¨ à §¬¥à 㧫  = 1
-
 
4528
		cmp ecx,0
-
 
4529
		jne .end_2
-
 
4530
			push eax
-
 
4531
				stdcall vox_get_sub_brush,[h_br],0 ;®¯à¥¤¥«ï¥¬ ª¨áâì ¤«ï à¨á®¢ ­¨ï
-
 
4532
				cmp eax,0 ;¥á«¨ ª¨áâì ­¥ ­ ©¤¥­ 
-
 
4533
				je @f
-
 
4534
					stdcall draw_vox, [buf_i], [buf_z], eax, ebx,edx,esi, [edi]
-
 
4535
				@@:
-
 
4536
			pop eax
-
 
4537
		.end_2:
-
 
4538
 
-
 
4539
		;¢å®¤ ¢­ãâàì 㧫 
-
 
4540
		dec ecx
-
 
4541
;---
-
 
4542
		push ebx
-
 
4543
			;mov eax,(h-h_osn/2)
-
 
4544
			mov ebx,[h_br]
-
 
4545
			movzx eax,byte[ebx+1]
-
 
4546
			cmp byte[ebx+2],0
-
 
4547
			je @f
-
 
4548
				;¥á«¨ ª¨áâì á 3-¬ï £à ­ï¬¨
-
 
4549
				movzx ebx,byte[ebx+2]
-
 
4550
				shr ebx,1
-
 
4551
				sub eax,ebx
-
 
4552
				jmp .end_0
-
 
4553
			@@:
-
 
4554
				;¥á«¨ ª¨áâì á 2-¬ï £à ­ï¬¨
-
 
4555
				movzx ebx,byte[ebx]
-
 
4556
				shr ebx,1
-
 
4557
			.end_0:
-
 
4558
		cmp ecx,1
-
 
4559
		jl @f
-
 
4560
			shl eax,cl
-
 
4561
			shl ebx,cl
-
 
4562
		@@:
-
 
4563
		add esi,ebx
-
 
4564
		pop ebx
-
 
4565
		add edx,eax ;ª®à¥ªâ¨à®¢ª  ¢ëá®âë ¯®¤ ¢®ªá¥«ì ­¨¦­¥£® ã஢­ï
-
 
4566
;---
-
 
4567
		mov ah,byte[edi+3]
-
 
4568
		add edi,4
-
 
4569
		mov al,8
-
 
4570
		.cycle:
-
 
4571
			bt ax,8 ;â¥áâ¨à㥬 ⮫쪮 ah
-
 
4572
			jnc .c_next
-
 
4573
				push ebx edx esi
-
 
4574
				stdcall vox_corect_coords, [h_br], [v_obj]
-
 
4575
				stdcall vox_go_in_node, [buf_i], [buf_z], [h_br], [v_obj]
-
 
4576
				pop esi edx ebx
-
 
4577
			.c_next:
-
 
4578
			shr ah,1
-
 
4579
			dec al
-
 
4580
			jnz .cycle
-
 
4581
 
-
 
4582
		;¢ë室 ¨§ 㧫 
-
 
4583
		inc ecx
-
 
4584
		pop edx eax
-
 
4585
 
-
 
4586
		jmp .end_f
-
 
4587
	.sub_trees:
-
 
4588
		;à¨á㥬 㧥«
-
 
4589
		push eax
-
 
4590
			stdcall vox_get_sub_brush,[h_br],ecx ;®¯à¥¤¥«ï¥¬ ª¨áâì ¤«ï à¨á®¢ ­¨ï
-
 
4591
			cmp eax,0 ;¥á«¨ ª¨áâì ­¥ ­ ©¤¥­ 
-
 
4592
			je @f
-
 
4593
				stdcall draw_vox, [buf_i], [buf_z], eax, ebx,edx,esi, [edi]
-
 
4594
			@@:
-
 
4595
		pop eax
-
 
4596
 
-
 
4597
		add edi,4
-
 
4598
	.end_f:
-
 
4599
	ret
-
 
4600
endp
-
 
4601
 
-
 
4602
;description:
-
 
4603
; äã­ªæ¨ï à¨áãîé ï ®¤¨­®ç­ë© ¢®ªá¥«
-
 
4604
;input:
-
 
4605
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â )
-
 
4606
; buf_z - ¡ãä¥à £«ã¡¨­ë (32 ¡¨â  ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥­ ᮢ¯ ¤ âì á buf_i)
-
 
4607
; buf_v - ¡ãä¥à á ¨§®¡à ¦¥­¨¥¬ ¢®ªá¥«ï (32 ¡¨â )
-
 
4608
; v_color - 梥â
-
 
4609
align 4
-
 
4610
proc draw_vox, buf_i:dword, buf_z:dword, buf_v:dword,\
-
 
4611
coord_x:dword, coord_y:dword, coord_z:dword, v_color:dword
-
 
4612
pushad
-
 
4613
	mov eax,[coord_x]
-
 
4614
	mov ebx,[coord_y]
-
 
4615
	mov edi,[buf_v]
-
 
4616
	mov ecx,buf2d_h
-
 
4617
	mov esi,buf2d_w
-
 
4618
	imul ecx,esi
-
 
4619
	add esi,eax
-
 
4620
	mov edx,buf2d_data
-
 
4621
	cld
-
 
4622
	;ecx - count pixels in voxel
-
 
4623
	;edx - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢ ¢®ªá¥«ì­®¬ ¡ãä¥à¥
-
 
4624
	;edi - 㪠§ â¥«ì ­  ¢®ªá¥«ì­ë© ¡ãä¥à
-
 
4625
	;esi - width voxel buffer add coord x
-
 
4626
	.cycle:
-
 
4627
		cmp dword[edx],0
-
 
4628
		je @f
-
 
4629
			;¯à®¢¥à塞 ¡ãä¥à £«ã¡¨­ë
-
 
4630
			push eax
-
 
4631
			stdcall buf_get_pixel, [buf_z],eax,ebx
-
 
4632
			sub eax,[coord_z]
-
 
4633
			cmp eax,[edx]
-
 
4634
			jl .dr_pixel
-
 
4635
				pop eax
-
 
4636
				jmp @f
-
 
4637
			.dr_pixel:
-
 
4638
				;à¨á㥬 â®çªã
-
 
4639
				pop eax
-
 
4640
				stdcall buf_set_pixel, [buf_i],eax,ebx,[v_color]
-
 
4641
				push ecx
-
 
4642
				mov ecx,[coord_z]
-
 
4643
				add ecx,[edx]
-
 
4644
				stdcall buf_set_pixel, [buf_z],eax,ebx,ecx
-
 
4645
				pop ecx
-
 
4646
		@@:
-
 
4647
		add edx,4
-
 
4648
		inc eax
-
 
4649
		cmp eax,esi
-
 
4650
		jl @f
-
 
4651
			inc ebx
-
 
4652
			sub eax,buf2d_w
-
 
4653
		@@:
-
 
4654
		loop .cycle
-
 
4655
popad
-
 
4656
	ret
-
 
4657
endp
-
 
4658
 
-
 
4659
;description:
-
 
4660
;äã­ªæ¨ï ¤«ï ª®à¥ªâ¨à®¢ª¨ ª®®à¤¨­ â
-
 
4661
;­ ¯à ¢«¥­¨ï ®á¥© ª®®à¤¨­ â ¢ ¢®ªá¥«¥:
-
 
4662
;*z
-
 
4663
;|
-
 
4664
;+
-
 
4665
;  * y
-
 
4666
; /
-
 
4667
;+
-
 
4668
; \
-
 
4669
;  * x
-
 
4670
;input:
-
 
4671
;  al - ­®¬¥à 㧫  ¢ ¤¥à¥¢¥ (®â 1 ¤® 8)
-
 
4672
; ebx - ª®®à¤¨­ â  x
-
 
4673
; edx - ª®®à¤¨­ â  y
-
 
4674
; esi - ª®®à¤¨­ â  z
-
 
4675
; ecx - ã஢¥­ì ⥪ã襣® 㧫 
-
 
4676
;output:
-
 
4677
; ebx - ­®¢ ï ª®®à¤¨­ â  x
-
 
4678
; edx - ­®¢ ï ª®®à¤¨­ â  y
-
 
4679
; esi - ­®¢ ï ª®®à¤¨­ â  z
-
 
4680
align 4
-
 
4681
proc vox_corect_coords, h_br:dword, v_obj:dword
-
 
4682
locals
-
 
4683
	osn_w_2 dd ? ;è¨à¨­  ®á­®¢ ­¨ï ¥¤¨­¨ç­®£® ¢®ªá¥«ï : 2
-
 
4684
	vox_h dd ? ;¢ëá®â  ¥¤¨­¨ç­®£® ¢®ªá¥«ï
-
 
4685
endl
-
 
4686
	cmp ecx,0
-
 
4687
	jl .end_f ;¤«ï ã᪮७¨ï ®âà¨á®¢ª¨
-
 
4688
 
-
 
4689
	push eax edi
-
 
4690
	and eax,15 ;¢ë¤¥«ï¥¬ ­®¬¥à 㧫  ¢ ¤¥à¥¢¥
-
 
4691
	mov edi,[v_obj]
-
 
4692
	add edi,vox_offs_tree_table
-
 
4693
	add edi,8
-
 
4694
	sub edi,eax
-
 
4695
 
-
 
4696
	push ebx ecx
-
 
4697
		mov ebx,[h_br]
-
 
4698
 
-
 
4699
		movzx ecx,byte[ebx]
-
 
4700
		shr ecx,1
-
 
4701
		mov dword[osn_w_2],ecx
-
 
4702
 
-
 
4703
		movzx ecx,byte[ebx+2]
-
 
4704
		movzx ebx,byte[ebx+1]
-
 
4705
		sub ebx,ecx
-
 
4706
		mov dword[vox_h],ebx
-
 
4707
		shr ecx,1
-
 
4708
		mov eax,ecx ;eax - ¢ëá®â  ®á­®¢ ­¨ï ¥¤¨­¨ç­®£® ¢®ªá¥«ï : 2
-
 
4709
	pop ecx ebx
-
 
4710
 
-
 
4711
	cmp ecx,1
-
 
4712
	jl @f ;¢® ¨§¡¥¦ ­¨¥ § æ¨ª«¨¢ ­¨ï
-
 
4713
		shl eax,cl
-
 
4714
		shl dword[osn_w_2],cl
-
 
4715
		shl dword[vox_h],cl
-
 
4716
	@@:
-
 
4717
 
-
 
4718
;	add esi,eax ;¬¥­ï¥¬ £«ã¡¨­ã ¤«ï ¡ãä¥à  z (ª®¬¯¥­á æ¨ï ¤«ï ª®®à¤¨­ âë y)
-
 
4719
	bt word[edi],0 ;test voxel coord x
-
 
4720
	jnc @f
-
 
4721
		add ebx,[osn_w_2]
-
 
4722
		cmp eax,0
-
 
4723
		jne .end_0
-
 
4724
			add esi,[osn_w_2] ;¬¥­ï¥¬ £«ã¡¨­ã ¤«ï ¡ãä¥à  z
-
 
4725
			jmp @f
-
 
4726
		.end_0:
-
 
4727
		add edx,eax
-
 
4728
		add esi,eax ;¬¥­ï¥¬ £«ã¡¨­ã ¤«ï ¡ãä¥à  z
-
 
4729
	@@:
-
 
4730
	bt word[edi],1 ;test voxel coord y
-
 
4731
	jnc @f
-
 
4732
		add ebx,[osn_w_2]
-
 
4733
		cmp eax,0
-
 
4734
		jne .end_1
-
 
4735
			sub esi,[osn_w_2] ;¬¥­ï¥¬ £«ã¡¨­ã ¤«ï ¡ãä¥à  z
-
 
4736
			jmp @f
-
 
4737
		.end_1:
-
 
4738
		sub edx,eax
-
 
4739
		sub esi,eax ;¬¥­ï¥¬ £«ã¡¨­ã ¤«ï ¡ãä¥à  z
-
 
4740
	@@:
-
 
4741
	bt word[edi],2 ;test voxel coord z
-
 
4742
	jnc @f
-
 
4743
		sub edx,[vox_h]
-
 
4744
	@@:
-
 
4745
	pop edi eax
-
 
4746
	.end_f:
-
 
4747
	ret
-
 
4748
endp
-
 
4749
 
-
 
4750
;¨§¢«¥ª ¥¬ ¨§ h_br 㪠§ â¥«ì ­  ¡ãä¥à á ¨§®¡à ¦¥­¨¥¬ ¢®ªá¥«ï, 㪠§ ­­®£® ¯®à浪  n
-
 
4751
align 4
-
 
4752
proc vox_get_sub_brush uses ebx ecx, h_br:dword, n:dword
-
 
4753
	xor eax,eax
-
 
4754
	mov ebx,[n]
-
 
4755
	cmp ebx,0
-
 
4756
	jl @f
-
 
4757
	mov ecx,[h_br]
-
 
4758
	cmp bl,byte[ecx+3]
-
 
4759
	jg @f
-
 
4760
		add ecx,4
-
 
4761
		imul ebx,BUF_STRUCT_SIZE
-
 
4762
		mov eax,ebx
-
 
4763
		add eax,ecx
-
 
4764
	@@:
-
 
4765
	ret
-
 
4766
endp
-
 
4767
 
-
 
4768
;description:
-
 
4769
; äã­ªæ¨ï à¨áãîé ï á१ ¢®ªá¥«ì­®£® ®¡ì¥ªâ 
-
 
4770
;input:
-
 
4771
; v_size - à §¬¥à ª¢ ¤à â  á ¢®ªá¥«¥¬
-
 
4772
; k_scale - á⥯¥­ì ¤¥â «¨§ æ¨¨ ¨§®¡à ¦¥­¨ï
-
 
4773
; n_plane - ­®¬¥à ¯«®áª®á⨠á¥ç­¨ï (¢ ¯à¥¤¥« å ®â 0 ¤® 2^k_scale - 1)
-
 
4774
; b_color - 梥⠣࠭¨æë
-
 
4775
align 4
-
 
4776
proc buf_vox_obj_draw_pl, buf_i:dword, v_obj:dword, coord_x:dword,\
-
 
4777
coord_y:dword, v_size:dword, k_scale:dword, n_plane:dword, b_color:dword
-
 
4778
	cmp [k_scale],0
-
 
4779
	jl .end_f
-
 
4780
pushad
-
 
4781
	mov eax,[v_size]
-
 
4782
	mov ecx,[k_scale]
-
 
4783
	mov ebx,eax
-
 
4784
	cmp ecx,1
-
 
4785
	jl @f
-
 
4786
		shl ebx,cl
-
 
4787
	@@:
-
 
4788
	;ebx - ¯®«­ë© à §¬¥à ¨§®¡à ¦¥­¨ï
-
 
4789
	stdcall buf_rect_by_size, [buf_i], [coord_x],[coord_y],ebx,ebx, [b_color] ;à ¬ª  ­  à¨áã­®ª
-
 
4790
	mov edx,ebx
-
 
4791
	add ebx,[coord_y]
-
 
4792
	stdcall draw_polz_hor, [buf_i], [coord_x],ebx,edx,eax, [n_plane], [k_scale], [b_color] ;¯®«§ã­®ª, ¯®ª §ë¢ î騩 ­®¬¥à á¥ç¥­¨ï
-
 
4793
 
-
 
4794
	;à¨á®¢ ­¨¥ â®ç¥ª ¤«ï á¥âª¨
-
 
4795
	push ecx
-
 
4796
	mov edi,1
-
 
4797
	cmp ecx,1
-
 
4798
	jl @f
-
 
4799
		shl edi,cl
-
 
4800
	@@:
-
 
4801
	dec edi
-
 
4802
	cmp edi,1
-
 
4803
	jl .end_0
-
 
4804
	mov ecx,edi
-
 
4805
	imul ecx,edi
-
 
4806
	mov ebx,[coord_x]
-
 
4807
	mov edx,[coord_y]
-
 
4808
	add edx,eax
-
 
4809
	xor esi,esi
-
 
4810
	cld
-
 
4811
	@@:
-
 
4812
		add ebx,eax
-
 
4813
		inc esi
-
 
4814
		stdcall buf_set_pixel, [buf_i], ebx,edx, [b_color]
-
 
4815
		cmp esi,edi
-
 
4816
		jl .end_1
-
 
4817
			;¯¥à¥å®¤ â®ç¥ª ­  ­®¢ãî áâபã
-
 
4818
			xor esi,esi
-
 
4819
			mov ebx,[coord_x]
-
 
4820
			add edx,eax
-
 
4821
		.end_1:
-
 
4822
		loop @b
-
 
4823
	.end_0:
-
 
4824
	pop ecx
-
 
4825
 
-
 
4826
	;eax - à §¬¥à ®¤­®£® ª¢ ¤à â 
-
 
4827
	;edi - 㪠§ â¥«ì ­  à¨áã¥¬ë¥ ¤ ­­ë¥ ¨§ ®¡ê¥ªâ 
-
 
4828
	mov ebx,[coord_x]
-
 
4829
	mov edx,[coord_y]
-
 
4830
	mov edi,[v_obj]
-
 
4831
	add edi,vox_offs_data
-
 
4832
	xor esi,esi
-
 
4833
	push eax
-
 
4834
	mov eax,1
-
 
4835
	shl eax,cl
-
 
4836
	dec eax
-
 
4837
	sub eax,[n_plane]
-
 
4838
	stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj],eax
-
 
4839
popad
-
 
4840
	.end_f:
-
 
4841
	ret
-
 
4842
endp
-
 
4843
 
-
 
4844
;description:
-
 
4845
; äã­ªæ¨ï à¨áãîé ï á१ ç á⨠¢®ªá¥«ì­®£® ®¡ì¥ªâ 
-
 
4846
;input:
-
 
4847
; s_c_x, s_c_y, s_c_z, s_k_scale - ¯ à ¬¥âàë ®¯à¥¤¥«ïî騥 ç áâì ¢®ªá¥«ì­®£® ®¡ê¥ªâ , ª®â®à ï ¡ã¤¥â à¨á®¢ âìáï
-
 
4848
align 4
-
 
4849
proc buf_vox_obj_draw_pl_scaled, buf_i:dword, v_obj:dword, coord_x:dword,\
-
 
4850
coord_y:dword, v_size:dword, k_scale:dword, n_plane:dword, b_color:dword,\
-
 
4851
s_c_x:dword, s_c_y:dword, s_c_z:dword, s_k_scale:dword
-
 
4852
	cmp [k_scale],0
-
 
4853
	jl .end_f
-
 
4854
pushad
-
 
4855
locals
-
 
4856
	p_node dd 0 ;த¨â¥«ì᪨© 㧥«
-
 
4857
endl
-
 
4858
	mov eax,[v_size]
-
 
4859
	mov ecx,[k_scale]
-
 
4860
	mov ebx,eax
-
 
4861
	cmp ecx,1
-
 
4862
	jl @f
-
 
4863
		shl ebx,cl
-
 
4864
	@@:
-
 
4865
	;ebx - ¯®«­ë© à §¬¥à ¨§®¡à ¦¥­¨ï
-
 
4866
	stdcall buf_rect_by_size, [buf_i], [coord_x],[coord_y],ebx,ebx, [b_color] ;à ¬ª  ­  à¨áã­®ª
-
 
4867
	mov edx,ebx
-
 
4868
	add ebx,[coord_y]
-
 
4869
	stdcall draw_polz_hor, [buf_i], [coord_x],ebx,edx,eax, [n_plane], [k_scale], [b_color] ;¯®«§ã­®ª, ¯®ª §ë¢ î騩 ­®¬¥à á¥ç¥­¨ï
-
 
4870
 
-
 
4871
	;à¨á®¢ ­¨¥ â®ç¥ª ¤«ï á¥âª¨
-
 
4872
	push ecx
-
 
4873
	mov edi,1
-
 
4874
	cmp ecx,1
-
 
4875
	jl @f
-
 
4876
		shl edi,cl
-
 
4877
	@@:
-
 
4878
	dec edi
-
 
4879
	cmp edi,1
-
 
4880
	jl .end_3
-
 
4881
	mov ecx,edi
-
 
4882
	imul ecx,edi
-
 
4883
	mov ebx,[coord_x]
-
 
4884
	mov edx,[coord_y]
-
 
4885
	add edx,eax
-
 
4886
	xor esi,esi
-
 
4887
	cld
-
 
4888
	@@:
-
 
4889
		add ebx,eax
-
 
4890
		inc esi
-
 
4891
		stdcall buf_set_pixel, [buf_i], ebx,edx, [b_color]
-
 
4892
		cmp esi,edi
-
 
4893
		jl .end_4
-
 
4894
			;¯¥à¥å®¤ â®ç¥ª ­  ­®¢ãî áâபã
-
 
4895
			xor esi,esi
-
 
4896
			mov ebx,[coord_x]
-
 
4897
			add edx,eax
-
 
4898
		.end_4:
-
 
4899
		loop @b
-
 
4900
	.end_3:
-
 
4901
	pop ecx
-
 
4902
 
-
 
4903
	mov esi,[s_k_scale]
-
 
4904
	cmp esi,1
-
 
4905
	jl .end_2
-
 
4906
	mov edi,[v_obj]
-
 
4907
	add edi,vox_offs_data
-
 
4908
 
-
 
4909
	; *** (1) ***
-
 
4910
	.found:
-
 
4911
	stdcall vox_obj_get_node_position, [v_obj],[s_c_x],[s_c_y],[s_c_z],esi
-
 
4912
	movzx bx,byte[edi+3]
-
 
4913
	mov [p_node],edi
-
 
4914
	add edi,4
-
 
4915
	cmp eax,0
-
 
4916
	je .end_1
-
 
4917
	mov ecx,eax
-
 
4918
	cld
-
 
4919
	@@: ;横« ¤«ï ¯à®¯ã᪠ ¯à¥¤ë¤ãé¨å ¯®¤¤¥à¥¢ì¥¢ ¢ 㧫¥
-
 
4920
		bt bx,0 ;¯à®¢¥à塞 ¥áâì «¨ ¤®ç¥à­¨¥ 㧫ë
-
 
4921
		jnc .end_0
-
 
4922
			xor eax,eax
-
 
4923
			stdcall vox_obj_rec0 ;¢ eax ¢ëç¨á«ï¥âáï ç¨á«® ¤®ç¥à­¨å 㧫®¢, ¢ ¤ ­­®© ¢¥â¢¨
-
 
4924
		.end_0:
-
 
4925
		shr bx,1
-
 
4926
		loop @b
-
 
4927
	.end_1:
-
 
4928
	bt bx,0
-
 
4929
	jnc .end_2 ;¥á«¨ ¯®¤¤¥à¥¢  ­¥ áãé¥áâ¢ã¥â
-
 
4930
	dec esi
-
 
4931
	cmp esi,0
-
 
4932
	jg .found
-
 
4933
 
-
 
4934
	mov eax,[v_size]
-
 
4935
	;eax - à §¬¥à ®¤­®£® ª¢ ¤à â 
-
 
4936
	;edi - 㪠§ â¥«ì ­  à¨áã¥¬ë¥ ¤ ­­ë¥ ¨§ ®¡ê¥ªâ 
-
 
4937
	mov ecx,[k_scale]
-
 
4938
	mov ebx,[coord_x]
-
 
4939
	mov edx,[coord_y]
-
 
4940
	xor esi,esi
-
 
4941
	push eax
-
 
4942
	mov eax,1
-
 
4943
	shl eax,cl
-
 
4944
	dec eax
-
 
4945
	sub eax,[n_plane]
-
 
4946
	stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj], eax
-
 
4947
 
-
 
4948
	.end_2:
-
 
4949
popad
-
 
4950
	.end_f:
-
 
4951
	ret
-
 
4952
endp
-
 
4953
 
-
 
4954
;description:
-
 
4955
; ®¯à¥¤¥«¥­¨¥ ¯®§¨æ¨¨ 㧫  ¢ ¤¥à¥¢¥ (®â 0 ¤® 7)
-
 
4956
align 4
-
 
4957
proc vox_obj_get_node_position uses ebx ecx edi, v_obj:dword,\
-
 
4958
coord_x:dword,coord_y:dword,coord_z:dword,k_scale:dword
-
 
4959
	mov ecx,[k_scale]
-
 
4960
	dec ecx
-
 
4961
	mov eax,[coord_x]
-
 
4962
	mov ebx,[coord_y]
-
 
4963
	mov edi,[coord_z]
-
 
4964
	cmp ecx,1
-
 
4965
	jl .end_0
-
 
4966
		shr eax,cl
-
 
4967
		shr ebx,cl
-
 
4968
		shr edi,cl
-
 
4969
	.end_0:
-
 
4970
	and eax,1
-
 
4971
	bt ebx,0
-
 
4972
	jnc @f
-
 
4973
		bts eax,1
-
 
4974
	@@:
-
 
4975
	bt edi,0
-
 
4976
	jnc @f
-
 
4977
		bts eax,2
-
 
4978
	@@:
-
 
4979
 
-
 
4980
	mov edi,[v_obj]
-
 
4981
	add edi,vox_offs_tree_table
-
 
4982
	@@:
-
 
4983
		cmp al,byte[edi]
-
 
4984
		je @f
-
 
4985
		inc edi
-
 
4986
		jmp @b
-
 
4987
	@@:
-
 
4988
	sub edi,[v_obj]
-
 
4989
	sub edi,vox_offs_tree_table
-
 
4990
	mov eax,edi
-
 
4991
	
-
 
4992
	ret
-
 
4993
endp
-
 
4994
 
-
 
4995
;input:
-
 
4996
; edi - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢®ªá¥«ì­®£® ®¡ê¥ªâ 
-
 
4997
;output:
-
 
4998
; eax - eax + ç¨á«® 㧫®¢ ¢ ¤ ­­ëå ¢®ªá. ®¡ê¥ªâ 
-
 
4999
; edi - 㪠§ â¥«ì ­  ᬥ饭­ë¥ ¤ ­­ë¥ ¢®ªá. ®¡ê¥ªâ 
-
 
5000
align 4
-
 
5001
proc vox_obj_rec0
-
 
5002
	inc eax
-
 
5003
	cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï
-
 
5004
	je .sub_trees
-
 
5005
 
-
 
5006
		;४ãàᨢ­ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢
-
 
5007
		push ebx ecx
-
 
5008
		mov bh,byte[edi+3]
-
 
5009
		add edi,4
-
 
5010
		mov bl,8
-
 
5011
		.cycle:
-
 
5012
			bt bx,8 ;â¥áâ¨à㥬 ⮫쪮 bh
-
 
5013
			jnc .c_next
-
 
5014
				stdcall vox_obj_rec0
-
 
5015
			.c_next:
-
 
5016
			shr bh,1
-
 
5017
			dec bl
-
 
5018
			jnz .cycle
-
 
5019
		pop ecx ebx
-
 
5020
 
-
 
5021
		jmp .end_f
-
 
5022
	.sub_trees:
-
 
5023
		add edi,4
-
 
5024
	.end_f:
-
 
5025
	ret
-
 
5026
endp
-
 
5027
 
-
 
5028
;description:
-
 
5029
; äã­ªæ¨ï à¨áãîé ï £®à¨§®­â «ì­ãî ¯®«®áã á ¯®«§ã­ª®¬
-
 
5030
align 4
-
 
5031
proc draw_polz_hor uses eax ebx ecx, buf:dword, coord_x:dword, coord_y:dword,\
-
 
5032
size_x:dword, size_y:dword, pos:dword, k_scale:dword, color:dword
-
 
5033
	mov ebx,[size_x]
-
 
5034
	stdcall buf_rect_by_size, [buf], [coord_x],[coord_y],ebx,[size_y], [color]
-
 
5035
	mov ecx,[k_scale]
-
 
5036
	shr ebx,cl
-
 
5037
	mov eax,[pos]
-
 
5038
	imul eax,ebx
-
 
5039
	add eax,[coord_x]
-
 
5040
	stdcall buf_filled_rect_by_size, [buf], eax,[coord_y],ebx,[size_y], [color]
-
 
5041
	ret
-
 
5042
endp
-
 
5043
 
-
 
5044
;input:
-
 
5045
; ebx - coord_x
-
 
5046
; edx - coord_y
2943
 
5047
; esi - coord_z
-
 
5048
; ecx - ã஢¥­ì ⥪ã襣® 㧫 
-
 
5049
; edi - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢®ªá¥«ì­®£® ®¡ê¥ªâ 
-
 
5050
align 4
-
 
5051
proc draw_sub_vox_obj_pl, buf_i:dword, v_obj:dword, clip_z:dword,\
-
 
5052
v_size:dword
-
 
5053
	cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï
-
 
5054
	je .sub_trees
-
 
5055
 
-
 
5056
		;¯à®à¨á®¢ª  à ¬ª¨ ¥á«¨ à §¬¥à 㧫  = 1
-
 
5057
		cmp ecx,0
-
 
5058
		jne @f
-
 
5059
			;¯à®¢¥àª  £«ã¡¨­ë esi
-
 
5060
			;clip_z=n_plane
-
 
5061
			stdcall vox_is_clip, [clip_z];,[v_size]
-
 
5062
			cmp eax,0
-
 
5063
			je @f
-
 
5064
				push ecx
-
 
5065
				mov ecx,dword[edi]
-
 
5066
				and ecx,0xffffff
-
 
5067
				stdcall buf_rect_by_size, [buf_i], ebx,edx, [v_size],[v_size],ecx
-
 
5068
				pop ecx
-
 
5069
		@@:
-
 
5070
 
-
 
5071
		;४ãàᨢ­ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢
-
 
5072
		push edx
-
 
5073
		;¢å®¤ ¢­ãâàì 㧫 
-
 
5074
		dec ecx
-
 
5075
 
-
 
5076
		mov eax,[v_size]
-
 
5077
		cmp ecx,1
-
 
5078
		jl @f
-
 
5079
			shl eax,cl
-
 
5080
		@@:
-
 
5081
 
-
 
5082
		add edx,eax ;ª®à¥ªâ¨à®¢ª  ¢ëá®âë ¯®¤ ¢®ªá¥«ì ­¨¦­¥£® ã஢­ï
-
 
5083
 
-
 
5084
		mov ah,byte[edi+3]
-
 
5085
		add edi,4
-
 
5086
		mov al,8
-
 
5087
		.cycle:
-
 
5088
			bt ax,8 ;â¥áâ¨à㥬 ⮫쪮 ah
-
 
5089
			jnc .c_next
-
 
5090
				push eax ebx edx esi
-
 
5091
				stdcall vox_corect_coords_pl, [v_obj],[v_size]
-
 
5092
				stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj],[clip_z],[v_size]
-
 
5093
				pop esi edx ebx eax
-
 
5094
			.c_next:
-
 
5095
			shr ah,1
-
 
5096
			dec al
-
 
5097
			jnz .cycle
-
 
5098
		;¢ë室 ¨§ 㧫 
-
 
5099
		inc ecx
-
 
5100
		pop edx
-
 
5101
		jmp .end_f
-
 
5102
	.sub_trees:
-
 
5103
		cmp ecx,0
-
 
5104
		jl .end_0 ;­¥ à¨á㥬 ®ç¥­ì ¬ «¥­ìª¨¥ ¢®ªá¥«¨
-
 
5105
 
-
 
5106
			;¯à®¢¥àª  £«ã¡¨­ë esi
-
 
5107
			;clip_z=n_plane
-
 
5108
			stdcall vox_is_clip, [clip_z]
-
 
5109
			cmp eax,0
-
 
5110
			je .end_0
-
 
5111
 
-
 
5112
			;à¨á㥬 㧥«
-
 
5113
			mov eax,[edi]
-
 
5114
			and eax,0xffffff
-
 
5115
			push eax ;梥â 㧫 
-
 
5116
 
-
 
5117
			mov eax,[v_size]
-
 
5118
			cmp ecx,1
-
 
5119
			jl @f
-
 
5120
				;ª¢ ¤à â ¡®«ìè¥ â¥ªã饣® ¬ áèâ ¡ 
-
 
5121
				shl eax,cl ;à §¬¥à 㧫 
-
 
5122
				stdcall buf_filled_rect_by_size, [buf_i], ebx,edx, eax,eax
-
 
5123
				push ebx edx esi
-
 
5124
				mov esi,eax
-
 
5125
				inc ebx
-
 
5126
				inc edx
-
 
5127
				sub esi,2
-
 
5128
				mov eax,[buf_i]
-
 
5129
				push dword 128
-
 
5130
				push dword[eax+16] ;+16 - b_color
-
 
5131
				stdcall combine_colors_3,[edi]
-
 
5132
				stdcall buf_rect_by_size, [buf_i], ebx,edx, esi,esi,eax
-
 
5133
				pop esi edx ebx
-
 
5134
				jmp .end_0
-
 
5135
			@@:
-
 
5136
				;ª¢ ¤à â ⥪ã饣® ¬ áèâ ¡ 
-
 
5137
				stdcall buf_filled_rect_by_size, [buf_i], ebx,edx, eax,eax
-
 
5138
		.end_0:
-
 
5139
		add edi,4
-
 
5140
	.end_f:
-
 
5141
	ret
-
 
5142
endp
-
 
5143
 
-
 
5144
;description:
-
 
5145
; ¢á¯®¬®£ â¥«ì­ ï äã­ªæ¨ï ¤«ï ¯à®¢¥àª¨ £«ã¡¨­ë esi
-
 
5146
;input:
-
 
5147
; ecx - ã஢¥­ì ⥪ã襣® 㧫 
-
 
5148
; esi - coord z
-
 
5149
; clip_z - n_plane
-
 
5150
;output:
-
 
5151
; eax - 0 if no draw, 1 if draw
-
 
5152
align 4
-
 
5153
proc vox_is_clip uses ebx edi, clip_z:dword
-
 
5154
	xor eax,eax
-
 
5155
	mov ebx,[clip_z]
-
 
5156
	mov edi,1
-
 
5157
	cmp ecx,1
-
 
5158
	jl @f
-
 
5159
		shl edi,cl
-
 
5160
	@@:
-
 
5161
	;edi = 2^ecx
-
 
5162
	add edi,esi
-
 
5163
	cmp edi,ebx ;if (esi+2^ecx <= n_plane) no draw
-
 
5164
	jle @f
-
 
5165
	inc ebx
-
 
5166
	cmp esi,ebx ;if (esi >= (n_plane+1)) no draw
-
 
5167
	jge @f
-
 
5168
		inc eax
-
 
5169
	@@:
-
 
5170
	ret
-
 
5171
endp
-
 
5172
 
-
 
5173
;äã­ªæ¨ï ¤«ï ª®à¥ªâ¨à®¢ª¨ ª®®à¤¨­ â
-
 
5174
;­ ¯à ¢«¥­¨ï ®á¥© ª®®à¤¨­ â ¢ ¢®ªá¥«¥:
-
 
5175
;*z
-
 
5176
;|
-
 
5177
;+-* x
-
 
5178
;input:
-
 
5179
;  al - ­®¬¥à 㧫  ¢ ¤¥à¥¢¥ (®â 1 ¤® 8)
-
 
5180
; ebx - ª®®à¤¨­ â  x
-
 
5181
; edx - ª®®à¤¨­ â  y
-
 
5182
; esi - ª®®à¤¨­ â  z
-
 
5183
; ecx - ã஢¥­ì ⥪ã襣® 㧫 
-
 
5184
;output:
-
 
5185
; ebx - ­®¢ ï ª®®à¤¨­ â  x
-
 
5186
; edx - ­®¢ ï ª®®à¤¨­ â  y
-
 
5187
; esi - ­®¢ ï ª®®à¤¨­ â  z
-
 
5188
align 4
-
 
5189
proc vox_corect_coords_pl, v_obj:dword, v_size:dword
-
 
5190
	cmp ecx,0
-
 
5191
	jl .end_f ;¤«ï ã᪮७¨ï ®âà¨á®¢ª¨
-
 
5192
 
-
 
5193
	push eax edi
-
 
5194
	and eax,15 ;¢ë¤¥«ï¥¬ ­®¬¥à 㧫  ¢ ¤¥à¥¢¥
-
 
5195
	mov edi,[v_obj]
-
 
5196
	add edi,vox_offs_tree_table
-
 
5197
	add edi,8
-
 
5198
	sub edi,eax
-
 
5199
 
-
 
5200
	mov eax,[v_size]
-
 
5201
	cmp ecx,1
-
 
5202
	jl @f
-
 
5203
		shl eax,cl
-
 
5204
	@@:
-
 
5205
 
-
 
5206
	bt word[edi],0 ;test voxel coord x
-
 
5207
	jnc @f
-
 
5208
		add ebx,eax
-
 
5209
	@@:
-
 
5210
	bt word[edi],2 ;test voxel coord z
-
 
5211
	jnc @f
-
 
5212
		sub edx,eax
-
 
5213
	@@:
-
 
5214
	bt word[edi],1 ;test voxel coord y
-
 
5215
	jc @f
-
 
5216
		mov eax,1
-
 
5217
		cmp ecx,1
-
 
5218
		jl .end_0
-
 
5219
			shl eax,cl
-
 
5220
		.end_0:
-
 
5221
		add esi,eax ;¬¥­ï¥¬ £«ã¡¨­ã ¤«ï ¡ãä¥à  z
-
 
5222
	@@:
-
 
5223
	pop edi eax
-
 
5224
	.end_f:
-
 
5225
	ret
-
 
5226
endp
-
 
5227
 
-
 
5228
;description:
-
 
5229
; äã­ªæ¨ï à¨áãîé ï ⥭¨
-
 
5230
;input:
-
 
5231
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â )
-
 
5232
; buf_z - ¡ãä¥à £«ã¡¨­ë (32 ¡¨â  ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥­ ᮢ¯ ¤ âì á buf_i)
-
 
5233
; h_br - ª¨áâì á ¨§®¡à ¦¥­¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â )
-
 
5234
; k_scale - ª®íä. ¤«ï ¬ áèâ ¡¨à®¢ ­¨ï ¨§®¡à ¦¥­¨ï
-
 
5235
align 4
-
 
5236
proc buf_vox_obj_draw_3g_shadows, buf_i:dword, buf_z:dword, h_br:dword, \
-
 
5237
coord_x:dword, coord_y:dword, color:dword, k_scale:dword, prop:dword
-
 
5238
locals
-
 
5239
	correct_z dd 0 ;ª®à¥ªâ¨à®¢ª  ¤«ï ¡ãä¥à  £«ã¡¨­ë
-
 
5240
endl
-
 
5241
pushad
-
 
5242
	mov eax,[k_scale]
-
 
5243
	add eax,[prop]
-
 
5244
	mov dword[correct_z],8
-
 
5245
	sub [correct_z],eax
-
 
5246
	mov ebx,[coord_x]
-
 
5247
	;correct_z = 8-k_scale-prop
-
 
5248
 
-
 
5249
	stdcall buf_vox_obj_get_img_w_3g, [h_br],[k_scale]
-
 
5250
	mov edx,eax ;edx - è¨à¨­  ¨§®¡à ¦¥­¨ï
-
 
5251
	stdcall buf_vox_obj_get_img_h_3g, [h_br],[k_scale]
-
 
5252
	mov esi,eax
-
 
5253
 
-
 
5254
	mov edi,[coord_y]
-
 
5255
	mov ecx,edx
-
 
5256
	add edx,ebx ;è¨à¨­  + ®âáâ㯠᫥¢ 
-
 
5257
	imul ecx,esi
-
 
5258
	cld
-
 
5259
	.cycle_0:
-
 
5260
		stdcall buf_get_pixel, [buf_z],ebx,edi
-
 
5261
		cmp eax,0
-
 
5262
		je @f
-
 
5263
			stdcall vox_correct_z, [correct_z]
-
 
5264
			push eax
-
 
5265
			stdcall buf_get_pixel, [buf_i],ebx,edi
-
 
5266
			stdcall combine_colors_3,eax,[color] ;,eax
-
 
5267
			stdcall buf_set_pixel, [buf_i],ebx,edi,eax
-
 
5268
		@@:
-
 
5269
		inc ebx
-
 
5270
		cmp ebx,edx
-
 
5271
		jl @f
-
 
5272
			mov ebx,[coord_x]
-
 
5273
			inc edi
-
 
5274
		@@:
-
 
5275
		loop .cycle_0
-
 
5276
 
-
 
5277
popad
-
 
5278
	ret
-
 
5279
endp
-
 
5280
 
-
 
5281
;output:
-
 
5282
; eax - scaled coord z
-
 
5283
align 4
-
 
5284
proc vox_correct_z uses ecx, correct_z:dword
-
 
5285
	mov ecx,[correct_z]
-
 
5286
	cmp ecx,0
-
 
5287
	je .end_f
-
 
5288
	jl .end_0
-
 
5289
		shl eax,cl
-
 
5290
		jmp .end_f
-
 
5291
	.end_0:
-
 
5292
		neg ecx
-
 
5293
		inc ecx
-
 
5294
		shr eax,cl
-
 
5295
	.end_f:
-
 
5296
	ret
-
 
5297
endp
-
 
5298
 
-
 
5299
;output:
-
 
5300
; eax - color
-
 
5301
align 4
-
 
5302
proc combine_colors_3 uses ebx ecx edx edi esi, col_0:dword, col_1:dword, alpha:dword
-
 
5303
 
-
 
5304
	mov ebx,[col_0]
-
 
5305
	mov ecx,[col_1]
-
 
5306
	movzx di,byte[alpha] ;pro
-
 
5307
	mov si,0x00ff ;---get transparent---
-
 
5308
	sub si,di ;256-pro
-
 
5309
 
-
 
5310
	;---blye---
-
 
5311
	movzx ax,bl
-
 
5312
	imul ax,si
-
 
5313
	movzx dx,cl
-
 
5314
	imul dx,di
-
 
5315
	add ax,dx
-
 
5316
	mov cl,ah
-
 
5317
	;---green---
-
 
5318
	movzx ax,bh
-
 
5319
	imul ax,si
-
 
5320
	movzx dx,ch
-
 
5321
	imul dx,di
-
 
5322
	add ax,dx
-
 
5323
	mov ch,ah
-
 
5324
	shr ebx,16
-
 
5325
	ror ecx,16
-
 
5326
	;---red---
-
 
5327
	movzx ax,bl
-
 
5328
	imul ax,si
-
 
5329
	movzx dx,cl
-
 
5330
	imul dx,di
-
 
5331
	add ax,dx
-
 
5332
 
-
 
5333
	shl eax,8
-
 
5334
	ror ecx,16
-
 
5335
	mov ax,cx
-
 
5336
	and eax,0xffffff
-
 
Line 5337... Line 2944...
5337
 
2944
 
5338
	ret
2945
 
5339
endp
2946
include 'fun_voxel.inc' ;ä㭪樨 ¤«ï à ¡®âë á ¢®ªá¥«ì­®© £à ä¨ª®©
5340
 
2947