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>>=> |