Subversion Repositories Kolibri OS

Rev

Rev 5353 | Rev 5418 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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