Skip to content

Commit b511bf7

Browse files
committed
Use HandleAllocator for GL object. NFC
1 parent 376c6ff commit b511bf7

13 files changed

+273
-278
lines changed

src/library.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3657,6 +3657,9 @@ mergeInto(LibraryManager.library, {
36573657
// Reserve slot 0 so that 0 is always and invalid handle
36583658
this.allocated = [undefined];
36593659
this.freelist = [];
3660+
this.has = function(id) {
3661+
return this.allocated[id] !== undefined;
3662+
},
36603663
this.get = function(id) {
36613664
#if ASSERTIONS
36623665
assert(this.allocated[id] !== undefined, 'invalid handle: ' + id);

src/library_glemu.js

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -560,16 +560,16 @@ var LibraryGLEmulation = {
560560
GL.shaderSources[shader] = source;
561561
dbg("glShaderSource: Output: \n" + source);
562562
#endif
563-
GLctx.shaderSource(GL.shaders[shader], source);
563+
GLctx.shaderSource(GL.shaders.get(shader), source);
564564
};
565565
{{{ updateExport('glShaderSource') }}}
566566

567567
var glCompileShader = _glCompileShader;
568568
_glCompileShader = _emscripten_glCompileShader = (shader) => {
569-
GLctx.compileShader(GL.shaders[shader]);
569+
GLctx.compileShader(GL.shaders.get(shader));
570570
#if GL_DEBUG
571-
if (!GLctx.getShaderParameter(GL.shaders[shader], GLctx.COMPILE_STATUS)) {
572-
dbg('Failed to compile shader: ' + GLctx.getShaderInfoLog(GL.shaders[shader]));
571+
if (!GLctx.getShaderParameter(GL.shaders.get(shader), GLctx.COMPILE_STATUS)) {
572+
dbg('Failed to compile shader: ' + GLctx.getShaderInfoLog(GL.shaders.get(shader)));
573573
dbg('Info: ' + JSON.stringify(GL.shaderInfos[shader]));
574574
dbg('Original source: ' + GL.shaderOriginalSources[shader]);
575575
dbg('Source: ' + GL.shaderSources[shader]);
@@ -645,7 +645,7 @@ var LibraryGLEmulation = {
645645
var glLinkProgram = _glLinkProgram;
646646
_glLinkProgram = _emscripten_glLinkProgram = (program) => {
647647
if (!(program in zeroUsedPrograms)) {
648-
GLctx.bindAttribLocation(GL.programs[program], 0, 'a_position');
648+
GLctx.bindAttribLocation(GL.programs.get(program), 0, 'a_position');
649649
}
650650
glLinkProgram(program);
651651
};
@@ -757,9 +757,9 @@ var LibraryGLEmulation = {
757757
glDeleteObject__deps: ['glDeleteProgram', 'glDeleteShader'],
758758
glDeleteObject__sig: 'vi',
759759
glDeleteObject: function(id) {
760-
if (GL.programs[id]) {
760+
if (GL.programs.get(id)) {
761761
_glDeleteProgram(id);
762-
} else if (GL.shaders[id]) {
762+
} else if (GL.shaders.has(id)) {
763763
_glDeleteShader(id);
764764
} else {
765765
err('WARNING: deleteObject received invalid id: ' + id);
@@ -770,22 +770,22 @@ var LibraryGLEmulation = {
770770
glGetObjectParameteriv__sig: 'viii',
771771
glGetObjectParameteriv__deps: ['glGetProgramiv', 'glGetShaderiv'],
772772
glGetObjectParameteriv: function(id, type, result) {
773-
if (GL.programs[id]) {
773+
if (GL.programs.has(id)) {
774774
if (type == 0x8B84) { // GL_OBJECT_INFO_LOG_LENGTH_ARB
775-
var log = GLctx.getProgramInfoLog(GL.programs[id]);
775+
var log = GLctx.getProgramInfoLog(GL.programs.get(id));
776776
if (log === null) log = '(unknown error)';
777777
{{{ makeSetValue('result', '0', 'log.length', 'i32') }}};
778778
return;
779779
}
780780
_glGetProgramiv(id, type, result);
781-
} else if (GL.shaders[id]) {
781+
} else if (GL.shaders.has(id)) {
782782
if (type == 0x8B84) { // GL_OBJECT_INFO_LOG_LENGTH_ARB
783-
var log = GLctx.getShaderInfoLog(GL.shaders[id]);
783+
var log = GLctx.getShaderInfoLog(GL.shaders.get(id));
784784
if (log === null) log = '(unknown error)';
785785
{{{ makeSetValue('result', '0', 'log.length', 'i32') }}};
786786
return;
787787
} else if (type == 0x8B88) { // GL_OBJECT_SHADER_SOURCE_LENGTH_ARB
788-
var source = GLctx.getShaderSource(GL.shaders[id]);
788+
var source = GLctx.getShaderSource(GL.shaders.get(id));
789789
if (source === null) return; // If an error occurs, nothing will be written to result
790790
{{{ makeSetValue('result', '0', 'source.length', 'i32') }}};
791791
return;
@@ -800,9 +800,9 @@ var LibraryGLEmulation = {
800800
glGetInfoLog__deps: ['glGetProgramInfoLog', 'glGetShaderInfoLog'],
801801
glGetInfoLog__sig: 'viiii',
802802
glGetInfoLog: function(id, maxLength, length, infoLog) {
803-
if (GL.programs[id]) {
803+
if (GL.programs.has(id)) {
804804
_glGetProgramInfoLog(id, maxLength, length, infoLog);
805-
} else if (GL.shaders[id]) {
805+
} else if (GL.shaders.has(id)) {
806806
_glGetShaderInfoLog(id, maxLength, length, infoLog);
807807
} else {
808808
err('WARNING: glGetInfoLog received invalid id: ' + id);
@@ -2207,14 +2207,14 @@ var LibraryGLEmulation = {
22072207
var uTexMatrixPrefix = GLImmediate.useTextureMatrix ? 'u_textureMatrix' : null;
22082208

22092209
if (useCurrProgram) {
2210-
if (GL.shaderInfos[GL.programShaders[GL.currProgram][0]].type == GLctx.VERTEX_SHADER) {
2211-
this.vertexShader = GL.shaders[GL.programShaders[GL.currProgram][0]];
2212-
this.fragmentShader = GL.shaders[GL.programShaders[GL.currProgram][1]];
2210+
if (GL.shaderInfos[GL.programShaders.get(GL.currProgram)[0]].type == GLctx.VERTEX_SHADER) {
2211+
this.vertexShader = GL.shaders.get(GL.programShaders[GL.currProgram][0]);
2212+
this.fragmentShader = GL.shaders.get(GL.programShaders[GL.currProgram][1]);
22132213
} else {
2214-
this.vertexShader = GL.shaders[GL.programShaders[GL.currProgram][1]];
2215-
this.fragmentShader = GL.shaders[GL.programShaders[GL.currProgram][0]];
2214+
this.vertexShader = GL.shaders.get(GL.programShaders[GL.currProgram][1]);
2215+
this.fragmentShader = GL.shaders.get(GL.programShaders[GL.currProgram][0]);
22162216
}
2217-
this.program = GL.programs[GL.currProgram];
2217+
this.program = GL.programs.get(GL.currProgram);
22182218
this.usedTexUnitList = [];
22192219
} else {
22202220
// IMPORTANT NOTE: If you parameterize the shader source based on any runtime values
@@ -3568,31 +3568,28 @@ var LibraryGLEmulation = {
35683568
emulGlGenVertexArrays__sig: 'vii',
35693569
emulGlGenVertexArrays: function(n, vaos) {
35703570
for (var i = 0; i < n; i++) {
3571-
var id = GL.getNewId(GLEmulation.vaos);
3572-
GLEmulation.vaos[id] = {
3573-
id: id,
3571+
var vao = {
35743572
arrayBuffer: 0,
35753573
elementArrayBuffer: 0,
35763574
enabledVertexAttribArrays: {},
35773575
vertexAttribPointers: {},
35783576
enabledClientStates: {},
35793577
};
3580-
{{{ makeSetValue('vaos', 'i*4', 'id', 'i32') }}};
3578+
vao.id = GLEmulation.vaos.allocate(vao);
3579+
{{{ makeSetValue('vaos', 'i*4', 'vao.id', 'i32') }}};
35813580
}
35823581
},
35833582
emulGlDeleteVertexArrays__sig: 'vii',
35843583
emulGlDeleteVertexArrays: function(n, vaos) {
35853584
for (var i = 0; i < n; i++) {
35863585
var id = {{{ makeGetValue('vaos', 'i*4', 'i32') }}};
3587-
GLEmulation.vaos[id] = null;
3586+
GLEmulation.vaos.free(id);
35883587
if (GLEmulation.currentVao && GLEmulation.currentVao.id == id) GLEmulation.currentVao = null;
35893588
}
35903589
},
35913590
emulGlIsVertexArray__sig: 'vi',
35923591
emulGlIsVertexArray: function(array) {
3593-
var vao = GLEmulation.vaos[array];
3594-
if (!vao) return 0;
3595-
return 1;
3592+
return GLEmulation.vaos.has(array);
35963593
},
35973594
emulGlBindVertexArray__deps: ['glBindBuffer', 'glEnableVertexAttribArray', 'glVertexAttribPointer', 'glEnableClientState'],
35983595
emulGlBindVertexArray__sig: 'vi',
@@ -3611,7 +3608,7 @@ var LibraryGLEmulation = {
36113608
GLImmediate.modifiedClientAttributes = true;
36123609
if (vao) {
36133610
// replay vao
3614-
var info = GLEmulation.vaos[vao];
3611+
var info = GLEmulation.vaos.get(vao);
36153612
_glBindBuffer(GLctx.ARRAY_BUFFER, info.arrayBuffer); // XXX overwrite current binding?
36163613
_glBindBuffer(GLctx.ELEMENT_ARRAY_BUFFER, info.elementArrayBuffer);
36173614
for (var vaa in info.enabledVertexAttribArrays) {

src/library_html5_webgl.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -452,30 +452,30 @@ var LibraryHtml5WebGL = {
452452

453453
emscripten_webgl_get_program_parameter_d__proxy: 'sync_on_current_webgl_context_thread',
454454
emscripten_webgl_get_program_parameter_d: function(program, param) {
455-
return GLctx.getProgramParameter(GL.programs[program], param);
455+
return GLctx.getProgramParameter(GL.programs.get(program), param);
456456
},
457457

458458
emscripten_webgl_get_program_info_log_utf8__proxy: 'sync_on_current_webgl_context_thread',
459459
emscripten_webgl_get_program_info_log_utf8__deps: ['$stringToNewUTF8'],
460460
emscripten_webgl_get_program_info_log_utf8: function(program) {
461-
return stringToNewUTF8(GLctx.getProgramInfoLog(GL.programs[program]));
461+
return stringToNewUTF8(GLctx.getProgramInfoLog(GL.programs.get(program)));
462462
},
463463

464464
emscripten_webgl_get_shader_parameter_d__proxy: 'sync_on_current_webgl_context_thread',
465465
emscripten_webgl_get_shader_parameter_d: function(shader, param) {
466-
return GLctx.getShaderParameter(GL.shaders[shader], param);
466+
return GLctx.getShaderParameter(GL.shaders.get(shader), param);
467467
},
468468

469469
emscripten_webgl_get_shader_info_log_utf8__proxy: 'sync_on_current_webgl_context_thread',
470470
emscripten_webgl_get_shader_info_log_utf8__deps: ['$stringToNewUTF8'],
471471
emscripten_webgl_get_shader_info_log_utf8: function(shader) {
472-
return stringToNewUTF8(GLctx.getShaderInfoLog(GL.shaders[shader]));
472+
return stringToNewUTF8(GLctx.getShaderInfoLog(GL.shaders.get(shader)));
473473
},
474474

475475
emscripten_webgl_get_shader_source_utf8__proxy: 'sync_on_current_webgl_context_thread',
476476
emscripten_webgl_get_shader_source_utf8__deps: ['$stringToNewUTF8'],
477477
emscripten_webgl_get_shader_source_utf8: function(shader) {
478-
return stringToNewUTF8(GLctx.getShaderSource(GL.shaders[shader]));
478+
return stringToNewUTF8(GLctx.getShaderSource(GL.shaders.get(shader)));
479479
},
480480

481481
emscripten_webgl_get_vertex_attrib_d__proxy: 'sync_on_current_webgl_context_thread',
@@ -498,13 +498,13 @@ var LibraryHtml5WebGL = {
498498
emscripten_webgl_get_uniform_d__proxy: 'sync_on_current_webgl_context_thread',
499499
emscripten_webgl_get_uniform_d__deps: ['$webglGetUniformLocation'],
500500
emscripten_webgl_get_uniform_d: function(program, location) {
501-
return GLctx.getUniform(GL.programs[program], webglGetUniformLocation(location));
501+
return GLctx.getUniform(GL.programs.get(program), webglGetUniformLocation(location));
502502
},
503503

504504
emscripten_webgl_get_uniform_v__proxy: 'sync_on_current_webgl_context_thread',
505505
emscripten_webgl_get_uniform_v__deps: ['$writeGLArray', '$webglGetUniformLocation'],
506506
emscripten_webgl_get_uniform_v: function(program, location, dst, dstLength, dstType) {
507-
return writeGLArray(GLctx.getUniform(GL.programs[program], webglGetUniformLocation(location)), dst, dstLength, dstType);
507+
return writeGLArray(GLctx.getUniform(GL.programs.get(program), webglGetUniformLocation(location)), dst, dstLength, dstType);
508508
},
509509

510510
emscripten_webgl_get_parameter_v__proxy: 'sync_on_current_webgl_context_thread',

0 commit comments

Comments
 (0)