Subversion Repositories Kolibri OS

Rev

Rev 8408 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 8408 Rev 8442
1
; glVertex 
1
; glVertex 
2
 
2
 
3
align 4
3
align 4
4
glVertex4f: ;x, y, z, w
4
glVertex4f: ;x, y, z, w
5
	push dword[esp] ;копируем адрес возврата
5
	push dword[esp] ;копируем адрес возврата
6
	push eax
6
	push eax
7
	lea eax,[esp+8]
7
	lea eax,[esp+8]
8
	mov dword[eax],OP_Vertex
8
	mov dword[eax],OP_Vertex
9
	stdcall gl_add_op,eax
9
	stdcall gl_add_op,eax
10
	pop eax
10
	pop eax
11
	ret 20 ;=sizeof(dd)*5
11
	ret 20 ;=sizeof(dd)*5
12
 
12
 
13
align 4
13
align 4
14
proc glVertex4d, x:qword, y:qword, z:qword, w:qword
14
proc glVertex4d, x:qword, y:qword, z:qword, w:qword
15
	add esp,-16
15
	add esp,-16
16
	fld qword[w]
16
	fld qword[w]
17
	fstp dword[esp+12]
17
	fstp dword[esp+12]
18
	fld qword[z]
18
	fld qword[z]
19
	fstp dword[esp+8]
19
	fstp dword[esp+8]
20
	fld qword[y]
20
	fld qword[y]
21
	fstp dword[esp+4]
21
	fstp dword[esp+4]
22
	fld qword[x]
22
	fld qword[x]
23
	fstp dword[esp]
23
	fstp dword[esp]
24
	call glVertex4f
24
	call glVertex4f
25
	ret
25
	ret
26
endp
26
endp
27
 
27
 
28
align 4
28
align 4
29
proc glVertex2f, x:dword, y:dword
29
proc glVertex2f, x:dword, y:dword
30
	stdcall glVertex4f,[x],[y],0.0,1.0
30
	stdcall glVertex4f,[x],[y],0.0,1.0
31
	ret
31
	ret
32
endp
32
endp
33
 
33
 
34
align 4
34
align 4
35
proc glVertex2d, x:qword, y:qword
35
proc glVertex2d, x:qword, y:qword
36
	push 1.0
36
	push 1.0
37
	push 0.0
37
	push 0.0
38
	add esp,-8
38
	add esp,-8
39
	fld qword[y]
39
	fld qword[y]
40
	fstp dword[esp+4]
40
	fstp dword[esp+4]
41
	fld qword[x]
41
	fld qword[x]
42
	fstp dword[esp]
42
	fstp dword[esp]
43
	call glVertex4f
43
	call glVertex4f
44
	ret
44
	ret
45
endp
45
endp
46
 
46
 
47
align 4
47
align 4
48
proc glVertex2fv uses eax, v:dword
48
proc glVertex2fv uses eax, v:dword
49
	mov eax,[v]
49
	mov eax,[v]
50
	stdcall glVertex4f,[eax],[eax+4],0.0,1.0
50
	stdcall glVertex4f,[eax],[eax+4],0.0,1.0
51
	ret
51
	ret
52
endp
52
endp
53
 
53
 
54
align 4
54
align 4
55
proc glVertex2dv uses eax, v:dword
55
proc glVertex2dv uses eax, v:dword
56
	mov eax,[v]
56
	mov eax,[v]
57
	push 1.0
57
	push 1.0
58
	push 0.0
58
	push 0.0
59
	add esp,-8
59
	add esp,-8
60
	fld qword[eax+8]
60
	fld qword[eax+8]
61
	fstp dword[esp+4]
61
	fstp dword[esp+4]
62
	fld qword[eax]
62
	fld qword[eax]
63
	fstp dword[esp]
63
	fstp dword[esp]
64
	call glVertex4f
64
	call glVertex4f
65
	ret
65
	ret
66
endp
66
endp
67
 
67
 
68
align 4
68
align 4
69
proc glVertex3f, x:dword, y:dword, z:dword
69
proc glVertex3f, x:dword, y:dword, z:dword
70
	stdcall glVertex4f,[x],[y],[z],1.0
70
	stdcall glVertex4f,[x],[y],[z],1.0
71
	ret
71
	ret
72
endp
72
endp
73
 
73
 
74
align 4
74
align 4
75
proc glVertex3d, x:qword, y:qword, z:qword
75
proc glVertex3d, x:qword, y:qword, z:qword
76
	push 1.0
76
	push 1.0
77
	add esp,-12
77
	add esp,-12
78
	fld qword[z]
78
	fld qword[z]
79
	fstp dword[esp+8]
79
	fstp dword[esp+8]
80
	fld qword[y]
80
	fld qword[y]
81
	fstp dword[esp+4]
81
	fstp dword[esp+4]
82
	fld qword[x]
82
	fld qword[x]
83
	fstp dword[esp]
83
	fstp dword[esp]
84
	call glVertex4f
84
	call glVertex4f
85
	ret
85
	ret
86
endp
86
endp
87
 
87
 
88
align 4
88
align 4
89
proc glVertex3fv uses eax, v:dword
89
proc glVertex3fv uses eax, v:dword
90
	mov eax,[v]
90
	mov eax,[v]
91
	stdcall glVertex4f,[eax],[eax+4],[eax+8],1.0
91
	stdcall glVertex4f,[eax],[eax+4],[eax+8],1.0
92
	ret
92
	ret
93
endp
93
endp
94
 
94
 
95
align 4
95
align 4
96
proc glVertex3dv uses eax, v:dword
96
proc glVertex3dv uses eax, v:dword
97
	mov eax,[v]
97
	mov eax,[v]
98
	push 1.0
98
	push 1.0
99
	add esp,-12
99
	add esp,-12
100
	fld qword[eax+16]
100
	fld qword[eax+16]
101
	fstp dword[esp+8]
101
	fstp dword[esp+8]
102
	fld qword[eax+8]
102
	fld qword[eax+8]
103
	fstp dword[esp+4]
103
	fstp dword[esp+4]
104
	fld qword[eax]
104
	fld qword[eax]
105
	fstp dword[esp]
105
	fstp dword[esp]
106
	call glVertex4f
106
	call glVertex4f
107
	ret
107
	ret
108
endp
108
endp
109
 
109
 
110
align 4
110
align 4
111
proc glVertex4fv uses eax, v:dword
111
proc glVertex4fv uses eax, v:dword
112
	mov eax,[v]
112
	mov eax,[v]
113
	stdcall glVertex4f,[eax],[eax+4],[eax+8],[eax+12]
113
	stdcall glVertex4f,[eax],[eax+4],[eax+8],[eax+12]
114
	ret
114
	ret
115
endp
115
endp
116
 
116
 
117
align 4
117
align 4
118
proc glVertex4dv uses eax, v:dword
118
proc glVertex4dv uses eax, v:dword
119
	mov eax,[v]
119
	mov eax,[v]
120
	add esp,-16
120
	add esp,-16
121
	fld qword[eax+24]
121
	fld qword[eax+24]
122
	fstp dword[esp+12]
122
	fstp dword[esp+12]
123
	fld qword[eax+16]
123
	fld qword[eax+16]
124
	fstp dword[esp+8]
124
	fstp dword[esp+8]
125
	fld qword[eax+8]
125
	fld qword[eax+8]
126
	fstp dword[esp+4]
126
	fstp dword[esp+4]
127
	fld qword[eax]
127
	fld qword[eax]
128
	fstp dword[esp]
128
	fstp dword[esp]
129
	call glVertex4f
129
	call glVertex4f
130
	ret
130
	ret
131
endp
131
endp
132
 
132
 
133
; glNormal
133
; glNormal
134
 
134
 
135
align 4
135
align 4
136
glNormal3f: ;x, y, z
136
glNormal3f: ;x, y, z
137
	push dword[esp] ;копируем адрес возврата
137
	push dword[esp] ;копируем адрес возврата
138
	push eax
138
	push eax
139
	lea eax,[esp+8]
139
	lea eax,[esp+8]
140
	mov dword[eax],OP_Normal
140
	mov dword[eax],OP_Normal
141
	stdcall gl_add_op,eax
141
	stdcall gl_add_op,eax
142
	pop eax
142
	pop eax
143
	ret 16 ;=sizeof(dd)*4
143
	ret 16 ;=sizeof(dd)*4
144
 
144
 
145
align 4
145
align 4
-
 
146
proc glNormal3d, x:qword, y:qword, z:qword
-
 
147
	add esp,-12
-
 
148
	fld qword[z]
-
 
149
	fstp dword[esp+8]
-
 
150
	fld qword[y]
-
 
151
	fstp dword[esp+4]
-
 
152
	fld qword[x]
-
 
153
	fstp dword[esp]
-
 
154
	call glNormal3f
-
 
155
	ret
-
 
156
endp
-
 
157
 
-
 
158
align 4
146
proc glNormal3fv uses eax, v:dword
159
proc glNormal3fv uses eax, v:dword
147
	mov eax,[v]
160
	mov eax,[v]
148
	stdcall glNormal3f,[eax],[eax+4],[eax+8]
161
	stdcall glNormal3f,[eax],[eax+4],[eax+8]
149
	ret
162
	ret
150
endp
163
endp
-
 
164
 
-
 
165
align 4
-
 
166
proc glNormal3dv uses eax, v:dword
-
 
167
	mov eax,[v]
-
 
168
	add esp,-12
-
 
169
	fld qword[eax+16]
-
 
170
	fstp dword[esp+8]
-
 
171
	fld qword[eax+8]
-
 
172
	fstp dword[esp+4]
-
 
173
	fld qword[eax]
-
 
174
	fstp dword[esp]
-
 
175
	call glNormal3f
-
 
176
	ret
-
 
177
endp
151
 
178
 
152
; glColor
179
; glColor
153
 
180
 
154
align 4
181
align 4
155
proc glColor4f uses eax, r:dword, g:dword, b:dword, a:dword
182
proc glColor4f uses eax, r:dword, g:dword, b:dword, a:dword
156
locals
183
locals
157
	p rd 8
184
	p rd 8
158
endl
185
endl
159
	mov dword[p],OP_Color
186
	mov dword[p],OP_Color
160
	mov eax,[b]
187
	mov eax,[b]
161
	mov dword[p+4],eax
188
	mov dword[p+4],eax
162
	mov eax,[g]
189
	mov eax,[g]
163
	mov dword[p+8],eax
190
	mov dword[p+8],eax
164
	mov eax,[r]
191
	mov eax,[r]
165
	mov dword[p+12],eax
192
	mov dword[p+12],eax
166
	mov eax,[a]
193
	mov eax,[a]
167
	mov dword[p+16],eax
194
	mov dword[p+16],eax
168
	; direct convertion to integer to go faster if no shading
195
	; direct convertion to integer to go faster if no shading
169
	lea eax,[ebp-12] ;ebp-12 = &p[5]
196
	lea eax,[ebp-12] ;ebp-12 = &p[5]
170
	push eax
197
	push eax
171
	add eax,4 ;ebp-8 = &p[6]
198
	add eax,4 ;ebp-8 = &p[6]
172
	push eax
199
	push eax
173
	add eax,4 ;ebp-4 = &p[7]
200
	add eax,4 ;ebp-4 = &p[7]
174
	push eax
201
	push eax
175
	stdcall RGBFtoRGBI,[r],[g],[b] ;call: r,g,b,&p[7],&p[6],&p[5]
202
	stdcall RGBFtoRGBI,[r],[g],[b] ;call: r,g,b,&p[7],&p[6],&p[5]
176
 
203
 
177
	lea eax,[ebp-32] ;=sizeof(dd)*8
204
	lea eax,[ebp-32] ;=sizeof(dd)*8
178
	stdcall gl_add_op,eax
205
	stdcall gl_add_op,eax
179
	ret
206
	ret
180
endp
207
endp
181
 
208
 
182
align 4
209
align 4
-
 
210
proc glColor4d, r:qword, g:qword, b:qword, a:qword
-
 
211
	add esp,-16
-
 
212
	fld qword[a]
-
 
213
	fstp dword[esp+12]
-
 
214
	fld qword[b]
-
 
215
	fstp dword[esp+8]
-
 
216
	fld qword[g]
-
 
217
	fstp dword[esp+4]
-
 
218
	fld qword[r]
-
 
219
	fstp dword[esp]
-
 
220
	call glColor4f
-
 
221
	ret
-
 
222
endp
-
 
223
 
-
 
224
align 4
183
proc glColor4fv uses eax ebx, v:dword
225
proc glColor4fv uses eax ebx, v:dword
184
	mov eax,[v]
226
	mov eax,[v]
185
	stdcall glColor4f,[eax],[eax+4],[eax+8],[eax+12],1.0
227
	stdcall glColor4f,[eax],[eax+4],[eax+8],[eax+12],1.0
186
	ret
228
	ret
187
endp
229
endp
188
 
230
 
189
align 4
231
align 4
190
proc glColor3f, r:dword, g:dword, b:dword
232
proc glColor3f, r:dword, g:dword, b:dword
191
	stdcall glColor4f,[r],[g],[b],1.0
233
	stdcall glColor4f,[r],[g],[b],1.0
192
	ret
234
	ret
193
endp
235
endp
194
 
236
 
195
align 4
237
align 4
-
 
238
proc glColor3d, r:qword, g:qword, b:qword
-
 
239
	push 1.0
-
 
240
	add esp,-12
-
 
241
	fld qword[b]
-
 
242
	fstp dword[esp+8]
-
 
243
	fld qword[g]
-
 
244
	fstp dword[esp+4]
-
 
245
	fld qword[r]
-
 
246
	fstp dword[esp]
-
 
247
	call glColor4f
-
 
248
	ret
-
 
249
endp
-
 
250
 
-
 
251
align 4
196
proc glColor3fv uses eax, v:dword
252
proc glColor3fv uses eax, v:dword
197
	mov eax,[v]
253
	mov eax,[v]
198
	stdcall glColor4f,[eax],[eax+4],[eax+8],1.0
254
	stdcall glColor4f,[eax],[eax+4],[eax+8],1.0
199
	ret
255
	ret
200
endp
256
endp
201
 
257
 
202
align 4
258
align 4
-
 
259
proc glColor3dv uses eax, v:dword
-
 
260
	mov eax,[v]
-
 
261
	push 1.0
-
 
262
	add esp,-12
-
 
263
	fld qword[eax+16]
-
 
264
	fstp dword[esp+8]
-
 
265
	fld qword[eax+8]
-
 
266
	fstp dword[esp+4]
-
 
267
	fld qword[eax]
-
 
268
	fstp dword[esp]
-
 
269
	call glColor4f
-
 
270
	ret
-
 
271
endp
-
 
272
 
-
 
273
align 4
203
fl_255 dd 255.0
274
fl_255 dd 255.0
204
 
275
 
205
align 4
276
align 4
206
proc glColor3ub uses eax, r:dword, g:dword, b:dword
277
proc glColor3ub uses eax, r:dword, g:dword, b:dword
207
	push dword 1.0
278
	push dword 1.0
208
	fld dword[fl_255]
279
	fld dword[fl_255]
209
 
280
 
210
	movzx eax,byte[b]
281
	movzx eax,byte[b]
211
	mov dword[esp-4],eax
282
	mov dword[esp-4],eax
212
	fild dword[esp-4]
283
	fild dword[esp-4]
213
	fdiv st0,st1
284
	fdiv st0,st1
214
	fstp dword[esp-4] ;преобразовали int во float
285
	fstp dword[esp-4] ;преобразовали int во float
215
	movzx eax,byte[g]
286
	movzx eax,byte[g]
216
	mov dword[esp-8],eax
287
	mov dword[esp-8],eax
217
	fild dword[esp-8]
288
	fild dword[esp-8]
218
	fdiv st0,st1
289
	fdiv st0,st1
219
	fstp dword[esp-8]
290
	fstp dword[esp-8]
220
	movzx eax,byte[r]
291
	movzx eax,byte[r]
221
	mov dword[esp-12],eax
292
	mov dword[esp-12],eax
222
	fild dword[esp-12]
293
	fild dword[esp-12]
223
	fdiv st0,st1
294
	fdiv st0,st1
224
	fstp dword[esp-12]
295
	fstp dword[esp-12]
225
 
296
 
226
	ffree st0
297
	ffree st0
227
	fincstp
298
	fincstp
228
	sub esp,12
299
	sub esp,12
229
	call glColor4f
300
	call glColor4f
230
	ret
301
	ret
231
endp
302
endp
-
 
303
 
-
 
304
align 4
-
 
305
proc glColor4dv uses eax, v:dword
-
 
306
	mov eax,[v]
-
 
307
	add esp,-16
-
 
308
	fld qword[eax+24]
-
 
309
	fstp dword[esp+12]
-
 
310
	fld qword[eax+16]
-
 
311
	fstp dword[esp+8]
-
 
312
	fld qword[eax+8]
-
 
313
	fstp dword[esp+4]
-
 
314
	fld qword[eax]
-
 
315
	fstp dword[esp]
-
 
316
	call glColor4f
-
 
317
	ret
-
 
318
endp
232
 
319
 
233
; TexCoord
320
; TexCoord
234
 
321
 
235
align 4
322
align 4
236
glTexCoord4f: ;s, t, r, q
323
glTexCoord4f: ;s, t, r, q
237
	push dword[esp] ;копируем адрес возврата
324
	push dword[esp] ;копируем адрес возврата
238
	push eax
325
	push eax
239
	lea eax,[esp+8]
326
	lea eax,[esp+8]
240
	mov dword[eax],OP_TexCoord
327
	mov dword[eax],OP_TexCoord
241
	stdcall gl_add_op,eax
328
	stdcall gl_add_op,eax
242
	pop eax
329
	pop eax
243
	ret 20 ;=sizeof(dd)*5
330
	ret 20 ;=sizeof(dd)*5
244
 
331
 
245
align 4
332
align 4
-
 
333
proc glTexCoord4d, s:qword, t:qword, r:qword, q:qword
-
 
334
	add esp,-16
-
 
335
	fld qword[q]
-
 
336
	fstp dword[esp+12]
-
 
337
	fld qword[r]
-
 
338
	fstp dword[esp+8]
-
 
339
	fld qword[t]
-
 
340
	fstp dword[esp+4]
-
 
341
	fld qword[s]
-
 
342
	fstp dword[esp]
-
 
343
	call glTexCoord4f
-
 
344
	ret
-
 
345
endp
-
 
346
 
-
 
347
align 4
-
 
348
proc glTexCoord1f, s:dword
-
 
349
	stdcall glTexCoord4f,[s],0.0,0.0,1.0
-
 
350
	ret
-
 
351
endp
-
 
352
 
-
 
353
align 4
-
 
354
proc glTexCoord1d, s:qword
-
 
355
	push 1.0
-
 
356
	push 0.0
-
 
357
	push 0.0
-
 
358
	add esp,-4
-
 
359
	fld qword[s]
-
 
360
	fstp dword[esp]
-
 
361
	call glTexCoord4f
-
 
362
	ret
-
 
363
endp
-
 
364
 
-
 
365
align 4
-
 
366
proc glTexCoord1fv uses eax, v:dword
-
 
367
	mov eax,[v]
-
 
368
	stdcall glTexCoord4f,[eax],0.0,0.0,1.0
-
 
369
	ret
-
 
370
endp
-
 
371
 
-
 
372
align 4
-
 
373
proc glTexCoord1dv uses eax, v:dword
-
 
374
	mov eax,[v]
-
 
375
	push 1.0
-
 
376
	push 0.0
-
 
377
	push 0.0
-
 
378
	add esp,-4
-
 
379
	fld qword[eax]
-
 
380
	fstp dword[esp]
-
 
381
	call glTexCoord4f
-
 
382
	ret
-
 
383
endp
-
 
384
 
-
 
385
align 4
246
proc glTexCoord2f, s:dword, t:dword
386
proc glTexCoord2f, s:dword, t:dword
247
	stdcall glTexCoord4f,[s],[t],0.0,1.0
387
	stdcall glTexCoord4f,[s],[t],0.0,1.0
248
	ret
388
	ret
249
endp
389
endp
250
 
390
 
251
align 4
391
align 4
-
 
392
proc glTexCoord2d, s:qword, t:qword
-
 
393
	push 1.0
-
 
394
	push 0.0
-
 
395
	add esp,-8
-
 
396
	fld qword[t]
-
 
397
	fstp dword[esp+4]
-
 
398
	fld qword[s]
-
 
399
	fstp dword[esp]
-
 
400
	call glTexCoord4f
-
 
401
	ret
-
 
402
endp
-
 
403
 
-
 
404
align 4
252
proc glTexCoord2fv uses eax, v:dword
405
proc glTexCoord2fv uses eax, v:dword
253
	mov eax,[v]
406
	mov eax,[v]
254
	stdcall glTexCoord4f,[eax],[eax+4],0.0,1.0
407
	stdcall glTexCoord4f,[eax],[eax+4],0.0,1.0
255
	ret
408
	ret
256
endp
409
endp
257
 
410
 
258
align 4
411
align 4
-
 
412
proc glTexCoord2dv uses eax, v:dword
-
 
413
	mov eax,[v]
-
 
414
	push 1.0
-
 
415
	push 0.0
-
 
416
	add esp,-8
-
 
417
	fld qword[eax+8]
-
 
418
	fstp dword[esp+4]
-
 
419
	fld qword[eax]
-
 
420
	fstp dword[esp]
-
 
421
	call glTexCoord4f
-
 
422
	ret
-
 
423
endp
-
 
424
 
-
 
425
align 4
-
 
426
proc glTexCoord3f, s:dword, t:dword, r:dword
-
 
427
	stdcall glTexCoord4f,[s],[t],[r],1.0
-
 
428
	ret
-
 
429
endp
-
 
430
 
-
 
431
align 4
-
 
432
proc glTexCoord3d, s:qword, t:qword, r:qword
-
 
433
	push 1.0
-
 
434
	add esp,-12
-
 
435
	fld qword[r]
-
 
436
	fstp dword[esp+8]
-
 
437
	fld qword[t]
-
 
438
	fstp dword[esp+4]
-
 
439
	fld qword[s]
-
 
440
	fstp dword[esp]
-
 
441
	call glTexCoord4f
-
 
442
	ret
-
 
443
endp
-
 
444
 
-
 
445
align 4
-
 
446
proc glTexCoord3fv uses eax, v:dword
-
 
447
	mov eax,[v]
-
 
448
	stdcall glTexCoord4f,[eax],[eax+4],[eax+8],1.0
-
 
449
	ret
-
 
450
endp
-
 
451
 
-
 
452
align 4
-
 
453
proc glTexCoord3dv uses eax, v:dword
-
 
454
	mov eax,[v]
-
 
455
	push 1.0
-
 
456
	add esp,-12
-
 
457
	fld qword[eax+16]
-
 
458
	fstp dword[esp+8]
-
 
459
	fld qword[eax+8]
-
 
460
	fstp dword[esp+4]
-
 
461
	fld qword[eax]
-
 
462
	fstp dword[esp]
-
 
463
	call glTexCoord4f
-
 
464
	ret
-
 
465
endp
-
 
466
 
-
 
467
align 4
-
 
468
proc glTexCoord4fv uses eax, v:dword
-
 
469
	mov eax,[v]
-
 
470
	stdcall glTexCoord4f,[eax],[eax+4],[eax+8],[eax+12]
-
 
471
	ret
-
 
472
endp
-
 
473
 
-
 
474
align 4
-
 
475
proc glTexCoord4dv uses eax, v:dword
-
 
476
	mov eax,[v]
-
 
477
	add esp,-16
-
 
478
	fld qword[eax+24]
-
 
479
	fstp dword[esp+12]
-
 
480
	fld qword[eax+16]
-
 
481
	fstp dword[esp+8]
-
 
482
	fld qword[eax+8]
-
 
483
	fstp dword[esp+4]
-
 
484
	fld qword[eax]
-
 
485
	fstp dword[esp]
-
 
486
	call glTexCoord4f
-
 
487
	ret
-
 
488
endp
-
 
489
 
-
 
490
align 4
259
glEdgeFlag: ;flag
491
glEdgeFlag: ;flag
260
	push dword[esp] ;копируем адрес возврата
492
	push dword[esp] ;копируем адрес возврата
261
	push eax
493
	push eax
262
	lea eax,[esp+8]
494
	lea eax,[esp+8]
263
	mov dword[eax],OP_EdgeFlag
495
	mov dword[eax],OP_EdgeFlag
264
	stdcall gl_add_op,eax
496
	stdcall gl_add_op,eax
265
	pop eax
497
	pop eax
266
	ret 8 ;=sizeof(dd)*2
498
	ret 8 ;=sizeof(dd)*2
267
 
499
 
268
; misc
500
; misc
269
 
501
 
270
align 4
502
align 4
271
glShadeModel: ;mode
503
glShadeModel: ;mode
272
;  assert(mode == GL_FLAT || mode == GL_SMOOTH);
504
;  assert(mode == GL_FLAT || mode == GL_SMOOTH);
273
	push dword[esp] ;копируем адрес возврата
505
	push dword[esp] ;копируем адрес возврата
274
	push eax
506
	push eax
275
	lea eax,[esp+8]
507
	lea eax,[esp+8]
276
	mov dword[eax],OP_ShadeModel
508
	mov dword[eax],OP_ShadeModel
277
	stdcall gl_add_op,eax
509
	stdcall gl_add_op,eax
278
	pop eax
510
	pop eax
279
	ret 8 ;=sizeof(dd)*2
511
	ret 8 ;=sizeof(dd)*2
280
 
512
 
281
align 4
513
align 4
282
glCullFace: ;mode
514
glCullFace: ;mode
283
;  assert(mode == GL_BACK || 
515
;  assert(mode == GL_BACK || 
284
;         mode == GL_FRONT || 
516
;         mode == GL_FRONT || 
285
;         mode == GL_FRONT_AND_BACK);
517
;         mode == GL_FRONT_AND_BACK);
286
	push dword[esp] ;копируем адрес возврата
518
	push dword[esp] ;копируем адрес возврата
287
	push eax
519
	push eax
288
	lea eax,[esp+8]
520
	lea eax,[esp+8]
289
	mov dword[eax],OP_CullFace
521
	mov dword[eax],OP_CullFace
290
	stdcall gl_add_op,eax
522
	stdcall gl_add_op,eax
291
	pop eax
523
	pop eax
292
	ret 8 ;=sizeof(dd)*2
524
	ret 8 ;=sizeof(dd)*2
293
 
525
 
294
align 4
526
align 4
295
proc glFrontFace uses eax, mode:dword
527
proc glFrontFace uses eax, mode:dword
296
locals
528
locals
297
	p rd 2
529
	p rd 2
298
endl
530
endl
299
 
531
 
300
;  assert(mode == GL_CCW || mode == GL_CW);
532
;  assert(mode == GL_CCW || mode == GL_CW);
301
 
533
 
302
	mov dword[p],OP_FrontFace
534
	mov dword[p],OP_FrontFace
303
	xor eax,eax
535
	xor eax,eax
304
	cmp dword[mode],GL_CCW
536
	cmp dword[mode],GL_CCW
305
	je @f
537
	je @f
306
		inc eax
538
		inc eax
307
	@@:
539
	@@:
308
	mov dword[p+4],eax
540
	mov dword[p+4],eax
309
 
541
 
310
	lea eax,[ebp-8] ;=sizeof(dd)*2
542
	lea eax,[ebp-8] ;=sizeof(dd)*2
311
	stdcall gl_add_op,eax
543
	stdcall gl_add_op,eax
312
	ret
544
	ret
313
endp
545
endp
314
 
546
 
315
align 4
547
align 4
316
glPolygonMode: ;face, mode
548
glPolygonMode: ;face, mode
317
;  assert(face == GL_BACK || 
549
;  assert(face == GL_BACK || 
318
;         face == GL_FRONT || 
550
;         face == GL_FRONT || 
319
;         face == GL_FRONT_AND_BACK);
551
;         face == GL_FRONT_AND_BACK);
320
;  assert(mode == GL_POINT || mode == GL_LINE || mode==GL_FILL);
552
;  assert(mode == GL_POINT || mode == GL_LINE || mode==GL_FILL);
321
	push dword[esp] ;копируем адрес возврата
553
	push dword[esp] ;копируем адрес возврата
322
	push eax
554
	push eax
323
	lea eax,[esp+8]
555
	lea eax,[esp+8]
324
	mov dword[eax],OP_PolygonMode
556
	mov dword[eax],OP_PolygonMode
325
	stdcall gl_add_op,eax
557
	stdcall gl_add_op,eax
326
	pop eax
558
	pop eax
327
	ret 12 ;=sizeof(dd)*3
559
	ret 12 ;=sizeof(dd)*3
328
 
560
 
329
; glEnable / glDisable
561
; glEnable / glDisable
330
 
562
 
331
align 4
563
align 4
332
proc glEnable uses eax, cap:dword
564
proc glEnable uses eax, cap:dword
333
locals
565
locals
334
	p rd 3
566
	p rd 3
335
endl
567
endl
336
	mov dword[p],OP_EnableDisable
568
	mov dword[p],OP_EnableDisable
337
	mov eax,[cap]
569
	mov eax,[cap]
338
	mov dword[p+4],eax
570
	mov dword[p+4],eax
339
	mov dword[p+8],1
571
	mov dword[p+8],1
340
 
572
 
341
	lea eax,[ebp-12] ;=sizeof(dd)*3
573
	lea eax,[ebp-12] ;=sizeof(dd)*3
342
	stdcall gl_add_op,eax
574
	stdcall gl_add_op,eax
343
	ret
575
	ret
344
endp
576
endp
345
 
577
 
346
align 4
578
align 4
347
proc glDisable uses eax, cap:dword
579
proc glDisable uses eax, cap:dword
348
locals
580
locals
349
	p rd 3
581
	p rd 3
350
endl
582
endl
351
	mov dword[p],OP_EnableDisable
583
	mov dword[p],OP_EnableDisable
352
	mov eax,[cap]
584
	mov eax,[cap]
353
	mov dword[p+4],eax
585
	mov dword[p+4],eax
354
	mov dword[p+8],0
586
	mov dword[p+8],0
355
 
587
 
356
	lea eax,[ebp-12] ;=sizeof(dd)*3
588
	lea eax,[ebp-12] ;=sizeof(dd)*3
357
	stdcall gl_add_op,eax
589
	stdcall gl_add_op,eax
358
	ret
590
	ret
359
endp
591
endp
360
 
592
 
361
; glBegin / glEnd
593
; glBegin / glEnd
362
 
594
 
363
align 4
595
align 4
364
glBegin: ;mode
596
glBegin: ;mode
365
	push dword[esp] ;копируем адрес возврата
597
	push dword[esp] ;копируем адрес возврата
366
	push eax
598
	push eax
367
	lea eax,[esp+8]
599
	lea eax,[esp+8]
368
	mov dword[eax],OP_Begin
600
	mov dword[eax],OP_Begin
369
	stdcall gl_add_op,eax
601
	stdcall gl_add_op,eax
370
	pop eax
602
	pop eax
371
	ret 8 ;=sizeof(dd)*2
603
	ret 8 ;=sizeof(dd)*2
372
 
604
 
373
align 4
605
align 4
374
glEnd:
606
glEnd:
375
	stdcall gl_add_op,op_End
607
	stdcall gl_add_op,op_End
376
	ret
608
	ret
377
 
609
 
378
; matrix
610
; matrix
379
 
611
 
380
align 4
612
align 4
381
glMatrixMode: ;mode
613
glMatrixMode: ;mode
382
	push dword[esp] ;копируем адрес возврата
614
	push dword[esp] ;копируем адрес возврата
383
	push eax
615
	push eax
384
	lea eax,[esp+8]
616
	lea eax,[esp+8]
385
	mov dword[eax],OP_MatrixMode
617
	mov dword[eax],OP_MatrixMode
386
	stdcall gl_add_op,eax
618
	stdcall gl_add_op,eax
387
	pop eax
619
	pop eax
388
	ret 8 ;=sizeof(dd)*2
620
	ret 8 ;=sizeof(dd)*2
389
 
621
 
390
align 4
622
align 4
391
proc glLoadMatrixf uses ecx edi esi, m:dword
623
proc glLoadMatrixf uses ecx edi esi, m:dword
392
locals
624
locals
393
	p rd 17
625
	p rd 17
394
endl
626
endl
395
	mov dword[p],OP_LoadMatrix
627
	mov dword[p],OP_LoadMatrix
396
	mov ecx,16
628
	mov ecx,16
397
	mov esi,[m]
629
	mov esi,[m]
398
	mov edi,ebp
630
	mov edi,ebp
399
	sub edi,64 ;=sizeof(M4)
631
	sub edi,64 ;=sizeof(M4)
400
	rep movsd
632
	rep movsd
401
 
633
 
402
	lea ecx,[ebp-68] ;=sizeof(dd)*17
634
	lea ecx,[ebp-68] ;=sizeof(dd)*17
403
	stdcall gl_add_op,ecx
635
	stdcall gl_add_op,ecx
404
	ret
636
	ret
405
endp
637
endp
406
 
638
 
407
align 4
639
align 4
408
glLoadIdentity:
640
glLoadIdentity:
409
	stdcall gl_add_op,op_LoadIdentity
641
	stdcall gl_add_op,op_LoadIdentity
410
	ret
642
	ret
411
 
643
 
412
align 4
644
align 4
413
proc glMultMatrixf uses ecx edi esi, m:dword
645
proc glMultMatrixf uses ecx edi esi, m:dword
414
locals
646
locals
415
	p rd 17
647
	p rd 17
416
endl
648
endl
417
	mov dword[p],OP_MultMatrix
649
	mov dword[p],OP_MultMatrix
418
	mov ecx,16
650
	mov ecx,16
419
	mov esi,[m]
651
	mov esi,[m]
420
	mov edi,ebp
652
	mov edi,ebp
421
	sub edi,64 ;=sizeof(M4)
653
	sub edi,64 ;=sizeof(M4)
422
	rep movsd
654
	rep movsd
423
 
655
 
424
	lea ecx,[ebp-68] ;=sizeof(dd)*17
656
	lea ecx,[ebp-68] ;=sizeof(dd)*17
425
	stdcall gl_add_op,ecx
657
	stdcall gl_add_op,ecx
426
	ret
658
	ret
427
endp
659
endp
428
 
660
 
429
align 4
661
align 4
430
glPushMatrix:
662
glPushMatrix:
431
	stdcall gl_add_op,op_PushMatrix
663
	stdcall gl_add_op,op_PushMatrix
432
	ret
664
	ret
433
 
665
 
434
align 4
666
align 4
435
glPopMatrix:
667
glPopMatrix:
436
	stdcall gl_add_op,op_PopMatrix
668
	stdcall gl_add_op,op_PopMatrix
437
	ret
669
	ret
438
 
670
 
439
align 4
671
align 4
440
glRotatef: ;angle, x, y, z
672
glRotatef: ;angle, x, y, z
441
	push dword[esp] ;копируем адрес возврата
673
	push dword[esp] ;копируем адрес возврата
442
	push eax
674
	push eax
443
	lea eax,[esp+8]
675
	lea eax,[esp+8]
444
	mov dword[eax],OP_Rotate
676
	mov dword[eax],OP_Rotate
445
	stdcall gl_add_op,eax
677
	stdcall gl_add_op,eax
446
	pop eax
678
	pop eax
447
	ret 20 ;=sizeof(dd)*5
679
	ret 20 ;=sizeof(dd)*5
448
 
680
 
449
align 4
681
align 4
450
glTranslatef: ;x, y, z
682
glTranslatef: ;x, y, z
451
	push dword[esp] ;копируем адрес возврата
683
	push dword[esp] ;копируем адрес возврата
452
	push eax
684
	push eax
453
	lea eax,[esp+8]
685
	lea eax,[esp+8]
454
	mov dword[eax],OP_Translate
686
	mov dword[eax],OP_Translate
455
	stdcall gl_add_op,eax
687
	stdcall gl_add_op,eax
456
	pop eax
688
	pop eax
457
	ret 16 ;=sizeof(dd)*4
689
	ret 16 ;=sizeof(dd)*4
458
 
690
 
459
align 4
691
align 4
460
glScalef: ;x, y, z
692
glScalef: ;x, y, z
461
	push dword[esp] ;копируем адрес возврата
693
	push dword[esp] ;копируем адрес возврата
462
	push eax
694
	push eax
463
	lea eax,[esp+8]
695
	lea eax,[esp+8]
464
	mov dword[eax],OP_Scale
696
	mov dword[eax],OP_Scale
465
	stdcall gl_add_op,eax
697
	stdcall gl_add_op,eax
466
	pop eax
698
	pop eax
467
	ret 16 ;=sizeof(dd)*4
699
	ret 16 ;=sizeof(dd)*4
468
 
700
 
469
align 4
701
align 4
470
glViewport: ;x, y, width, heigh
702
glViewport: ;x, y, width, heigh
471
	push dword[esp] ;копируем адрес возврата
703
	push dword[esp] ;копируем адрес возврата
472
	push eax
704
	push eax
473
	lea eax,[esp+8]
705
	lea eax,[esp+8]
474
	mov dword[eax],OP_Viewport
706
	mov dword[eax],OP_Viewport
475
	stdcall gl_add_op,eax
707
	stdcall gl_add_op,eax
476
	pop eax
708
	pop eax
477
	ret 20 ;=sizeof(dd)*5
709
	ret 20 ;=sizeof(dd)*5
478
 
710
 
479
align 4
711
align 4
480
proc glFrustum uses eax, left:qword, right:qword, bottom:qword, top:qword,\
712
proc glFrustum uses eax, left:qword, right:qword, bottom:qword, top:qword,\
481
	near:qword, farv:qword
713
	near:qword, farv:qword
482
locals
714
locals
483
	p rd 7
715
	p rd 7
484
endl
716
endl
485
	mov dword[p],OP_Frustum
717
	mov dword[p],OP_Frustum
486
	fld qword[left]
718
	fld qword[left]
487
	fstp dword[p+4]
719
	fstp dword[p+4]
488
	fld qword[right]
720
	fld qword[right]
489
	fstp dword[p+8]
721
	fstp dword[p+8]
490
	fld qword[bottom]
722
	fld qword[bottom]
491
	fstp dword[p+12]
723
	fstp dword[p+12]
492
	fld qword[top]
724
	fld qword[top]
493
	fstp dword[p+16]
725
	fstp dword[p+16]
494
	fld qword[near]
726
	fld qword[near]
495
	fstp dword[p+20]
727
	fstp dword[p+20]
496
	fld qword[farv]
728
	fld qword[farv]
497
	fstp dword[p+24]
729
	fstp dword[p+24]
498
 
730
 
499
	lea eax,[ebp-28] ;=sizeof(dd)*7
731
	lea eax,[ebp-28] ;=sizeof(dd)*7
500
	stdcall gl_add_op,eax
732
	stdcall gl_add_op,eax
501
	ret
733
	ret
502
endp
734
endp
503
 
735
 
504
align 4
736
align 4
505
proc glOrtho uses eax, left:qword, right:qword, bottom:qword, top:qword,\
737
proc glOrtho uses eax, left:qword, right:qword, bottom:qword, top:qword,\
506
	near:qword, farv:qword
738
	near:qword, farv:qword
507
locals
739
locals
508
	p rd 7
740
	p rd 7
509
endl
741
endl
510
	mov dword[p],OP_Ortho
742
	mov dword[p],OP_Ortho
511
	fld qword[left]
743
	fld qword[left]
512
	fstp dword[p+4]
744
	fstp dword[p+4]
513
	fld qword[right]
745
	fld qword[right]
514
	fstp dword[p+8]
746
	fstp dword[p+8]
515
	fld qword[bottom]
747
	fld qword[bottom]
516
	fstp dword[p+12]
748
	fstp dword[p+12]
517
	fld qword[top]
749
	fld qword[top]
518
	fstp dword[p+16]
750
	fstp dword[p+16]
519
	fld qword[near]
751
	fld qword[near]
520
	fstp dword[p+20]
752
	fstp dword[p+20]
521
	fld qword[farv]
753
	fld qword[farv]
522
	fstp dword[p+24]
754
	fstp dword[p+24]
523
 
755
 
524
	lea eax,[ebp-28] ;=sizeof(dd)*7
756
	lea eax,[ebp-28] ;=sizeof(dd)*7
525
	stdcall gl_add_op,eax
757
	stdcall gl_add_op,eax
526
	ret
758
	ret
527
endp
759
endp
528
 
760
 
529
; lightening
761
; lightening
530
 
762
 
531
align 4
763
align 4
532
proc glMaterialfv uses eax ecx, mode:dword, type:dword, v:dword
764
proc glMaterialfv uses eax ecx, mode:dword, type:dword, v:dword
533
locals
765
locals
534
	p rd 7
766
	p rd 7
535
endl
767
endl
536
 
768
 
537
;  assert(mode == GL_FRONT  || mode == GL_BACK || mode==GL_FRONT_AND_BACK);
769
;  assert(mode == GL_FRONT  || mode == GL_BACK || mode==GL_FRONT_AND_BACK);
538
 
770
 
539
	mov dword[p],OP_Material
771
	mov dword[p],OP_Material
540
	mov eax,[mode]
772
	mov eax,[mode]
541
	mov dword[p+4],eax
773
	mov dword[p+4],eax
542
	mov eax,[type]
774
	mov eax,[type]
543
	mov dword[p+8],eax
775
	mov dword[p+8],eax
544
 
776
 
545
	mov eax,[v]
777
	mov eax,[v]
546
	mov ecx,[eax+8]
778
	mov ecx,[eax+8]
547
	mov dword[p+12],ecx
779
	mov dword[p+12],ecx
548
	mov ecx,[eax+4]
780
	mov ecx,[eax+4]
549
	mov dword[p+16],ecx
781
	mov dword[p+16],ecx
550
	mov ecx,[eax]
782
	mov ecx,[eax]
551
	mov dword[p+20],ecx
783
	mov dword[p+20],ecx
552
	mov ecx,[eax+12]
784
	mov ecx,[eax+12]
553
	mov dword[p+24],ecx
785
	mov dword[p+24],ecx
554
 
786
 
555
	cmp dword[type],GL_SHININESS
787
	cmp dword[type],GL_SHININESS
556
	jne @f
788
	jne @f
557
		mov dword[p+16],0.0
789
		mov dword[p+16],0.0
558
		mov dword[p+20],0.0
790
		mov dword[p+20],0.0
559
		mov dword[p+24],0.0
791
		mov dword[p+24],0.0
560
	@@:
792
	@@:
561
 
793
 
562
	lea eax,[ebp-28] ;=sizeof(dd)*7
794
	lea eax,[ebp-28] ;=sizeof(dd)*7
563
	stdcall gl_add_op,eax
795
	stdcall gl_add_op,eax
564
	ret
796
	ret
565
endp
797
endp
566
 
798
 
567
align 4
799
align 4
568
proc glMaterialf uses eax, mode:dword, type:dword, v:dword
800
proc glMaterialf uses eax, mode:dword, type:dword, v:dword
569
locals
801
locals
570
	p rd 7
802
	p rd 7
571
endl
803
endl
572
	mov dword[p],OP_Material
804
	mov dword[p],OP_Material
573
	mov eax,[mode]
805
	mov eax,[mode]
574
	mov dword[p+4],eax
806
	mov dword[p+4],eax
575
	mov eax,[type]
807
	mov eax,[type]
576
	mov dword[p+8],eax
808
	mov dword[p+8],eax
577
	mov eax,[v]
809
	mov eax,[v]
578
	mov dword[p+12],eax
810
	mov dword[p+12],eax
579
	mov dword[p+16],0.0
811
	mov dword[p+16],0.0
580
	mov dword[p+20],0.0
812
	mov dword[p+20],0.0
581
	mov dword[p+24],0.0
813
	mov dword[p+24],0.0
582
 
814
 
583
	lea eax,[ebp-28] ;=sizeof(dd)*7
815
	lea eax,[ebp-28] ;=sizeof(dd)*7
584
	stdcall gl_add_op,eax
816
	stdcall gl_add_op,eax
585
	ret
817
	ret
586
endp
818
endp
587
 
819
 
588
align 4
820
align 4
589
glColorMaterial: ;mode, type
821
glColorMaterial: ;mode, type
590
	push dword[esp] ;копируем адрес возврата
822
	push dword[esp] ;копируем адрес возврата
591
	push eax
823
	push eax
592
	lea eax,[esp+8]
824
	lea eax,[esp+8]
593
	mov dword[eax],OP_ColorMaterial
825
	mov dword[eax],OP_ColorMaterial
594
	stdcall gl_add_op,eax
826
	stdcall gl_add_op,eax
595
	pop eax
827
	pop eax
596
	ret 12 ;=sizeof(dd)*3
828
	ret 12 ;=sizeof(dd)*3
597
 
829
 
598
align 4
830
align 4
599
proc glLightfv uses eax ecx, light:dword, type:dword, v:dword
831
proc glLightfv uses eax ecx, light:dword, type:dword, v:dword
600
locals
832
locals
601
	p rd 7
833
	p rd 7
602
endl
834
endl
603
	mov dword[p],OP_Light
835
	mov dword[p],OP_Light
604
	mov eax,[light]
836
	mov eax,[light]
605
	mov dword[p+4],eax
837
	mov dword[p+4],eax
606
	mov eax,[type]
838
	mov eax,[type]
607
	mov dword[p+8],eax
839
	mov dword[p+8],eax
608
 
840
 
609
	;TODO: 3 composants ?
841
	;TODO: 3 composants ?
610
	mov eax,[v]
842
	mov eax,[v]
611
	mov ecx,[eax]
843
	mov ecx,[eax]
612
	mov dword[p+12],ecx
844
	mov dword[p+12],ecx
613
	mov ecx,[eax+4]
845
	mov ecx,[eax+4]
614
	mov dword[p+16],ecx
846
	mov dword[p+16],ecx
615
	mov ecx,[eax+8]
847
	mov ecx,[eax+8]
616
	mov dword[p+20],ecx
848
	mov dword[p+20],ecx
617
	mov ecx,[eax+12]
849
	mov ecx,[eax+12]
618
	mov dword[p+24],ecx
850
	mov dword[p+24],ecx
619
 
851
 
620
	lea eax,[ebp-28] ;=sizeof(dd)*7
852
	lea eax,[ebp-28] ;=sizeof(dd)*7
621
	stdcall gl_add_op,eax
853
	stdcall gl_add_op,eax
622
	ret
854
	ret
623
endp
855
endp
624
 
856
 
625
align 4
857
align 4
626
proc glLightf uses eax, light:dword, type:dword, v:dword
858
proc glLightf uses eax, light:dword, type:dword, v:dword
627
locals
859
locals
628
	p rd 7
860
	p rd 7
629
endl
861
endl
630
	mov dword[p],OP_Light
862
	mov dword[p],OP_Light
631
	mov eax,[light]
863
	mov eax,[light]
632
	mov dword[p+4],eax
864
	mov dword[p+4],eax
633
	mov eax,[type]
865
	mov eax,[type]
634
	mov dword[p+8],eax
866
	mov dword[p+8],eax
635
	mov eax,[v]
867
	mov eax,[v]
636
	mov dword[p+12],eax
868
	mov dword[p+12],eax
637
	mov dword[p+16],0.0
869
	mov dword[p+16],0.0
638
	mov dword[p+20],0.0
870
	mov dword[p+20],0.0
639
	mov dword[p+24],0.0
871
	mov dword[p+24],0.0
640
 
872
 
641
	lea eax,[ebp-28] ;=sizeof(dd)*7
873
	lea eax,[ebp-28] ;=sizeof(dd)*7
642
	stdcall gl_add_op,eax
874
	stdcall gl_add_op,eax
643
	ret
875
	ret
644
endp
876
endp
645
 
877
 
646
align 4
878
align 4
647
proc glLightModeli uses eax, pname:dword, param:dword
879
proc glLightModeli uses eax, pname:dword, param:dword
648
locals
880
locals
649
	p rd 6
881
	p rd 6
650
endl
882
endl
651
	mov dword[p],OP_LightModel
883
	mov dword[p],OP_LightModel
652
	mov eax,[pname]
884
	mov eax,[pname]
653
	mov dword[p+4],eax
885
	mov dword[p+4],eax
654
	fild dword[param]
886
	fild dword[param]
655
	fstp dword[p+8] ;преобразовали int во float
887
	fstp dword[p+8] ;преобразовали int во float
656
 
888
 
657
	mov dword[p+12],0.0
889
	mov dword[p+12],0.0
658
	mov dword[p+16],0.0
890
	mov dword[p+16],0.0
659
	mov dword[p+20],0.0
891
	mov dword[p+20],0.0
660
 
892
 
661
	lea eax,[ebp-24] ;=sizeof(dd)*6
893
	lea eax,[ebp-24] ;=sizeof(dd)*6
662
	stdcall gl_add_op,eax
894
	stdcall gl_add_op,eax
663
	ret
895
	ret
664
endp
896
endp
665
 
897
 
666
align 4
898
align 4
667
proc glLightModelfv uses eax ecx, pname:dword, param:dword
899
proc glLightModelfv uses eax ecx, pname:dword, param:dword
668
locals
900
locals
669
	p rd 6
901
	p rd 6
670
endl
902
endl
671
	mov dword[p],OP_LightModel
903
	mov dword[p],OP_LightModel
672
	mov eax,[pname]
904
	mov eax,[pname]
673
	mov dword[p+4],eax
905
	mov dword[p+4],eax
674
	mov eax,[param]
906
	mov eax,[param]
675
	mov ecx,[eax]
907
	mov ecx,[eax]
676
	mov dword[p+8],ecx
908
	mov dword[p+8],ecx
677
	mov ecx,[eax+4]
909
	mov ecx,[eax+4]
678
	mov dword[p+12],ecx
910
	mov dword[p+12],ecx
679
	mov ecx,[eax+8]
911
	mov ecx,[eax+8]
680
	mov dword[p+16],ecx
912
	mov dword[p+16],ecx
681
	mov ecx,[eax+12]
913
	mov ecx,[eax+12]
682
	mov dword[p+20],ecx
914
	mov dword[p+20],ecx
683
 
915
 
684
	lea eax,[ebp-24] ;=sizeof(dd)*6
916
	lea eax,[ebp-24] ;=sizeof(dd)*6
685
	stdcall gl_add_op,eax
917
	stdcall gl_add_op,eax
686
	ret
918
	ret
687
endp
919
endp
688
 
920
 
689
; clear
921
; clear
690
 
922
 
691
align 4
923
align 4
692
glClear: ;mask
924
glClear: ;mask
693
	push dword[esp] ;копируем адрес возврата
925
	push dword[esp] ;копируем адрес возврата
694
	push eax
926
	push eax
695
	lea eax,[esp+8]
927
	lea eax,[esp+8]
696
	mov dword[eax],OP_Clear
928
	mov dword[eax],OP_Clear
697
	stdcall gl_add_op,eax
929
	stdcall gl_add_op,eax
698
	pop eax
930
	pop eax
699
	ret 8 ;=sizeof(dd)*2
931
	ret 8 ;=sizeof(dd)*2
700
 
932
 
701
align 4
933
align 4
702
proc glClearColor uses eax, r:dword, g:dword, b:dword, a:dword
934
proc glClearColor uses eax, r:dword, g:dword, b:dword, a:dword
703
locals
935
locals
704
	p rd 5
936
	p rd 5
705
endl
937
endl
706
	mov dword[p],OP_ClearColor
938
	mov dword[p],OP_ClearColor
707
	mov eax,[b]
939
	mov eax,[b]
708
	mov dword[p+4],eax
940
	mov dword[p+4],eax
709
	mov eax,[g]
941
	mov eax,[g]
710
	mov dword[p+8],eax
942
	mov dword[p+8],eax
711
	mov eax,[r]
943
	mov eax,[r]
712
	mov dword[p+12],eax
944
	mov dword[p+12],eax
713
	mov eax,[a]
945
	mov eax,[a]
714
	mov dword[p+16],eax
946
	mov dword[p+16],eax
715
 
947
 
716
	lea eax,[ebp-20] ;=sizeof(dd)*5
948
	lea eax,[ebp-20] ;=sizeof(dd)*5
717
	stdcall gl_add_op,eax
949
	stdcall gl_add_op,eax
718
	ret
950
	ret
719
endp
951
endp
720
 
952
 
721
align 4
953
align 4
722
proc glClearDepth uses eax, depth:dword
954
proc glClearDepth uses eax, depth:dword
723
locals
955
locals
724
	p rd 2
956
	p rd 2
725
endl
957
endl
726
	mov dword[p],OP_ClearDepth
958
	mov dword[p],OP_ClearDepth
727
	mov eax,[depth]
959
	mov eax,[depth]
728
	fld qword[eax]
960
	fld qword[eax]
729
	fstp dword[p+4]
961
	fstp dword[p+4]
730
 
962
 
731
	lea eax,[ebp-8] ;=sizeof(dd)*2
963
	lea eax,[ebp-8] ;=sizeof(dd)*2
732
	stdcall gl_add_op,eax
964
	stdcall gl_add_op,eax
733
	ret
965
	ret
734
endp
966
endp
735
 
967
 
736
; textures
968
; textures
737
 
969
 
738
align 4
970
align 4
739
glTexImage2D: ;target, level, components, width, height, border, format, type, pixels
971
glTexImage2D: ;target, level, components, width, height, border, format, type, pixels
740
	push dword[esp] ;копируем адрес возврата
972
	push dword[esp] ;копируем адрес возврата
741
	push eax
973
	push eax
742
	lea eax,[esp+8]
974
	lea eax,[esp+8]
743
	mov dword[eax],OP_TexImage2D
975
	mov dword[eax],OP_TexImage2D
744
	stdcall gl_add_op,eax
976
	stdcall gl_add_op,eax
745
	pop eax
977
	pop eax
746
	ret 40 ;=sizeof(dd)*10
978
	ret 40 ;=sizeof(dd)*10
747
 
979
 
748
align 4
980
align 4
749
glBindTexture: ;target, texture
981
glBindTexture: ;target, texture
750
	push dword[esp] ;копируем адрес возврата
982
	push dword[esp] ;копируем адрес возврата
751
	push eax
983
	push eax
752
	lea eax,[esp+8]
984
	lea eax,[esp+8]
753
	mov dword[eax],OP_BindTexture
985
	mov dword[eax],OP_BindTexture
754
	stdcall gl_add_op,eax
986
	stdcall gl_add_op,eax
755
	pop eax
987
	pop eax
756
	ret 12 ;=sizeof(dd)*3
988
	ret 12 ;=sizeof(dd)*3
757
 
989
 
758
align 4
990
align 4
759
proc glTexEnvi uses eax, target:dword, pname:dword, param:dword
991
proc glTexEnvi uses eax, target:dword, pname:dword, param:dword
760
locals
992
locals
761
	p rd 8
993
	p rd 8
762
endl
994
endl
763
	mov dword[p],OP_TexEnv
995
	mov dword[p],OP_TexEnv
764
	mov eax,[target]
996
	mov eax,[target]
765
	mov dword[p+4],eax
997
	mov dword[p+4],eax
766
	mov eax,[pname]
998
	mov eax,[pname]
767
	mov dword[p+8],eax
999
	mov dword[p+8],eax
768
	mov eax,[param]
1000
	mov eax,[param]
769
	mov dword[p+12],eax
1001
	mov dword[p+12],eax
770
	mov dword[p+16],0.0
1002
	mov dword[p+16],0.0
771
	mov dword[p+20],0.0
1003
	mov dword[p+20],0.0
772
	mov dword[p+24],0.0
1004
	mov dword[p+24],0.0
773
	mov dword[p+28],0.0
1005
	mov dword[p+28],0.0
774
 
1006
 
775
	lea eax,[ebp-32] ;=sizeof(dd)*8
1007
	lea eax,[ebp-32] ;=sizeof(dd)*8
776
	stdcall gl_add_op,eax
1008
	stdcall gl_add_op,eax
777
	ret
1009
	ret
778
endp
1010
endp
779
 
1011
 
780
align 4
1012
align 4
781
proc glTexParameteri uses eax, target:dword, pname:dword, param:dword
1013
proc glTexParameteri uses eax, target:dword, pname:dword, param:dword
782
locals
1014
locals
783
	p rd 8
1015
	p rd 8
784
endl
1016
endl
785
	mov dword[p],OP_TexParameter
1017
	mov dword[p],OP_TexParameter
786
	mov eax,[target]
1018
	mov eax,[target]
787
	mov dword[p+4],eax
1019
	mov dword[p+4],eax
788
	mov eax,[pname]
1020
	mov eax,[pname]
789
	mov dword[p+8],eax
1021
	mov dword[p+8],eax
790
	mov eax,[param]
1022
	mov eax,[param]
791
	mov dword[p+12],eax
1023
	mov dword[p+12],eax
792
	mov dword[p+16],0.0
1024
	mov dword[p+16],0.0
793
	mov dword[p+20],0.0
1025
	mov dword[p+20],0.0
794
	mov dword[p+24],0.0
1026
	mov dword[p+24],0.0
795
	mov dword[p+28],0.0
1027
	mov dword[p+28],0.0
796
 
1028
 
797
	lea eax,[ebp-32] ;=sizeof(dd)*8
1029
	lea eax,[ebp-32] ;=sizeof(dd)*8
798
	stdcall gl_add_op,eax
1030
	stdcall gl_add_op,eax
799
	ret
1031
	ret
800
endp
1032
endp
801
 
1033
 
802
align 4
1034
align 4
803
glPixelStorei: ;pname, param
1035
glPixelStorei: ;pname, param
804
	push dword[esp] ;копируем адрес возврата
1036
	push dword[esp] ;копируем адрес возврата
805
	push eax
1037
	push eax
806
	lea eax,[esp+8]
1038
	lea eax,[esp+8]
807
	mov dword[eax],OP_PixelStore
1039
	mov dword[eax],OP_PixelStore
808
	stdcall gl_add_op,eax
1040
	stdcall gl_add_op,eax
809
	pop eax
1041
	pop eax
810
	ret 12 ;=sizeof(dd)*3
1042
	ret 12 ;=sizeof(dd)*3
811
 
1043
 
812
; selection
1044
; selection
813
 
1045
 
814
align 4
1046
align 4
815
glInitNames:
1047
glInitNames:
816
	stdcall gl_add_op,op_InitNames
1048
	stdcall gl_add_op,op_InitNames
817
	ret
1049
	ret
818
 
1050
 
819
align 4
1051
align 4
820
glPushName: ;name
1052
glPushName: ;name
821
	push dword[esp] ;копируем адрес возврата
1053
	push dword[esp] ;копируем адрес возврата
822
	push eax
1054
	push eax
823
	lea eax,[esp+8]
1055
	lea eax,[esp+8]
824
	mov dword[eax],OP_PushName
1056
	mov dword[eax],OP_PushName
825
	stdcall gl_add_op,eax
1057
	stdcall gl_add_op,eax
826
	pop eax
1058
	pop eax
827
	ret 8 ;=sizeof(dd)*2
1059
	ret 8 ;=sizeof(dd)*2
828
 
1060
 
829
align 4
1061
align 4
830
glPopName:
1062
glPopName:
831
	stdcall gl_add_op,op_PopName
1063
	stdcall gl_add_op,op_PopName
832
	ret
1064
	ret
833
 
1065
 
834
align 4
1066
align 4
835
glLoadName: ;name
1067
glLoadName: ;name
836
	push dword[esp] ;копируем адрес возврата
1068
	push dword[esp] ;копируем адрес возврата
837
	push eax
1069
	push eax
838
	lea eax,[esp+8]
1070
	lea eax,[esp+8]
839
	mov dword[eax],OP_LoadName
1071
	mov dword[eax],OP_LoadName
840
	stdcall gl_add_op,eax
1072
	stdcall gl_add_op,eax
841
	pop eax
1073
	pop eax
842
	ret 8 ;=sizeof(dd)*2
1074
	ret 8 ;=sizeof(dd)*2
843
 
1075
 
844
align 4
1076
align 4
845
glPolygonOffset: ;factor, units
1077
glPolygonOffset: ;factor, units
846
	push dword[esp] ;копируем адрес возврата
1078
	push dword[esp] ;копируем адрес возврата
847
	push eax
1079
	push eax
848
	lea eax,[esp+8]
1080
	lea eax,[esp+8]
849
	mov dword[eax],OP_PolygonOffset
1081
	mov dword[eax],OP_PolygonOffset
850
	stdcall gl_add_op,eax
1082
	stdcall gl_add_op,eax
851
	pop eax
1083
	pop eax
852
	ret 12 ;=sizeof(dd)*3
1084
	ret 12 ;=sizeof(dd)*3
853
 
1085
 
854
; Special Functions
1086
; Special Functions
855
 
1087
 
856
align 4
1088
align 4
857
glCallList: ;list
1089
glCallList: ;list
858
	push dword[esp] ;копируем адрес возврата
1090
	push dword[esp] ;копируем адрес возврата
859
	push eax
1091
	push eax
860
	lea eax,[esp+8]
1092
	lea eax,[esp+8]
861
	mov dword[eax],OP_CallList
1093
	mov dword[eax],OP_CallList
862
	stdcall gl_add_op,eax
1094
	stdcall gl_add_op,eax
863
	pop eax
1095
	pop eax
864
	ret 8 ;=sizeof(dd)*2
1096
	ret 8 ;=sizeof(dd)*2
865
 
1097
 
866
align 4
1098
align 4
867
proc glFlush ;(void)
1099
proc glFlush ;(void)
868
	;nothing to do
1100
	;nothing to do
869
	ret
1101
	ret
870
endp
1102
endp
871
 
1103
 
872
align 4
1104
align 4
873
glHint: ;target, mode
1105
glHint: ;target, mode
874
	push dword[esp] ;копируем адрес возврата
1106
	push dword[esp] ;копируем адрес возврата
875
	push eax
1107
	push eax
876
	lea eax,[esp+8]
1108
	lea eax,[esp+8]
877
	mov dword[eax],OP_Hint
1109
	mov dword[eax],OP_Hint
878
	stdcall gl_add_op,eax
1110
	stdcall gl_add_op,eax
879
	pop eax
1111
	pop eax
880
	ret 12 ;=sizeof(dd)*3
1112
	ret 12 ;=sizeof(dd)*3
881
 
1113
 
882
; Non standard functions
1114
; Non standard functions
883
 
1115
 
884
align 4
1116
align 4
885
proc glDebug uses eax, mode:dword
1117
proc glDebug uses eax, mode:dword
886
	stdcall gl_get_context ;после вызова функции в eax указатель на GLContext
1118
	call gl_get_context ;после вызова функции в eax указатель на GLContext
887
	push dword[mode]
1119
	push dword[mode]
888
	pop dword[eax+GLContext.print_flag]
1120
	pop dword[eax+GLContext.print_flag]
889
	ret
1121
	ret
890
endp
1122
endp