Fix runtime tile system: gl out of scope in rebuildGroundMosaic
The function used bare 'gl' but it's a module-level closure, so gl wasn't defined inside the .then() callback. Added groundGl module variable, set it in initGroundSystem, used it everywhere in rebuildGroundMosaic instead of bare 'gl'.
This commit is contained in:
1 parent
979134102d
commit
19139b01c7
1 file changed
+14
-12
Vendored
+14
-12
@@ -279,6 +279,7 @@ var GROUND_BASE_Y = 710;
|
|||||||
var groundCanvas = null;
|
var groundCanvas = null;
|
||||||
var groundCtx = null;
|
var groundCtx = null;
|
||||||
var groundTexture = null;
|
var groundTexture = null;
|
||||||
|
var groundGl = null; // WebGL context, set by initGroundSystem
|
||||||
var groundCenterTile = { x: GROUND_BASE_X, y: GROUND_BASE_Y };
|
var groundCenterTile = { x: GROUND_BASE_X, y: GROUND_BASE_Y };
|
||||||
var groundLoadedTiles = {}; // "x_y" -> true
|
var groundLoadedTiles = {}; // "x_y" -> true
|
||||||
var groundLastCheck = 0;
|
var groundLastCheck = 0;
|
||||||
@@ -329,9 +330,9 @@ function rebuildGroundMosaic(centerTileX, centerTileY) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Promise.all(promises).then(function() {
|
return Promise.all(promises).then(function() {
|
||||||
if (groundTexture) {
|
if (groundTexture && groundGl) {
|
||||||
gl.bindTexture(gl.TEXTURE_2D, groundTexture);
|
groundGl.bindTexture(gl.TEXTURE_2D, groundTexture);
|
||||||
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, groundCanvas);
|
groundGl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, groundCanvas);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -355,8 +356,9 @@ function maybeRefetchGround(cameraWorldX, cameraWorldZ, gl) {
|
|||||||
|
|
||||||
// Initialise the ground state. Must be called once with the WebGL
|
// Initialise the ground state. Must be called once with the WebGL
|
||||||
// context before clouds3dRender uses it.
|
// context before clouds3dRender uses it.
|
||||||
function initGroundSystem(gl) {
|
function initGroundSystem(glCtx) {
|
||||||
if (groundCanvas) return; // already initialised
|
if (groundCanvas) return; // already initialised
|
||||||
|
groundGl = glCtx;
|
||||||
groundCanvas = document.createElement('canvas');
|
groundCanvas = document.createElement('canvas');
|
||||||
groundCanvas.width = GROUND_TILE_SIZE * GROUND_MOSAIC_SIZE;
|
groundCanvas.width = GROUND_TILE_SIZE * GROUND_MOSAIC_SIZE;
|
||||||
groundCanvas.height = GROUND_TILE_SIZE * GROUND_MOSAIC_SIZE;
|
groundCanvas.height = GROUND_TILE_SIZE * GROUND_MOSAIC_SIZE;
|
||||||
@@ -365,14 +367,14 @@ function initGroundSystem(gl) {
|
|||||||
// shows the right base colour
|
// shows the right base colour
|
||||||
groundCtx.fillStyle = '#7c9aa1';
|
groundCtx.fillStyle = '#7c9aa1';
|
||||||
groundCtx.fillRect(0, 0, groundCanvas.width, groundCanvas.height);
|
groundCtx.fillRect(0, 0, groundCanvas.width, groundCanvas.height);
|
||||||
groundTexture = gl.createTexture();
|
groundTexture = groundGl.createTexture();
|
||||||
gl.bindTexture(gl.TEXTURE_2D, groundTexture);
|
groundGl.bindTexture(gl.TEXTURE_2D, groundTexture);
|
||||||
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
|
groundGl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
|
||||||
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, groundCanvas);
|
groundGl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, groundCanvas);
|
||||||
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
groundGl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
||||||
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
groundGl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
||||||
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
groundGl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
||||||
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
groundGl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
||||||
// Kick off initial fetch
|
// Kick off initial fetch
|
||||||
rebuildGroundMosaic(GROUND_BASE_X, GROUND_BASE_Y);
|
rebuildGroundMosaic(GROUND_BASE_X, GROUND_BASE_Y);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user