UNPKG

12.3 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/webgl/index.ts"],"names":["gl","injectable","regl","ReglAttribute","ReglBuffer","ReglComputeModel","ReglElements","ReglFramebuffer","ReglModel","ReglTexture2D","WebGLEngine","supportWebGPU","useWGSL","$canvas","inited","createModel","options","createAttribute","createBuffer","createElements","createTexture2D","createFramebuffer","useFramebuffer","framebuffer","drawCommands","get","createComputeModel","context","clear","color","depth","stencil","reglClearOptions","setScissor","scissor","_gl","enable","box","SCISSOR_TEST","x","y","width","height","disable","_refresh","viewport","readPixels","readPixelsOptions","read","getCanvas","getGLContext","destroy","cfg","canvas","Promise","resolve","reject","attributes","alpha","antialias","premultipliedAlpha","pixelRatio","extensions","optionalExtensions","profile","onDone","err","r","limits","readFloat"],"mappings":"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","sourcesContent":["/**\n * render w/ regl\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md\n */\nimport {\n gl,\n GLSLContext,\n IAttribute,\n IAttributeInitializationOptions,\n IBuffer,\n IBufferInitializationOptions,\n IClearOptions,\n IComputeModel,\n IElements,\n IElementsInitializationOptions,\n IFramebuffer,\n IFramebufferInitializationOptions,\n IModel,\n IModelInitializationOptions,\n IReadPixelsOptions,\n IRendererConfig,\n IRendererService,\n ITexture2D,\n ITexture2DInitializationOptions,\n} from '@antv/g-webgpu-core';\nimport { injectable } from 'inversify';\nimport regl from 'regl';\nimport ReglAttribute from './ReglAttribute';\nimport ReglBuffer from './ReglBuffer';\nimport ReglComputeModel from './ReglComputeModel';\nimport ReglElements from './ReglElements';\nimport ReglFramebuffer from './ReglFramebuffer';\nimport ReglModel from './ReglModel';\nimport ReglTexture2D from './ReglTexture2D';\n\n/**\n * regl renderer\n */\n@injectable()\nexport class WebGLEngine implements IRendererService {\n public supportWebGPU = false;\n public useWGSL = false;\n private $canvas: HTMLCanvasElement;\n private gl: regl.Regl;\n private inited: boolean;\n\n public async init(cfg: IRendererConfig): Promise<void> {\n if (this.inited) {\n return;\n }\n this.$canvas = cfg.canvas;\n // tslint:disable-next-line:typedef\n this.gl = await new Promise((resolve, reject) => {\n regl({\n canvas: cfg.canvas,\n attributes: {\n alpha: true,\n // use TAA instead of MSAA\n // @see https://www.khronos.org/registry/webgl/specs/1.0/#5.2.1\n antialias: cfg.antialias,\n premultipliedAlpha: true,\n // preserveDrawingBuffer: false,\n },\n pixelRatio: 1,\n // TODO: use extensions\n extensions: [\n 'OES_element_index_uint',\n 'OES_texture_float',\n 'OES_standard_derivatives', // wireframe\n 'angle_instanced_arrays', // VSM shadow map\n ],\n optionalExtensions: [\n 'EXT_texture_filter_anisotropic',\n 'EXT_blend_minmax',\n 'WEBGL_depth_texture',\n ],\n profile: true,\n onDone: (err: Error | null, r?: regl.Regl | undefined): void => {\n if (err || !r) {\n reject(err);\n }\n // @ts-ignore\n resolve(r);\n },\n });\n });\n this.inited = true;\n }\n\n public isFloatSupported() {\n // @see https://github.com/antvis/GWebGPUEngine/issues/26\n // @ts-ignore\n return this.gl.limits.readFloat;\n }\n\n public createModel = async (\n options: IModelInitializationOptions,\n ): Promise<IModel> => new ReglModel(this.gl, options);\n\n public createAttribute = (\n options: IAttributeInitializationOptions,\n ): IAttribute => new ReglAttribute(this.gl, options);\n\n public createBuffer = (options: IBufferInitializationOptions): IBuffer =>\n new ReglBuffer(this.gl, options);\n\n public createElements = (\n options: IElementsInitializationOptions,\n ): IElements => new ReglElements(this.gl, options);\n\n public createTexture2D = (\n options: ITexture2DInitializationOptions,\n ): ITexture2D => new ReglTexture2D(this.gl, options);\n\n public createFramebuffer = (options: IFramebufferInitializationOptions) =>\n new ReglFramebuffer(this.gl, options);\n\n public useFramebuffer = (\n framebuffer: IFramebuffer | null,\n drawCommands: () => void,\n ) => {\n this.gl({\n framebuffer: framebuffer ? (framebuffer as ReglFramebuffer).get() : null,\n })(drawCommands);\n };\n\n public createComputeModel = async (\n context: GLSLContext,\n ): Promise<IComputeModel> => {\n return new ReglComputeModel(this.gl, context);\n };\n\n public clear = (options: IClearOptions) => {\n // @see https://github.com/regl-project/regl/blob/gh-pages/API.md#clear-the-draw-buffer\n const { color, depth, stencil, framebuffer = null } = options;\n const reglClearOptions: regl.ClearOptions = {\n color,\n depth,\n stencil,\n };\n\n reglClearOptions.framebuffer =\n framebuffer === null\n ? framebuffer\n : (framebuffer as ReglFramebuffer).get();\n\n this.gl.clear(reglClearOptions);\n };\n\n public setScissor = (\n scissor: Partial<{\n enable: boolean;\n box: { x: number; y: number; width: number; height: number };\n }>,\n ) => {\n if (this.gl && this.gl._gl) {\n // https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/scissor\n if (scissor.enable && scissor.box) {\n // console.log(scissor.box);\n this.gl._gl.enable(gl.SCISSOR_TEST);\n this.gl._gl.scissor(\n scissor.box.x,\n scissor.box.y,\n scissor.box.width,\n scissor.box.height,\n );\n } else {\n this.gl._gl.disable(gl.SCISSOR_TEST);\n }\n this.gl._refresh();\n }\n };\n\n public viewport = ({\n x,\n y,\n width,\n height,\n }: {\n x: number;\n y: number;\n width: number;\n height: number;\n }) => {\n if (this.gl && this.gl._gl) {\n // use WebGL context directly\n // @see https://github.com/regl-project/regl/blob/gh-pages/API.md#unsafe-escape-hatch\n this.gl._gl.viewport(x, y, width, height);\n this.gl._refresh();\n }\n };\n\n public readPixels = (options: IReadPixelsOptions) => {\n const { framebuffer, x, y, width, height } = options;\n const readPixelsOptions: regl.ReadOptions = {\n x,\n y,\n width,\n height,\n };\n if (framebuffer) {\n readPixelsOptions.framebuffer = (framebuffer as ReglFramebuffer).get();\n }\n return this.gl.read(readPixelsOptions);\n };\n\n public getCanvas = () => {\n return this.$canvas;\n };\n\n public getGLContext = () => {\n return this.gl._gl;\n };\n\n public destroy = () => {\n if (this.gl) {\n // @see https://github.com/regl-project/regl/blob/gh-pages/API.md#clean-up\n this.gl.destroy();\n this.inited = false;\n }\n };\n\n public beginFrame() {\n //\n }\n\n public endFrame() {\n //\n }\n}\n"],"file":"index.js"}
\No newline at end of file