Subversion Repositories Kolibri OS

Rev

Rev 6101 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6101 Rev 6523
Line 61... Line 61...
61
locals
61
locals
62
	found dd ? ;GLSpecBuf *
62
	found dd ? ;GLSpecBuf *
63
	oldest dd ? ;GLSpecBuf *
63
	oldest dd ? ;GLSpecBuf *
64
endl
64
endl
65
	mov edx,[context]
65
	mov edx,[context]
66
	mov eax,[edx+offs_cont_specbuf_first]
66
	mov eax,[edx+GLContext.specbuf_first]
67
	mov [found],eax
67
	mov [found],eax
68
	mov [oldest],eax
68
	mov [oldest],eax
69
	mov ebx,[shininess_i]
69
	mov ebx,[shininess_i]
70
	.cycle_0:
70
	.cycle_0:
71
	or eax,eax ;while (found)
71
	or eax,eax ;while (found)
Line 82... Line 82...
82
		jmp .cycle_0
82
		jmp .cycle_0
83
	@@:
83
	@@:
84
	cmp dword[found],0 ;if (found) /* hey, found one! */
84
	cmp dword[found],0 ;if (found) /* hey, found one! */
85
	je @f
85
	je @f
86
		mov eax,[found]
86
		mov eax,[found]
87
		mov ecx,[edx+offs_cont_specbuf_used_counter]
87
		mov ecx,[edx+GLContext.specbuf_used_counter]
88
		mov [eax+offs_spec_last_used],ecx ;found.last_used = context.specbuf_used_counter
88
		mov [eax+offs_spec_last_used],ecx ;found.last_used = context.specbuf_used_counter
89
		inc dword[edx+offs_cont_specbuf_used_counter]
89
		inc dword[edx+GLContext.specbuf_used_counter]
90
		jmp .end_f ;return found
90
		jmp .end_f ;return found
91
	@@:
91
	@@:
92
	cmp dword[oldest],0 ;if (oldest == NULL || context.specbuf_num_buffers < MAX_SPECULAR_BUFFERS)
92
	cmp dword[oldest],0 ;if (oldest == NULL || context.specbuf_num_buffers < MAX_SPECULAR_BUFFERS)
93
	je @f
93
	je @f
94
	cmp dword[edx+offs_cont_specbuf_num_buffers],MAX_SPECULAR_BUFFERS
94
	cmp dword[edx+GLContext.specbuf_num_buffers],MAX_SPECULAR_BUFFERS
95
	jge .end_1
95
	jge .end_1
96
	@@:
96
	@@:
97
		; create new buffer
97
		; create new buffer
98
	stdcall gl_malloc, sizeof.GLSpecBuf
98
	stdcall gl_malloc, sizeof.GLSpecBuf
99
	or eax,eax
99
	or eax,eax
100
	jnz @f
100
	jnz @f
101
;gl_fatal_error("could not allocate specular buffer")
101
;gl_fatal_error("could not allocate specular buffer")
102
	@@:
102
	@@:
103
	inc dword[edx+offs_cont_specbuf_num_buffers]
103
	inc dword[edx+GLContext.specbuf_num_buffers]
104
	mov ecx,[edx+offs_cont_specbuf_first]
104
	mov ecx,[edx+GLContext.specbuf_first]
105
	mov [eax+offs_spec_next],ecx
105
	mov [eax+offs_spec_next],ecx
106
	mov [edx+offs_cont_specbuf_first],eax
106
	mov [edx+GLContext.specbuf_first],eax
107
	mov ecx,[edx+offs_cont_specbuf_used_counter]
107
	mov ecx,[edx+GLContext.specbuf_used_counter]
108
	mov [eax+offs_spec_last_used],ecx
108
	mov [eax+offs_spec_last_used],ecx
109
	inc dword[edx+offs_cont_specbuf_used_counter]
109
	inc dword[edx+GLContext.specbuf_used_counter]
110
	mov [eax+offs_spec_shininess_i],ebx
110
	mov [eax+offs_spec_shininess_i],ebx
111
	stdcall calc_buf, eax,dword[shininess]
111
	stdcall calc_buf, eax,dword[shininess]
112
	jmp .end_f
112
	jmp .end_f
113
	.end_1:
113
	.end_1:
114
	; overwrite the lru buffer
114
	; overwrite the lru buffer
115
	;tgl_trace("overwriting spec buffer :(\n");
115
	;tgl_trace("overwriting spec buffer :(\n");
116
	mov eax,[oldest]
116
	mov eax,[oldest]
117
	mov [eax+offs_spec_shininess_i],ebx
117
	mov [eax+offs_spec_shininess_i],ebx
118
	mov ecx,[edx+offs_cont_specbuf_used_counter]
118
	mov ecx,[edx+GLContext.specbuf_used_counter]
119
	mov [eax+offs_spec_last_used],ecx
119
	mov [eax+offs_spec_last_used],ecx
120
	inc dword[edx+offs_cont_specbuf_used_counter]
120
	inc dword[edx+GLContext.specbuf_used_counter]
121
	stdcall calc_buf, eax,dword[shininess]
121
	stdcall calc_buf, eax,dword[shininess]
122
	.end_f:
122
	.end_f:
123
	ret
123
	ret
124
endp
124
endp