Skip to content

Commit 8de92e1

Browse files
committed
Use HandleAllocator for GL object. NFC
1 parent 9154146 commit 8de92e1

File tree

5 files changed

+232
-267
lines changed

5 files changed

+232
-267
lines changed

src/library_glemu.js

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -564,15 +564,15 @@ var LibraryGLEmulation = {
564564
GL.shaderSources[shader] = source;
565565
dbg("glShaderSource: Output: \n" + source);
566566
#endif
567-
GLctx.shaderSource(GL.shaders[shader], source);
567+
GLctx.shaderSource(GL.shaders.get(shader), source);
568568
};
569569

570570
var glCompileShader = _glCompileShader;
571571
_glCompileShader = _emscripten_glCompileShader = (shader) => {
572-
GLctx.compileShader(GL.shaders[shader]);
572+
GLctx.compileShader(GL.shaders.get(shader));
573573
#if GL_DEBUG
574-
if (!GLctx.getShaderParameter(GL.shaders[shader], GLctx.COMPILE_STATUS)) {
575-
dbg(`Failed to compile shader: ${GLctx.getShaderInfoLog(GL.shaders[shader])}`);
574+
if (!GLctx.getShaderParameter(GL.shaders.get(shader), GLctx.COMPILE_STATUS)) {
575+
dbg(`Failed to compile shader: ${GLctx.getShaderInfoLog(GL.shaders.get(shader))}`);
576576
dbg(`Info: ${JSON.stringify(GL.shaderInfos[shader])}`);
577577
dbg(`Original source: ${GL.shaderOriginalSources[shader]}`);
578578
dbg(`Source: ${GL.shaderSources[shader]}`);
@@ -642,7 +642,7 @@ var LibraryGLEmulation = {
642642
var glLinkProgram = _glLinkProgram;
643643
_glLinkProgram = _emscripten_glLinkProgram = (program) => {
644644
if (!(program in zeroUsedPrograms)) {
645-
GLctx.bindAttribLocation(GL.programs[program], 0, 'a_position');
645+
GLctx.bindAttribLocation(GL.programs.get(program), 0, 'a_position');
646646
}
647647
glLinkProgram(program);
648648
};
@@ -747,9 +747,9 @@ var LibraryGLEmulation = {
747747

748748
glDeleteObject__deps: ['glDeleteProgram', 'glDeleteShader'],
749749
glDeleteObject: (id) => {
750-
if (GL.programs[id]) {
750+
if (GL.programs.has(id)) {
751751
_glDeleteProgram(id);
752-
} else if (GL.shaders[id]) {
752+
} else if (GL.shaders.has(id)) {
753753
_glDeleteShader(id);
754754
} else {
755755
err(`WARNING: deleteObject received invalid id: ${id}`);
@@ -759,22 +759,22 @@ var LibraryGLEmulation = {
759759

760760
glGetObjectParameteriv__deps: ['glGetProgramiv', 'glGetShaderiv'],
761761
glGetObjectParameteriv: (id, type, result) => {
762-
if (GL.programs[id]) {
762+
if (GL.programs.has(id)) {
763763
if (type == 0x8B84) { // GL_OBJECT_INFO_LOG_LENGTH_ARB
764-
var log = GLctx.getProgramInfoLog(GL.programs[id]);
764+
var log = GLctx.getProgramInfoLog(GL.programs.get(id));
765765
if (log === null) log = '(unknown error)';
766766
{{{ makeSetValue('result', '0', 'log.length', 'i32') }}};
767767
return;
768768
}
769769
_glGetProgramiv(id, type, result);
770-
} else if (GL.shaders[id]) {
770+
} else if (GL.shaders.has(id)) {
771771
if (type == 0x8B84) { // GL_OBJECT_INFO_LOG_LENGTH_ARB
772-
var log = GLctx.getShaderInfoLog(GL.shaders[id]);
772+
var log = GLctx.getShaderInfoLog(GL.shaders.get(id));
773773
if (log === null) log = '(unknown error)';
774774
{{{ makeSetValue('result', '0', 'log.length', 'i32') }}};
775775
return;
776776
} else if (type == 0x8B88) { // GL_OBJECT_SHADER_SOURCE_LENGTH_ARB
777-
var source = GLctx.getShaderSource(GL.shaders[id]);
777+
var source = GLctx.getShaderSource(GL.shaders.get(id));
778778
if (source === null) return; // If an error occurs, nothing will be written to result
779779
{{{ makeSetValue('result', '0', 'source.length', 'i32') }}};
780780
return;
@@ -788,9 +788,9 @@ var LibraryGLEmulation = {
788788

789789
glGetInfoLog__deps: ['glGetProgramInfoLog', 'glGetShaderInfoLog'],
790790
glGetInfoLog: (id, maxLength, length, infoLog) => {
791-
if (GL.programs[id]) {
791+
if (GL.programs.has(id)) {
792792
_glGetProgramInfoLog(id, maxLength, length, infoLog);
793-
} else if (GL.shaders[id]) {
793+
} else if (GL.shaders.has(id)) {
794794
_glGetShaderInfoLog(id, maxLength, length, infoLog);
795795
} else {
796796
err(`WARNING: glGetInfoLog received invalid id: ${id}`);
@@ -2158,13 +2158,13 @@ var LibraryGLEmulation = {
21582158

21592159
if (useCurrProgram) {
21602160
if (GL.shaderInfos[GL.programShaders[GL.currProgram][0]].type == GLctx.VERTEX_SHADER) {
2161-
this.vertexShader = GL.shaders[GL.programShaders[GL.currProgram][0]];
2162-
this.fragmentShader = GL.shaders[GL.programShaders[GL.currProgram][1]];
2161+
this.vertexShader = GL.shaders.get(GL.programShaders[GL.currProgram][0]);
2162+
this.fragmentShader = GL.shaders.get(GL.programShaders[GL.currProgram][1]);
21632163
} else {
2164-
this.vertexShader = GL.shaders[GL.programShaders[GL.currProgram][1]];
2165-
this.fragmentShader = GL.shaders[GL.programShaders[GL.currProgram][0]];
2164+
this.vertexShader = GL.shaders.get(GL.programShaders[GL.currProgram][1]);
2165+
this.fragmentShader = GL.shaders.get(GL.programShaders[GL.currProgram][0]);
21662166
}
2167-
this.program = GL.programs[GL.currProgram];
2167+
this.program = GL.programs.get(GL.currProgram);
21682168
this.usedTexUnitList = [];
21692169
} else {
21702170
// IMPORTANT NOTE: If you parameterize the shader source based on any runtime values
@@ -3533,30 +3533,25 @@ var LibraryGLEmulation = {
35333533
$emulGlGenVertexArrays__deps: ['$GLEmulation'],
35343534
$emulGlGenVertexArrays: (n, vaos) => {
35353535
for (var i = 0; i < n; i++) {
3536-
var id = GL.getNewId(GLEmulation.vaos);
3537-
GLEmulation.vaos[id] = {
3538-
id,
3536+
var vao = {
35393537
arrayBuffer: 0,
35403538
elementArrayBuffer: 0,
35413539
enabledVertexAttribArrays: {},
35423540
vertexAttribPointers: {},
35433541
enabledClientStates: {},
35443542
};
3545-
{{{ makeSetValue('vaos', 'i*4', 'id', 'i32') }}};
3543+
vao.id = GLEmulation.vaos.allocate(vao);
3544+
{{{ makeSetValue('vaos', 'i*4', 'vao.id', 'i32') }}};
35463545
}
35473546
},
35483547
$emulGlDeleteVertexArrays: (n, vaos) => {
35493548
for (var i = 0; i < n; i++) {
35503549
var id = {{{ makeGetValue('vaos', 'i*4', 'i32') }}};
3551-
GLEmulation.vaos[id] = null;
3550+
GLEmulation.vaos.free(id);
35523551
if (GLEmulation.currentVao && GLEmulation.currentVao.id == id) GLEmulation.currentVao = null;
35533552
}
35543553
},
3555-
$emulGlIsVertexArray: (array) => {
3556-
var vao = GLEmulation.vaos[array];
3557-
if (!vao) return 0;
3558-
return 1;
3559-
},
3554+
$emulGlIsVertexArray: (array) => GLEmulation.vaos.has(array),
35603555
$emulGlBindVertexArray__deps: ['glBindBuffer', 'glEnableVertexAttribArray', 'glVertexAttribPointer', 'glEnableClientState'],
35613556
$emulGlBindVertexArray: (vao) => {
35623557
// undo vao-related things, wipe the slate clean, both for vao of 0 or an actual vao
@@ -3573,7 +3568,7 @@ var LibraryGLEmulation = {
35733568
GLImmediate.modifiedClientAttributes = true;
35743569
if (vao) {
35753570
// replay vao
3576-
var info = GLEmulation.vaos[vao];
3571+
var info = GLEmulation.vaos.get(vao);
35773572
_glBindBuffer(GLctx.ARRAY_BUFFER, info.arrayBuffer); // XXX overwrite current binding?
35783573
_glBindBuffer(GLctx.ELEMENT_ARRAY_BUFFER, info.elementArrayBuffer);
35793574
for (var vaa in info.enabledVertexAttribArrays) {

src/library_html5_webgl.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -425,26 +425,26 @@ var LibraryHtml5WebGL = {
425425

426426
emscripten_webgl_get_program_parameter_d__proxy: 'sync_on_current_webgl_context_thread',
427427
emscripten_webgl_get_program_parameter_d: (program, param) =>
428-
GLctx.getProgramParameter(GL.programs[program], param),
428+
GLctx.getProgramParameter(GL.programs.get(program), param),
429429

430430
emscripten_webgl_get_program_info_log_utf8__proxy: 'sync_on_current_webgl_context_thread',
431431
emscripten_webgl_get_program_info_log_utf8__deps: ['$stringToNewUTF8'],
432432
emscripten_webgl_get_program_info_log_utf8: (program) =>
433-
stringToNewUTF8(GLctx.getProgramInfoLog(GL.programs[program])),
433+
stringToNewUTF8(GLctx.getProgramInfoLog(GL.programs.get(program))),
434434

435435
emscripten_webgl_get_shader_parameter_d__proxy: 'sync_on_current_webgl_context_thread',
436436
emscripten_webgl_get_shader_parameter_d: (shader, param) =>
437-
GLctx.getShaderParameter(GL.shaders[shader], param),
437+
GLctx.getShaderParameter(GL.shaders.get(shader), param),
438438

439439
emscripten_webgl_get_shader_info_log_utf8__proxy: 'sync_on_current_webgl_context_thread',
440440
emscripten_webgl_get_shader_info_log_utf8__deps: ['$stringToNewUTF8'],
441441
emscripten_webgl_get_shader_info_log_utf8: (shader) =>
442-
stringToNewUTF8(GLctx.getShaderInfoLog(GL.shaders[shader])),
442+
stringToNewUTF8(GLctx.getShaderInfoLog(GL.shaders.get(shader))),
443443

444444
emscripten_webgl_get_shader_source_utf8__proxy: 'sync_on_current_webgl_context_thread',
445445
emscripten_webgl_get_shader_source_utf8__deps: ['$stringToNewUTF8'],
446446
emscripten_webgl_get_shader_source_utf8: (shader) =>
447-
stringToNewUTF8(GLctx.getShaderSource(GL.shaders[shader])),
447+
stringToNewUTF8(GLctx.getShaderSource(GL.shaders.get(shader))),
448448

449449
emscripten_webgl_get_vertex_attrib_d__proxy: 'sync_on_current_webgl_context_thread',
450450
emscripten_webgl_get_vertex_attrib_d: (index, param) =>
@@ -462,14 +462,13 @@ var LibraryHtml5WebGL = {
462462
writeGLArray(GLctx.getVertexAttrib(index, param), dst, dstLength, dstType),
463463

464464
emscripten_webgl_get_uniform_d__proxy: 'sync_on_current_webgl_context_thread',
465-
emscripten_webgl_get_uniform_d__deps: ['$webglGetUniformLocation'],
466465
emscripten_webgl_get_uniform_d: (program, location) =>
467-
GLctx.getUniform(GL.programs[program], webglGetUniformLocation(location)),
466+
GLctx.getUniform(GL.programs.get(program), webglGetUniformLocation(location)),
468467

469468
emscripten_webgl_get_uniform_v__proxy: 'sync_on_current_webgl_context_thread',
470469
emscripten_webgl_get_uniform_v__deps: ['$writeGLArray', '$webglGetUniformLocation'],
471470
emscripten_webgl_get_uniform_v: (program, location, dst, dstLength, dstType) =>
472-
writeGLArray(GLctx.getUniform(GL.programs[program], webglGetUniformLocation(location)), dst, dstLength, dstType),
471+
writeGLArray(GLctx.getUniform(GL.programs.get(program), webglGetUniformLocation(location)), dst, dstLength, dstType),
473472

474473
emscripten_webgl_get_parameter_v__proxy: 'sync_on_current_webgl_context_thread',
475474
emscripten_webgl_get_parameter_v__deps: ['$writeGLArray'],

0 commit comments

Comments
 (0)