Subversion Repositories Kolibri OS

Rev

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

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