export function getWebGLContext(canvas: HTMLCanvasElement) {
const params = {
alpha: true,
depth: false,
stencil: false,
antialias: false,
preserveDrawingBuffer: false,
};
let gl: WebGL2RenderingContext | WebGLRenderingContext = canvas.getContext(
'webgl2',
params,
) as WebGL2RenderingContext;
const isWebGL2 = !!gl;
if (!isWebGL2) {
gl = canvas.getContext('webgl', params) as WebGLRenderingContext;
}
let halfFloat;
let halfFloatTexType;
if (isWebGL2) {
gl.getExtension('EXT_color_buffer_float');
halfFloatTexType = gl.HALF_FLOAT;
} else {
halfFloat = gl.getExtension('OES_texture_half_float');
halfFloatTexType = halfFloat.HALF_FLOAT_OES;
}
return { gl, halfFloatTexType };
}
请教大佬们 需要如何定义才能使得isWebGL2判断下gl有合理的推断呢。
目前只能想到使用断言,但是这样每个gl就得都弄一下。有什么合理的写法呢?
halfFloatTexType = (gl as WebGL2RenderingContext).HALF_FLOAT;
可以先用一个变量直接断言进行类型收窄,之后用这个变量进行操作