kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
60 lines (56 loc) • 7.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.patchPipelineValidation = patchPipelineValidation;
var _webgl = require("@luma.gl/webgl");
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
/**
* Patch luma.gl 9's WEBGLRenderPipeline to tolerate mixed-sampler-type
* validation errors in _getLinkStatus().
*
* WebGL2's validateProgram checks that sampler uniforms of different types
* (sampler2D, usampler2D, isampler2D) are not assigned to the same texture
* unit. Before any draw call the default texture unit for all samplers is 0,
* so programs that mix sampler types (e.g. raster band data as usampler2D +
* colormap as sampler2D) always fail validation even though the program linked
* successfully and will work correctly once texture units are assigned at draw
* time.
*
* luma.gl calls validateProgram inside _getLinkStatus() immediately after
* linkProgram, before any texture units can be assigned. This patch keeps the
* full validateProgram call but ignores only the known false-positive about
* mixed sampler types. All other validation errors are still reported.
*/
// @ts-ignore WEBGLRenderPipeline resolution depends on moduleResolution setting
var MIXED_SAMPLER_RE = /different type[s]? use the same sampler location/i;
var _patched = false;
function patchPipelineValidation() {
var _WEBGLRenderPipeline$;
if (_patched) return;
_patched = true;
if (!(_webgl.WEBGLRenderPipeline !== null && _webgl.WEBGLRenderPipeline !== void 0 && (_WEBGLRenderPipeline$ = _webgl.WEBGLRenderPipeline.prototype) !== null && _WEBGLRenderPipeline$ !== void 0 && _WEBGLRenderPipeline$._getLinkStatus)) {
return;
}
_webgl.WEBGLRenderPipeline.prototype._getLinkStatus = function () {
var gl = this.device.gl;
var linked = gl.getProgramParameter(this.handle, 0x8b82 /* LINK_STATUS */);
if (!linked) {
this.linkStatus = 'error';
return 'link-error';
}
gl.validateProgram(this.handle);
var validated = gl.getProgramParameter(this.handle, 0x8b83 /* VALIDATE_STATUS */);
if (!validated) {
var infoLog = gl.getProgramInfoLog(this.handle) || '';
if (!MIXED_SAMPLER_RE.test(infoLog)) {
this.linkStatus = 'error';
return 'validation-error';
}
}
this.linkStatus = 'success';
return 'success';
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2ViZ2wiLCJyZXF1aXJlIiwiTUlYRURfU0FNUExFUl9SRSIsIl9wYXRjaGVkIiwicGF0Y2hQaXBlbGluZVZhbGlkYXRpb24iLCJfV0VCR0xSZW5kZXJQaXBlbGluZSQiLCJXRUJHTFJlbmRlclBpcGVsaW5lIiwicHJvdG90eXBlIiwiX2dldExpbmtTdGF0dXMiLCJnbCIsImRldmljZSIsImxpbmtlZCIsImdldFByb2dyYW1QYXJhbWV0ZXIiLCJoYW5kbGUiLCJsaW5rU3RhdHVzIiwidmFsaWRhdGVQcm9ncmFtIiwidmFsaWRhdGVkIiwiaW5mb0xvZyIsImdldFByb2dyYW1JbmZvTG9nIiwidGVzdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYXN0ZXIvcGlwZWxpbmUtdmFsaWRhdGlvbi1wYXRjaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vKipcbiAqIFBhdGNoIGx1bWEuZ2wgOSdzIFdFQkdMUmVuZGVyUGlwZWxpbmUgdG8gdG9sZXJhdGUgbWl4ZWQtc2FtcGxlci10eXBlXG4gKiB2YWxpZGF0aW9uIGVycm9ycyBpbiBfZ2V0TGlua1N0YXR1cygpLlxuICpcbiAqIFdlYkdMMidzIHZhbGlkYXRlUHJvZ3JhbSBjaGVja3MgdGhhdCBzYW1wbGVyIHVuaWZvcm1zIG9mIGRpZmZlcmVudCB0eXBlc1xuICogKHNhbXBsZXIyRCwgdXNhbXBsZXIyRCwgaXNhbXBsZXIyRCkgYXJlIG5vdCBhc3NpZ25lZCB0byB0aGUgc2FtZSB0ZXh0dXJlXG4gKiB1bml0LiBCZWZvcmUgYW55IGRyYXcgY2FsbCB0aGUgZGVmYXVsdCB0ZXh0dXJlIHVuaXQgZm9yIGFsbCBzYW1wbGVycyBpcyAwLFxuICogc28gcHJvZ3JhbXMgdGhhdCBtaXggc2FtcGxlciB0eXBlcyAoZS5nLiByYXN0ZXIgYmFuZCBkYXRhIGFzIHVzYW1wbGVyMkQgK1xuICogY29sb3JtYXAgYXMgc2FtcGxlcjJEKSBhbHdheXMgZmFpbCB2YWxpZGF0aW9uIGV2ZW4gdGhvdWdoIHRoZSBwcm9ncmFtIGxpbmtlZFxuICogc3VjY2Vzc2Z1bGx5IGFuZCB3aWxsIHdvcmsgY29ycmVjdGx5IG9uY2UgdGV4dHVyZSB1bml0cyBhcmUgYXNzaWduZWQgYXQgZHJhd1xuICogdGltZS5cbiAqXG4gKiBsdW1hLmdsIGNhbGxzIHZhbGlkYXRlUHJvZ3JhbSBpbnNpZGUgX2dldExpbmtTdGF0dXMoKSBpbW1lZGlhdGVseSBhZnRlclxuICogbGlua1Byb2dyYW0sIGJlZm9yZSBhbnkgdGV4dHVyZSB1bml0cyBjYW4gYmUgYXNzaWduZWQuIFRoaXMgcGF0Y2gga2VlcHMgdGhlXG4gKiBmdWxsIHZhbGlkYXRlUHJvZ3JhbSBjYWxsIGJ1dCBpZ25vcmVzIG9ubHkgdGhlIGtub3duIGZhbHNlLXBvc2l0aXZlIGFib3V0XG4gKiBtaXhlZCBzYW1wbGVyIHR5cGVzLiBBbGwgb3RoZXIgdmFsaWRhdGlvbiBlcnJvcnMgYXJlIHN0aWxsIHJlcG9ydGVkLlxuICovXG5cbi8vIEB0cy1pZ25vcmUgV0VCR0xSZW5kZXJQaXBlbGluZSByZXNvbHV0aW9uIGRlcGVuZHMgb24gbW9kdWxlUmVzb2x1dGlvbiBzZXR0aW5nXG5pbXBvcnQge1dFQkdMUmVuZGVyUGlwZWxpbmV9IGZyb20gJ0BsdW1hLmdsL3dlYmdsJztcblxuY29uc3QgTUlYRURfU0FNUExFUl9SRSA9IC9kaWZmZXJlbnQgdHlwZVtzXT8gdXNlIHRoZSBzYW1lIHNhbXBsZXIgbG9jYXRpb24vaTtcblxubGV0IF9wYXRjaGVkID0gZmFsc2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFBpcGVsaW5lVmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgaWYgKF9wYXRjaGVkKSByZXR1cm47XG4gIF9wYXRjaGVkID0gdHJ1ZTtcblxuICBpZiAoIVdFQkdMUmVuZGVyUGlwZWxpbmU/LnByb3RvdHlwZT8uX2dldExpbmtTdGF0dXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBXRUJHTFJlbmRlclBpcGVsaW5lLnByb3RvdHlwZS5fZ2V0TGlua1N0YXR1cyA9IGZ1bmN0aW9uIChcbiAgICB0aGlzOiBXRUJHTFJlbmRlclBpcGVsaW5lICYge2xpbmtTdGF0dXM6IHN0cmluZ31cbiAgKSB7XG4gICAgY29uc3Qge2dsfSA9IHRoaXMuZGV2aWNlO1xuICAgIGNvbnN0IGxpbmtlZCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5oYW5kbGUsIDB4OGI4MiAvKiBMSU5LX1NUQVRVUyAqLyk7XG4gICAgaWYgKCFsaW5rZWQpIHtcbiAgICAgIHRoaXMubGlua1N0YXR1cyA9ICdlcnJvcic7XG4gICAgICByZXR1cm4gJ2xpbmstZXJyb3InO1xuICAgIH1cblxuICAgIGdsLnZhbGlkYXRlUHJvZ3JhbSh0aGlzLmhhbmRsZSk7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLmhhbmRsZSwgMHg4YjgzIC8qIFZBTElEQVRFX1NUQVRVUyAqLyk7XG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IGluZm9Mb2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyh0aGlzLmhhbmRsZSkgfHwgJyc7XG4gICAgICBpZiAoIU1JWEVEX1NBTVBMRVJfUkUudGVzdChpbmZvTG9nKSkge1xuICAgICAgICB0aGlzLmxpbmtTdGF0dXMgPSAnZXJyb3InO1xuICAgICAgICByZXR1cm4gJ3ZhbGlkYXRpb24tZXJyb3InO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGlua1N0YXR1cyA9ICdzdWNjZXNzJztcbiAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFzQkEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBdEJBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFHQSxJQUFNQyxnQkFBZ0IsR0FBRyxtREFBbUQ7QUFFNUUsSUFBSUMsUUFBUSxHQUFHLEtBQUs7QUFFYixTQUFTQyx1QkFBdUJBLENBQUEsRUFBUztFQUFBLElBQUFDLHFCQUFBO0VBQzlDLElBQUlGLFFBQVEsRUFBRTtFQUNkQSxRQUFRLEdBQUcsSUFBSTtFQUVmLElBQUksRUFBQ0csMEJBQW1CLGFBQW5CQSwwQkFBbUIsZ0JBQUFELHFCQUFBLEdBQW5CQywwQkFBbUIsQ0FBRUMsU0FBUyxjQUFBRixxQkFBQSxlQUE5QkEscUJBQUEsQ0FBZ0NHLGNBQWMsR0FBRTtJQUNuRDtFQUNGO0VBRUFGLDBCQUFtQixDQUFDQyxTQUFTLENBQUNDLGNBQWMsR0FBRyxZQUU3QztJQUNBLElBQU9DLEVBQUUsR0FBSSxJQUFJLENBQUNDLE1BQU0sQ0FBakJELEVBQUU7SUFDVCxJQUFNRSxNQUFNLEdBQUdGLEVBQUUsQ0FBQ0csbUJBQW1CLENBQUMsSUFBSSxDQUFDQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQzVFLElBQUksQ0FBQ0YsTUFBTSxFQUFFO01BQ1gsSUFBSSxDQUFDRyxVQUFVLEdBQUcsT0FBTztNQUN6QixPQUFPLFlBQVk7SUFDckI7SUFFQUwsRUFBRSxDQUFDTSxlQUFlLENBQUMsSUFBSSxDQUFDRixNQUFNLENBQUM7SUFDL0IsSUFBTUcsU0FBUyxHQUFHUCxFQUFFLENBQUNHLG1CQUFtQixDQUFDLElBQUksQ0FBQ0MsTUFBTSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztJQUNuRixJQUFJLENBQUNHLFNBQVMsRUFBRTtNQUNkLElBQU1DLE9BQU8sR0FBR1IsRUFBRSxDQUFDUyxpQkFBaUIsQ0FBQyxJQUFJLENBQUNMLE1BQU0sQ0FBQyxJQUFJLEVBQUU7TUFDdkQsSUFBSSxDQUFDWCxnQkFBZ0IsQ0FBQ2lCLElBQUksQ0FBQ0YsT0FBTyxDQUFDLEVBQUU7UUFDbkMsSUFBSSxDQUFDSCxVQUFVLEdBQUcsT0FBTztRQUN6QixPQUFPLGtCQUFrQjtNQUMzQjtJQUNGO0lBRUEsSUFBSSxDQUFDQSxVQUFVLEdBQUcsU0FBUztJQUMzQixPQUFPLFNBQVM7RUFDbEIsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119