5
5
*/
6
6
7
7
{ { {
8
+ globalThis . copySigs = ( func ) => {
9
+ if ( ! RELOCATABLE ) return '' ;
10
+ return ` _${ func } .sig = _emscripten_${ func } .sig = orig_${ func } .sig;` ;
11
+ } ;
8
12
globalThis . fromPtr = ( arg ) => {
9
13
if ( CAN_ADDRESS_2GB ) {
10
14
return `${ arg } >>>= 0` ;
11
15
} else if ( MEMORY64 ) {
12
16
return `${ arg } = Number(${ arg } )` ;
13
17
}
14
18
return '' ;
15
- }
19
+ } ;
16
20
null ;
17
21
} } }
18
22
@@ -199,7 +203,7 @@ var LibraryGLEmulation = {
199
203
0x80A0 : 1 // GL_SAMPLE_COVERAGE
200
204
} ;
201
205
202
- var glEnable = _glEnable ;
206
+ var orig_glEnable = _glEnable ;
203
207
_glEnable = _emscripten_glEnable = ( cap ) => {
204
208
// Clean up the renderer on any change to the rendering state. The optimization of
205
209
// skipping renderer setup is aimed at the case of multiple glDraw* right after each other
@@ -247,10 +251,11 @@ var LibraryGLEmulation = {
247
251
} else if ( ! ( cap in validCapabilities ) ) {
248
252
return ;
249
253
}
250
- glEnable ( cap ) ;
254
+ orig_glEnable ( cap ) ;
251
255
} ;
256
+ { { { copySigs ( 'glEnable' ) } } }
252
257
253
- var glDisable = _glDisable ;
258
+ var orig_glDisable = _glDisable ;
254
259
_glDisable = _emscripten_glDisable = ( cap ) => {
255
260
GLImmediate . lastRenderer ?. cleanup ( ) ;
256
261
if ( cap == 0xB60 /* GL_FOG */ ) {
@@ -296,9 +301,11 @@ var LibraryGLEmulation = {
296
301
} else if ( ! ( cap in validCapabilities ) ) {
297
302
return ;
298
303
}
299
- glDisable ( cap ) ;
304
+ orig_glDisable ( cap ) ;
300
305
} ;
306
+ { { { copySigs ( 'glDisable' ) } } }
301
307
308
+ var orig_glIsEnabled = _glIsEnabled ;
302
309
_glIsEnabled = _emscripten_glIsEnabled = ( cap ) => {
303
310
if ( cap == 0xB60 /* GL_FOG */ ) {
304
311
return GLEmulation . fogEnabled ? 1 : 0 ;
@@ -317,8 +324,9 @@ var LibraryGLEmulation = {
317
324
}
318
325
return GLctx . isEnabled ( cap ) ;
319
326
} ;
327
+ { { { copySigs ( 'glIsEnabled' ) } } }
320
328
321
- var glGetBooleanv = _glGetBooleanv ;
329
+ var orig_glGetBooleanv = _glGetBooleanv ;
322
330
_glGetBooleanv = _emscripten_glGetBooleanv = ( pname , p ) => {
323
331
var attrib = GLEmulation . getAttributeFromCapability ( pname ) ;
324
332
if ( attrib !== null ) {
@@ -327,10 +335,11 @@ var LibraryGLEmulation = {
327
335
{ { { makeSetValue ( 'p' , '0' , 'result === true ? 1 : 0' , 'i8' ) } } } ;
328
336
return ;
329
337
}
330
- glGetBooleanv ( pname , p ) ;
338
+ orig_glGetBooleanv ( pname , p ) ;
331
339
} ;
340
+ { { { copySigs ( 'glGetBooleanv' ) } } }
332
341
333
- var glGetIntegerv = _glGetIntegerv ;
342
+ var orig_glGetIntegerv = _glGetIntegerv ;
334
343
_glGetIntegerv = _emscripten_glGetIntegerv = ( pname , params ) => {
335
344
{ { { fromPtr ( 'params' ) } } }
336
345
switch ( pname ) {
@@ -409,10 +418,11 @@ var LibraryGLEmulation = {
409
418
return ;
410
419
}
411
420
}
412
- glGetIntegerv ( pname , params ) ;
421
+ orig_glGetIntegerv ( pname , params ) ;
413
422
} ;
423
+ { { { copySigs ( 'glGetIntegerv' ) } } }
414
424
415
- var glGetString = _glGetString ;
425
+ var orig_glGetString = _glGetString ;
416
426
_glGetString = _emscripten_glGetString = ( name_ ) => {
417
427
if ( GL . stringCache [ name_ ] ) return GL . stringCache [ name_ ] ;
418
428
switch ( name_ ) {
@@ -424,8 +434,9 @@ var LibraryGLEmulation = {
424
434
) ;
425
435
return GL . stringCache [ name_ ] = { { { to64 ( 'ret' ) } } } ;
426
436
}
427
- return glGetString ( name_ ) ;
437
+ return orig_glGetString ( name_ ) ;
428
438
} ;
439
+ { { { copySigs ( 'glGetString' ) } } }
429
440
430
441
// Do some automatic rewriting to work around GLSL differences. Note that this must be done in
431
442
// tandem with the rest of the program, by itself it cannot suffice.
@@ -435,15 +446,16 @@ var LibraryGLEmulation = {
435
446
GL . shaderSources = { } ;
436
447
GL . shaderOriginalSources = { } ;
437
448
#endif
438
- var glCreateShader = _glCreateShader ;
449
+ var orig_glCreateShader = _glCreateShader ;
439
450
_glCreateShader = _emscripten_glCreateShader = ( shaderType ) => {
440
- var id = glCreateShader ( shaderType ) ;
451
+ var id = orig_glCreateShader ( shaderType ) ;
441
452
GL . shaderInfos [ id ] = {
442
453
type : shaderType ,
443
454
ftransform : false
444
455
} ;
445
456
return id ;
446
457
} ;
458
+ { { { copySigs ( 'glCreateShader' ) } } }
447
459
448
460
function ensurePrecision ( source ) {
449
461
if ( ! / p r e c i s i o n + ( l o w | m e d i u m | h i g h ) p + f l o a t * ; / . test ( source ) ) {
@@ -452,7 +464,7 @@ var LibraryGLEmulation = {
452
464
return source ;
453
465
}
454
466
455
- var glShaderSource = _glShaderSource ;
467
+ var orig_glShaderSource = _glShaderSource ;
456
468
_glShaderSource = _emscripten_glShaderSource = ( shader , count , string , length ) => {
457
469
{ { { fromPtr ( 'string' ) } } }
458
470
{ { { fromPtr ( 'length' ) } } }
@@ -566,8 +578,9 @@ var LibraryGLEmulation = {
566
578
#endif
567
579
GLctx . shaderSource ( GL . shaders [ shader ] , source ) ;
568
580
} ;
581
+ { { { copySigs ( 'glShaderSource' ) } } }
569
582
570
- var glCompileShader = _glCompileShader ;
583
+ var orig_glCompileShader = _glCompileShader ;
571
584
_glCompileShader = _emscripten_glCompileShader = ( shader ) => {
572
585
GLctx . compileShader ( GL . shaders [ shader ] ) ;
573
586
#if GL_DEBUG
@@ -580,16 +593,18 @@ var LibraryGLEmulation = {
580
593
}
581
594
#endif
582
595
} ;
596
+ { { { copySigs ( 'glCompileShader' ) } } }
583
597
584
598
GL . programShaders = { } ;
585
- var glAttachShader = _glAttachShader ;
599
+ var orig_glAttachShader = _glAttachShader ;
586
600
_glAttachShader = _emscripten_glAttachShader = ( program , shader ) => {
587
601
GL . programShaders [ program ] ||= [ ] ;
588
602
GL . programShaders [ program ] . push ( shader ) ;
589
- glAttachShader ( program , shader ) ;
603
+ orig_glAttachShader ( program , shader ) ;
590
604
} ;
605
+ { { { copySigs ( 'glAttachShader' ) } } }
591
606
592
- var glDetachShader = _glDetachShader ;
607
+ var orig_glDetachShader = _glDetachShader ;
593
608
_glDetachShader = _emscripten_glDetachShader = ( program , shader ) => {
594
609
var programShader = GL . programShaders [ program ] ;
595
610
if ( ! programShader ) {
@@ -598,10 +613,11 @@ var LibraryGLEmulation = {
598
613
}
599
614
var index = programShader . indexOf ( shader ) ;
600
615
programShader . splice ( index , 1 ) ;
601
- glDetachShader ( program , shader ) ;
616
+ orig_glDetachShader ( program , shader ) ;
602
617
} ;
618
+ { { { copySigs ( 'glDetachShader' ) } } }
603
619
604
- var glUseProgram = _glUseProgram ;
620
+ var orig_glUseProgram = _glUseProgram ;
605
621
_glUseProgram = _emscripten_glUseProgram = ( program ) => {
606
622
#if GL_DEBUG
607
623
if ( GL . debug ) {
@@ -618,38 +634,42 @@ var LibraryGLEmulation = {
618
634
GLImmediate . currentRenderer = null ; // This changes the FFP emulation shader program, need to recompute that.
619
635
GL . currProgram = program ;
620
636
GLImmediate . fixedFunctionProgram = 0 ;
621
- glUseProgram ( program ) ;
637
+ orig_glUseProgram ( program ) ;
622
638
}
623
639
}
640
+ { { { copySigs ( 'glUseProgram' ) } } }
624
641
625
- var glDeleteProgram = _glDeleteProgram ;
642
+ var orig_glDeleteProgram = _glDeleteProgram ;
626
643
_glDeleteProgram = _emscripten_glDeleteProgram = ( program ) => {
627
- glDeleteProgram ( program ) ;
644
+ orig_glDeleteProgram ( program ) ;
628
645
if ( program == GL . currProgram ) {
629
646
GLImmediate . currentRenderer = null ; // This changes the FFP emulation shader program, need to recompute that.
630
647
GL . currProgram = 0 ;
631
648
}
632
649
} ;
650
+ { { { copySigs ( 'glDeleteProgram' ) } } }
633
651
634
652
// If attribute 0 was not bound, bind it to 0 for WebGL performance reasons. Track if 0 is free for that.
635
653
var zeroUsedPrograms = { } ;
636
- var glBindAttribLocation = _glBindAttribLocation ;
654
+ var orig_glBindAttribLocation = _glBindAttribLocation ;
637
655
_glBindAttribLocation = _emscripten_glBindAttribLocation = ( program , index , name ) => {
638
656
if ( index == 0 ) zeroUsedPrograms [ program ] = true ;
639
- glBindAttribLocation ( program , index , name ) ;
657
+ orig_glBindAttribLocation ( program , index , name ) ;
640
658
} ;
659
+ { { { copySigs ( 'glBindAttribLocation' ) } } }
641
660
642
- var glLinkProgram = _glLinkProgram ;
661
+ var orig_glLinkProgram = _glLinkProgram ;
643
662
_glLinkProgram = _emscripten_glLinkProgram = ( program ) => {
644
663
if ( ! ( program in zeroUsedPrograms ) ) {
645
664
GLctx . bindAttribLocation ( GL . programs [ program ] , 0 , 'a_position' ) ;
646
665
}
647
- glLinkProgram ( program ) ;
666
+ orig_glLinkProgram ( program ) ;
648
667
} ;
668
+ { { { copySigs ( 'glLinkProgram' ) } } }
649
669
650
- var glBindBuffer = _glBindBuffer ;
670
+ var orig_glBindBuffer = _glBindBuffer ;
651
671
_glBindBuffer = _emscripten_glBindBuffer = ( target , buffer ) => {
652
- glBindBuffer ( target , buffer ) ;
672
+ orig_glBindBuffer ( target , buffer ) ;
653
673
if ( target == GLctx . ARRAY_BUFFER ) {
654
674
if ( GLEmulation . currentVao ) {
655
675
#if ASSERTIONS
@@ -661,8 +681,9 @@ var LibraryGLEmulation = {
661
681
if ( GLEmulation . currentVao ) GLEmulation . currentVao . elementArrayBuffer = buffer ;
662
682
}
663
683
} ;
684
+ { { { copySigs ( 'glBindBuffer' ) } } }
664
685
665
- var glGetFloatv = _glGetFloatv ;
686
+ var orig_glGetFloatv = _glGetFloatv ;
666
687
_glGetFloatv = _emscripten_glGetFloatv = ( pname , params ) => {
667
688
{ { { fromPtr ( 'params' ) } } }
668
689
if ( pname == 0xBA6 ) { // GL_MODELVIEW_MATRIX
@@ -689,39 +710,44 @@ var LibraryGLEmulation = {
689
710
} else if ( pname == 0xBC2 ) { // GL_ALPHA_TEST_REF
690
711
{ { { makeSetValue ( 'params' , '0' , 'GLEmulation.alphaTestRef' , 'float' ) } } } ;
691
712
} else {
692
- glGetFloatv ( pname , params ) ;
713
+ orig_glGetFloatv ( pname , params ) ;
693
714
}
694
715
} ;
716
+ { { { copySigs ( 'glGetFloatv' ) } } }
695
717
696
- var glHint = _glHint ;
718
+ var orig_glHint = _glHint ;
697
719
_glHint = _emscripten_glHint = ( target , mode ) => {
698
720
if ( target == 0x84EF ) { // GL_TEXTURE_COMPRESSION_HINT
699
721
return ;
700
722
}
701
- glHint ( target , mode ) ;
723
+ orig_glHint ( target , mode ) ;
702
724
} ;
725
+ { { { copySigs ( 'glHint' ) } } }
703
726
704
- var glEnableVertexAttribArray = _glEnableVertexAttribArray ;
727
+ var orig_glEnableVertexAttribArray = _glEnableVertexAttribArray ;
705
728
_glEnableVertexAttribArray = _emscripten_glEnableVertexAttribArray = ( index ) => {
706
- glEnableVertexAttribArray ( index ) ;
729
+ orig_glEnableVertexAttribArray ( index ) ;
707
730
GLEmulation . enabledVertexAttribArrays [ index ] = 1 ;
708
731
if ( GLEmulation . currentVao ) GLEmulation . currentVao . enabledVertexAttribArrays [ index ] = 1 ;
709
732
} ;
733
+ { { { copySigs ( 'glEnableVertexAttribArray' ) } } }
710
734
711
- var glDisableVertexAttribArray = _glDisableVertexAttribArray ;
735
+ var orig_glDisableVertexAttribArray = _glDisableVertexAttribArray ;
712
736
_glDisableVertexAttribArray = _emscripten_glDisableVertexAttribArray = ( index ) => {
713
- glDisableVertexAttribArray ( index ) ;
737
+ orig_glDisableVertexAttribArray ( index ) ;
714
738
delete GLEmulation . enabledVertexAttribArrays [ index ] ;
715
739
if ( GLEmulation . currentVao ) delete GLEmulation . currentVao . enabledVertexAttribArrays [ index ] ;
716
740
} ;
741
+ { { { copySigs ( 'glDisableVertexAttribArray' ) } } }
717
742
718
- var glVertexAttribPointer = _glVertexAttribPointer ;
743
+ var orig_glVertexAttribPointer = _glVertexAttribPointer ;
719
744
_glVertexAttribPointer = _emscripten_glVertexAttribPointer = ( index , size , type , normalized , stride , pointer ) => {
720
- glVertexAttribPointer ( index , size , type , normalized , stride , pointer ) ;
745
+ orig_glVertexAttribPointer ( index , size , type , normalized , stride , pointer ) ;
721
746
if ( GLEmulation . currentVao ) { // TODO: avoid object creation here? likely not hot though
722
747
GLEmulation . currentVao . vertexAttribPointers [ index ] = [ index , size , type , normalized , stride , pointer ] ;
723
748
}
724
749
} ;
750
+ { { { copySigs ( 'glVertexAttribPointer' ) } } }
725
751
} ,
726
752
727
753
getAttributeFromCapability ( cap ) {
0 commit comments