5,8 → 5,10 |
db 'gl',`a,' ',c,0 |
} |
include 'opinfo.inc' |
purge ADD_OP |
|
;указатели на функции ;static void (*op_table_func[])(GLContext *,GLParam *)= |
align 4 |
op_table_func: |
macro ADD_OP a,b,c |
{ |
13,8 → 15,10 |
dd glop#a |
} |
include 'opinfo.inc' |
purge ADD_OP |
|
;число параметров в функциях |
align 4 |
op_table_size: |
macro ADD_OP a,b,c |
{ |
21,8 → 25,20 |
dd b+1 |
} |
include 'opinfo.inc' |
purge ADD_OP |
|
;коды функций у которых нет входных параметров |
align 4 |
macro ADD_OP a,b,c |
{ |
if b eq 0 |
op_#a dd OP_#a |
end if |
} |
include 'opinfo.inc' |
purge ADD_OP |
|
|
;output: |
; eax = context.shared_state.lists[list] |
align 4 |
30,8 → 46,7 |
mov eax,[context] |
mov eax,[eax+GLContext.shared_state] |
mov ebx,[list] |
shl ebx,2 |
add eax,ebx |
lea eax,[eax+4*ebx] |
mov eax,[eax] |
ret |
endp |
55,10 → 70,9 |
.end_w: |
|
stdcall gl_free,edx |
mov ebx,[ebx+GLContext.shared_state] ;ebx = &context.shared_state.lists |
mov ecx,[list] |
shl ecx,2 |
mov ebx,[ebx+GLContext.shared_state] ;ebx = &context.shared_state.lists |
add ebx,ecx |
lea ebx,[ebx+4*ecx] |
mov dword[ebx],0 ;=NULL |
ret |
endp |
77,8 → 91,7 |
mov ebx,[context] |
mov ebx,[ebx+GLContext.shared_state] |
mov ecx,[list] |
shl ecx,2 |
add ebx,ecx |
lea ebx,[ebx+4*ecx] |
mov [ebx],eax ;context.shared_state.lists[list]=l |
ret |
endp |
116,18 → 129,15 |
pushad |
mov edx,[context] |
|
lea ebx,[op_table_size] |
mov ecx,[p] |
mov ecx,[ecx] |
shl ecx,2 |
add ecx,ebx |
mov ecx,[ecx] ;код операции |
lea ecx,[op_table_size+4*ecx] |
mov ecx,[ecx] ;ecx = кол-во параметров в компилируемой функции |
mov ebx,[edx+GLContext.current_op_buffer_index] |
mov eax,[edx+GLContext.current_op_buffer] |
|
; we should be able to add a NextBuffer opcode |
mov esi,ebx |
add esi,ecx |
lea esi,[ebx+ecx] |
cmp esi,(OP_BUFFER_MAX_SIZE-2) |
jle @f |
mov edi,eax |
135,9 → 145,7 |
mov dword[eax+offs_gpbu_next],0 ;=NULL |
|
mov dword[edi+offs_gpbu_next],eax |
mov esi,ebx |
shl esi,2 |
add esi,edi |
lea esi,[edi+4*ebx] |
mov dword[esi+offs_gpbu_ops],OP_NextBuffer |
mov dword[esi+offs_gpbu_ops+4],eax |
|
147,9 → 155,7 |
|
mov esi,[p] |
@@: |
mov edi,ebx |
shl edi,2 |
add edi,eax |
lea edi,[eax+4*ebx] |
movsd |
inc ebx |
loop @b |