Subversion Repositories Kolibri OS

Rev

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

Rev 6523 Rev 8063
Line 3... Line 3...
3
macro ADD_OP a,b,c
3
macro ADD_OP a,b,c
4
{
4
{
5
	db 'gl',`a,' ',c,0
5
	db 'gl',`a,' ',c,0
6
}
6
}
7
include 'opinfo.inc'
7
include 'opinfo.inc'
-
 
8
purge ADD_OP
Line 8... Line 9...
8
 
9
 
-
 
10
;указатели на функции ;static void (*op_table_func[])(GLContext *,GLParam *)=
9
;указатели на функции ;static void (*op_table_func[])(GLContext *,GLParam *)=
11
align 4
10
op_table_func:
12
op_table_func:
11
macro ADD_OP a,b,c
13
macro ADD_OP a,b,c
12
{
14
{
13
	dd glop#a
15
	dd glop#a
14
}
16
}
-
 
17
include 'opinfo.inc'
Line 15... Line 18...
15
include 'opinfo.inc'
18
purge ADD_OP
-
 
19
 
16
 
20
;число параметров в функциях
17
;число параметров в функциях
21
align 4
18
op_table_size:
22
op_table_size:
19
macro ADD_OP a,b,c
23
macro ADD_OP a,b,c
20
{
24
{
21
	dd b+1
25
	dd b+1
-
 
26
}
-
 
27
include 'opinfo.inc'
-
 
28
purge ADD_OP
-
 
29
 
-
 
30
;коды функций у которых нет входных параметров
-
 
31
align 4
-
 
32
macro ADD_OP a,b,c
-
 
33
{
-
 
34
if b eq 0
-
 
35
	op_#a dd OP_#a
-
 
36
end if
-
 
37
}
Line 22... Line 38...
22
}
38
include 'opinfo.inc'
23
include 'opinfo.inc'
39
purge ADD_OP
24
 
40
 
25
 
41
 
26
;output:
42
;output:
27
; eax = context.shared_state.lists[list]
43
; eax = context.shared_state.lists[list]
28
align 4
44
align 4
29
proc find_list uses ebx, context:dword, list:dword
-
 
30
	mov eax,[context]
45
proc find_list uses ebx, context:dword, list:dword
31
	mov eax,[eax+GLContext.shared_state]
46
	mov eax,[context]
32
	mov ebx,[list]
47
	mov eax,[eax+GLContext.shared_state]
33
	shl ebx,2
48
	mov ebx,[list]
Line 34... Line 49...
34
	add eax,ebx
49
	lea eax,[eax+4*ebx]
Line 53... Line 68...
53
		mov eax,ecx
68
		mov eax,ecx
54
		jmp @b
69
		jmp @b
55
	.end_w:
70
	.end_w:
Line 56... Line 71...
56
 
71
 
57
	stdcall gl_free,edx
-
 
58
	mov ecx,[list]
-
 
59
	shl ecx,2
72
	stdcall gl_free,edx
-
 
73
	mov ebx,[ebx+GLContext.shared_state] ;ebx = &context.shared_state.lists
60
	mov ebx,[ebx+GLContext.shared_state] ;ebx = &context.shared_state.lists
74
	mov ecx,[list]
61
	add ebx,ecx
75
	lea ebx,[ebx+4*ecx]
62
	mov dword[ebx],0 ;=NULL
76
	mov dword[ebx],0 ;=NULL
63
	ret
77
	ret
Line 64... Line 78...
64
endp
78
endp
Line 75... Line 89...
75
	mov dword[ecx+offs_gpbu_ops],OP_EndList ;ob.ops[0].op=OP_EndList
89
	mov dword[ecx+offs_gpbu_ops],OP_EndList ;ob.ops[0].op=OP_EndList
Line 76... Line 90...
76
 
90
 
77
	mov ebx,[context]
91
	mov ebx,[context]
78
	mov ebx,[ebx+GLContext.shared_state]
92
	mov ebx,[ebx+GLContext.shared_state]
79
	mov ecx,[list]
-
 
80
	shl ecx,2
93
	mov ecx,[list]
81
	add ebx,ecx
94
	lea ebx,[ebx+4*ecx]
82
	mov [ebx],eax ;context.shared_state.lists[list]=l
95
	mov [ebx],eax ;context.shared_state.lists[list]=l
83
	ret
96
	ret
Line 84... Line 97...
84
endp
97
endp
Line 114... Line 127...
114
align 4
127
align 4
115
proc gl_compile_op, context:dword, p:dword
128
proc gl_compile_op, context:dword, p:dword
116
pushad
129
pushad
117
	mov edx,[context]
130
	mov edx,[context]
Line 118... Line -...
118
 
-
 
119
	lea ebx,[op_table_size]
131
 
120
	mov ecx,[p]
132
	mov ecx,[p]
121
	mov ecx,[ecx]
-
 
122
	shl ecx,2
133
	mov ecx,[ecx] ;код операции
123
	add ecx,ebx
134
	lea ecx,[op_table_size+4*ecx]
124
	mov ecx,[ecx] ;ecx = кол-во параметров в компилируемой функции
135
	mov ecx,[ecx] ;ecx = кол-во параметров в компилируемой функции
125
	mov ebx,[edx+GLContext.current_op_buffer_index]
136
	mov ebx,[edx+GLContext.current_op_buffer_index]
Line 126... Line 137...
126
	mov eax,[edx+GLContext.current_op_buffer]
137
	mov eax,[edx+GLContext.current_op_buffer]
127
 
-
 
128
	; we should be able to add a NextBuffer opcode
138
 
129
	mov esi,ebx
139
	; we should be able to add a NextBuffer opcode
130
	add esi,ecx
140
	lea esi,[ebx+ecx]
131
	cmp esi,(OP_BUFFER_MAX_SIZE-2)
141
	cmp esi,(OP_BUFFER_MAX_SIZE-2)
132
	jle @f
142
	jle @f
133
		mov edi,eax
143
		mov edi,eax
Line 134... Line 144...
134
		stdcall gl_zalloc,sizeof.GLParamBuffer
144
		stdcall gl_zalloc,sizeof.GLParamBuffer
135
		mov dword[eax+offs_gpbu_next],0 ;=NULL
-
 
136
 
-
 
137
		mov dword[edi+offs_gpbu_next],eax
145
		mov dword[eax+offs_gpbu_next],0 ;=NULL
138
		mov esi,ebx
146
 
139
		shl esi,2
147
		mov dword[edi+offs_gpbu_next],eax
Line 140... Line 148...
140
		add esi,edi
148
		lea esi,[edi+4*ebx]
141
		mov dword[esi+offs_gpbu_ops],OP_NextBuffer
149
		mov dword[esi+offs_gpbu_ops],OP_NextBuffer
142
		mov dword[esi+offs_gpbu_ops+4],eax
150
		mov dword[esi+offs_gpbu_ops+4],eax
Line 143... Line 151...
143
 
151
 
144
		mov dword[edx+GLContext.current_op_buffer],eax
152
		mov dword[edx+GLContext.current_op_buffer],eax
145
		xor ebx,ebx
-
 
146
	@@:
-
 
147
 
153
		xor ebx,ebx
148
	mov esi,[p]
154
	@@:
149
	@@:
155
 
150
		mov edi,ebx
156
	mov esi,[p]
151
		shl edi,2
157
	@@:
152
		add edi,eax
158
		lea edi,[eax+4*ebx]