@luma.gl/gltools
Version:
WebGL2 API Polyfills for WebGL1 WebGLRenderingContext
88 lines (84 loc) • 3.54 kB
JavaScript
import { isWebGL2 } from '../utils/webgl-checks';
const OES_element_index = 'OES_element_index';
const WEBGL_draw_buffers = 'WEBGL_draw_buffers';
const EXT_disjoint_timer_query = 'EXT_disjoint_timer_query';
const EXT_disjoint_timer_query_webgl2 = 'EXT_disjoint_timer_query_webgl2';
const EXT_texture_filter_anisotropic = 'EXT_texture_filter_anisotropic';
const WEBGL_debug_renderer_info = 'WEBGL_debug_renderer_info';
const GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8b8b;
const GL_DONT_CARE = 0x1100;
const GL_GPU_DISJOINT_EXT = 0x8fbb;
const GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84ff;
const GL_UNMASKED_VENDOR_WEBGL = 0x9245;
const GL_UNMASKED_RENDERER_WEBGL = 0x9246;
const getWebGL2ValueOrZero = gl => !isWebGL2(gl) ? 0 : undefined;
const WEBGL_PARAMETERS = {
[]: gl => !isWebGL2(gl) ? 36064 : undefined,
[]: gl => !isWebGL2(gl) ? GL_DONT_CARE : undefined,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: (gl, getParameter) => {
const ext = isWebGL2(gl) ? gl.getExtension(EXT_disjoint_timer_query_webgl2) : gl.getExtension(EXT_disjoint_timer_query);
return ext && ext.GPU_DISJOINT_EXT ? getParameter(ext.GPU_DISJOINT_EXT) : 0;
},
[]: (gl, getParameter) => {
const ext = gl.getExtension(WEBGL_debug_renderer_info);
return getParameter(ext && ext.UNMASKED_VENDOR_WEBGL || 7936);
},
[]: (gl, getParameter) => {
const ext = gl.getExtension(WEBGL_debug_renderer_info);
return getParameter(ext && ext.UNMASKED_RENDERER_WEBGL || 7937);
},
[]: (gl, getParameter) => {
const ext = gl.luma.extensions[EXT_texture_filter_anisotropic];
return ext ? getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 1.0;
},
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: (gl, getParameter) => {
if (!isWebGL2(gl)) {
const ext = gl.getExtension(WEBGL_draw_buffers);
return ext ? getParameter(ext.MAX_COLOR_ATTACHMENTS_WEBGL) : 0;
}
return undefined;
},
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: gl => {
if (!isWebGL2(gl)) {
const ext = gl.getExtension(WEBGL_draw_buffers);
return ext ? ext.MAX_DRAW_BUFFERS_WEBGL : 0;
}
return undefined;
},
[]: gl => gl.getExtension(OES_element_index) ? 2147483647 : 65535,
[]: gl => gl.getExtension(OES_element_index) ? 16777216 : 65535,
[]: gl => 16777216,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero,
[]: getWebGL2ValueOrZero
};
export function getParameterPolyfill(gl, originalGetParameter, pname) {
const limit = WEBGL_PARAMETERS[pname];
const value = typeof limit === 'function' ? limit(gl, originalGetParameter, pname) : limit;
const result = value !== undefined ? value : originalGetParameter(pname);
return result;
}
//# sourceMappingURL=get-parameter-polyfill.js.map