align 4 proc glRenderMode uses ebx ecx, mode:dword call gl_get_context xor ebx,ebx cmp dword[eax+offs_cont_render_mode],GL_RENDER je .e_sw_1 cmp dword[eax+offs_cont_render_mode],GL_SELECT jne .def_1 cmp dword[eax+offs_cont_select_overflow],0 je @f sub ebx,[eax+offs_cont_select_hits] jmp .else_e @@: mov ebx,[eax+offs_cont_select_hits] .else_e: mov dword[eax+offs_cont_select_overflow],0 mov ecx,[eax+offs_cont_select_buffer] mov dword[eax+offs_cont_select_ptr],ecx mov dword[eax+offs_cont_name_stack_size],0 jmp .e_sw_1 .def_1: ; assert(0); .e_sw_1: cmp dword[mode],GL_RENDER jne @f mov dword[eax+offs_cont_render_mode],GL_RENDER jmp .e_sw_2 @@: cmp dword[mode],GL_SELECT jne .def_2 mov dword[eax+offs_cont_render_mode],GL_SELECT ; assert( c->select_buffer != NULL); mov ecx,[eax+offs_cont_select_buffer] mov dword[eax+offs_cont_select_ptr],ecx mov dword[eax+offs_cont_select_hits],0 mov dword[eax+offs_cont_select_overflow],0 mov dword[eax+offs_cont_select_hit],0 ;NULL jmp .e_sw_2 .def_2: ; assert(0); .e_sw_2: mov eax,ebx ret endp align 4 proc glSelectBuffer uses eax ebx, size:dword, buf:dword call gl_get_context ; assert(c->render_mode != GL_SELECT); mov ebx,[buf] mov dword[eax+offs_cont_select_buffer],ebx mov ebx,[size] mov dword[eax+offs_cont_select_size],ebx ret endp align 4 proc glopInitNames uses eax, context:dword, p:dword mov eax,[context] cmp dword[eax+offs_cont_render_mode],GL_SELECT jne @f mov dword[eax+offs_cont_name_stack_size],0 mov dword[eax+offs_cont_select_hit],0 ;=NULL @@: ret endp align 4 proc glopPushName uses eax ebx, context:dword, p:dword mov eax,[context] cmp dword[eax+offs_cont_render_mode],GL_SELECT jne @f ; assert(c->name_stack_sizename_stack_size>0); dec dword[eax+offs_cont_name_stack_size] mov dword[eax+offs_cont_select_hit],0 ;=NULL @@: ret endp align 4 proc glopLoadName uses eax ebx, context:dword, p:dword mov eax,[context] cmp dword[eax+offs_cont_render_mode],GL_SELECT jne @f ; assert(c->name_stack_size>0); mov dword[eax+offs_cont_select_hit],0 ;=NULL mov ebx,dword[eax+offs_cont_name_stack_size] dec ebx shl ebx,2 add ebx,eax mov eax,[p] mov eax,[eax+4] mov dword[ebx+offs_cont_name_stack],eax ;context.name_stack[context.name_stack_size-1]=p[1] @@: ret endp align 4 proc gl_add_select uses eax ebx ecx edx, context:dword, zmin:dword, zmax:dword ; unsigned int *ptr; ; int i; mov eax,[context] cmp dword[eax+offs_cont_select_overflow],0 jne .end_f ;if (!context.select_overflow) cmp dword[eax+offs_cont_select_hit],0 ;if (context.select_hit==NULL) jne .els_0 mov ecx,[eax+offs_cont_name_stack_size] mov ebx,[eax+offs_cont_select_ptr] sub ebx,[eax+offs_cont_select_buffer] sub ebx,3 sub ebx,ecx cmp ebx,[eax+offs_cont_select_size] jle .els_1 mov dword[eax+offs_cont_select_overflow],1 jmp .end_f .els_1: mov ebx,[eax+offs_cont_select_ptr] mov [eax+offs_cont_select_hit],ebx mov edx,[eax+offs_cont_name_stack_size] mov [ebx],edx add ebx,4 mov edx,[zmin] mov [ebx],edx add ebx,4 mov edx,[zmax] mov [ebx],edx add ebx,4 ; for(i=0;iname_stack[i]; mov [eax+offs_cont_select_ptr],ebx inc dword[eax+offs_cont_select_hits] jmp .end_f .els_0: mov ebx,[zmin] cmp dword[eax+offs_cont_select_hit+4],ebx jle @f mov dword[eax+offs_cont_select_hit+4],ebx @@: mov ebx,[zmax] cmp dword[eax+offs_cont_select_hit+8],ebx jge .end_f mov dword[eax+offs_cont_select_hit+8],ebx .end_f: ret endp