Subversion Repositories Kolibri OS

Rev

Rev 8063 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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