Subversion Repositories Kolibri OS

Rev

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

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