Subversion Repositories Kolibri OS

Rev

Rev 2815 | Rev 8271 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2815 IgorA 1
use32
2
	org 0x0
3
	db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
4
	dd 0x1
5
	dd start
6
	dd i_end ;размер приложения
7
	dd mem,stacktop
8
	dd 0,cur_dir_path
9
 
10
include '../../../../../macros.inc'
11
include '../../../../../proc32.inc'
12
include '../../../../../develop/libraries/box_lib/load_lib.mac'
3105 IgorA 13
include '../../../../../dll.inc'
2815 IgorA 14
 
15
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
16
 
17
struct FileInfoBlock
18
	Function dd ?
19
	Position dd ?
20
	Flags	 dd ?
21
	Count	 dd ?
22
	Buffer	 dd ?
23
		db ?
24
	FileName dd ?
25
ends
26
 
27
max_open_file_size equ 64*1024 ;64 Kb
28
 
29
align 4
30
open_file_vox dd 0 ;указатель на область для открытия файлов
31
run_file_70 FileInfoBlock
32
f_name db 'vaz2106.vox',0
33
 
34
BUF_STRUCT_SIZE equ 21
35
vox_offs_tree_table equ 4
36
 
37
;поворот объекта на 90 градусов
38
;x0y0 - x1y0
39
;x1y0 - x1y1
40
;x0y1 - x0y0
41
;x1y1 - x0y1
42
align 4
43
proc vox_obj_rot_z uses eax ebx ecx, v_obj:dword
44
	mov ebx,[v_obj]
45
	add ebx,vox_offs_tree_table
46
	mov ecx,2
47
	cld
48
	@@:
49
		mov eax,dword[ebx]
50
		mov byte[ebx+1],al
51
		mov byte[ebx+3],ah
52
		shr eax,16
53
		mov byte[ebx],al
54
		mov byte[ebx+2],ah
55
		add ebx,4
56
		loop @b
57
	ret
58
endp
59
 
60
 
61
 
62
align 4
63
start:
64
	load_library vectors_name, cur_dir_path, library_path, system_path, \
65
		err_message_found_lib, head_f_l, import_buf2d_lib, err_message_import, head_f_i
66
	cmp eax,-1
67
	jz button.exit
68
 
69
	mcall 40,0x27
70
	stdcall [buf2d_create], buf_0 ;создаем буфер
71
	stdcall [buf2d_create], buf_z
72
	stdcall [buf2d_vox_brush_create], buf_vox, vox_6_7_z ;создаем воксельную кисть
73
 
74
	stdcall mem.Alloc,max_open_file_size
75
	mov dword[open_file_vox],eax
76
 
77
	copy_path f_name,[32],file_name,0x0
78
 
79
	mov eax,70 ;70-я функция работа с файлами
80
	mov [run_file_70.Function], 0
81
	mov [run_file_70.Position], 0
82
	mov [run_file_70.Flags], 0
83
	mov dword[run_file_70.Count], max_open_file_size
84
	m2m [run_file_70.Buffer], [open_file_vox]
85
	mov byte[run_file_70+20], 0
86
	mov dword[run_file_70.FileName], file_name
87
	mov ebx,run_file_70
88
	int 0x40 ;загружаем воксельный объект
89
 
90
	stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox,\
91
		[open_file_vox], 0,0, 0, 6 ;рисуем воксельный объект
92
	stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_z, buf_vox,\
93
		0,0, 0, 6, 3 ;рисуем тени
94
 
95
	stdcall vox_obj_rot_z, [open_file_vox] ;поворачиваем
96
	stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox, [open_file_vox], 0,0, 0, 5
97
	stdcall vox_obj_rot_z, [open_file_vox]
98
	stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox, [open_file_vox], 100,0, 0, 5
99
	stdcall vox_obj_rot_z, [open_file_vox]
100
	stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_z, buf_vox, [open_file_vox], 200,0, 0, 5
101
 
102
align 4
103
red_win:
104
	call draw_window
105
 
106
align 4
107
still:
108
	mcall 10
109
	cmp al,1 ;изменилось положение окна
110
	jz red_win
111
	cmp al,2
112
	jz key
113
	cmp al,3
114
	jz button
115
	jmp still
116
 
117
align 4
118
draw_window:
119
	pushad
120
	mcall 12,1
121
 
122
	mov edx,0x33000000
123
	mcall 0,(50 shl 16)+410,(30 shl 16)+480,,,caption
124
 
125
	stdcall [buf2d_draw], buf_0
126
 
127
	mcall 12,2
128
	popad
129
	ret
130
 
131
align 4
132
key:
133
	mcall 2
134
 
135
	cmp ah,27 ;Esc
136
	je button.exit
137
 
138
	jmp still
139
 
140
align 4
141
button:
142
	mcall 17 ;получить код нажатой кнопки
143
	cmp ah,1
144
	jne still
145
.exit:
146
	stdcall [buf2d_delete],buf_0 ;удаляем буфер
147
	stdcall [buf2d_delete],buf_z
148
	stdcall [buf2d_vox_brush_delete],buf_vox
149
	stdcall mem.Free,[open_file_vox]
150
	mcall -1 ;выход из программы
151
 
152
caption db 'Test buf2d library, [Esc] - exit',0
153
 
154
;--------------------------------------------------
155
align 4
156
import_buf2d_lib:
157
	dd sz_lib_init
158
	buf2d_create dd sz_buf2d_create
159
	buf2d_clear dd sz_buf2d_clear
160
	buf2d_draw dd sz_buf2d_draw
161
	buf2d_delete dd sz_buf2d_delete
162
 
163
	;воксельные функции:
164
	buf2d_vox_brush_create dd sz_buf2d_vox_brush_create
165
	buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete
166
	;buf2d_vox_obj_draw_1g dd sz_buf2d_vox_obj_draw_1g
167
	;buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g
168
	;buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g
169
	buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g
170
	;buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled
171
	buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows
172
	;buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl
173
	;buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled
174
 
175
	dd 0,0
176
	sz_lib_init db 'lib_init',0
177
	sz_buf2d_create db 'buf2d_create',0
178
	sz_buf2d_clear db 'buf2d_clear',0
179
	sz_buf2d_draw db 'buf2d_draw',0
180
	sz_buf2d_delete db 'buf2d_delete',0
181
 
182
	;воксельные функции:
183
	sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
184
	sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
185
	;sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0
186
	;sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
187
	;sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0
188
	sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0
189
	;sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0
190
	sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0
191
	;sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0
192
	;sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0
193
 
194
align 4
195
buf_0: ;буфер основного изображения
196
	dd 0 ;указатель на буфер изображения
197
	dw 5 ;+4 left
198
	dw 3 ;+6 top
199
	dd 6*64 ;+8 w
200
	dd 7*64 ;+12 h
201
	dd 0xffffff ;+16 color
202
	db 24 ;+20 bit in pixel
203
 
204
align 4
205
buf_z: ;буфер глубины
206
	dd 0 ;указатель на буфер изображения
207
	dw 0 ;+4 left
208
	dw 0 ;+6 top
209
	dd 6*64 ;+8 w
210
	dd 7*64 ;+12 h
211
	dd 0 ;+16 color
212
	db 32 ;+20 bit in pixel
213
 
214
;данные для создания минимального единичного вокселя
215
align 4
216
vox_6_7_z:
217
dd 0,0,1,1,0,0,\
218
   0,2,2,2,2,0,\
219
   2,2,2,2,2,2,\
220
   2,3,2,2,3,2,\
221
   2,3,3,3,3,2,\
222
   0,3,3,3,3,0,\
223
   0,0,3,3,0,0
224
 
225
align 4
226
buf_vox:
227
	db 6,7,4,3 ;w,h,h_osn,n
228
	rb BUF_STRUCT_SIZE*(2+1)
229
 
230
;--------------------------------------------------
231
system_path db '/sys/lib/'
232
vectors_name db 'buf2d.obj',0
233
err_message_found_lib db 'Sorry I cannot load library buf2d.obj',0
234
head_f_i:
235
head_f_l db 'System error',0
236
err_message_import db 'Error on load import library buf2d.obj',0
237
;--------------------------------------------------
238
 
239
i_end: ;конец кода
240
	rb 1024
241
stacktop:
242
	file_name:
243
		rb 4096
244
cur_dir_path:
245
	rb 4096
246
library_path:
247
	rb 4096
248
mem:
249