UNPKG

14.4 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/webgl/ReglModel.ts"],"names":["gl","extractUniforms","blendEquationMap","blendFuncMap","cullFaceMap","depthFuncMap","primitiveMap","stencilFuncMap","stencilOpMap","ReglModel","reGl","options","drawCommand","uniforms","vs","fs","attributes","primitive","count","elements","depth","blend","stencil","cull","instances","scissor","viewport","reglUniforms","Object","keys","forEach","uniformName","prop","reglAttributes","name","get","drawParams","frag","vert","undefined","TRIANGLES","initDepthDrawParams","initBlendDrawParams","initStencilDrawParams","initCullDrawParams","reglDrawProps","type","Array","isArray","BYTES_PER_ELEMENT","enable","mask","func","LESS","range","equation","color","srcRGB","SRC_ALPHA","srcAlpha","dstRGB","ONE_MINUS_SRC_ALPHA","dstAlpha","rgb","FUNC_ADD","alpha","cmp","ALWAYS","ref","opFront","fail","KEEP","zfail","zpass","opBack","face","BACK"],"mappings":"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","sourcesContent":["import {\n gl,\n IModel,\n IModelDrawOptions,\n IModelInitializationOptions,\n IUniform,\n} from '@antv/g-webgpu-core';\nimport regl from 'regl';\nimport { extractUniforms } from '../utils/uniform';\nimport {\n blendEquationMap,\n blendFuncMap,\n cullFaceMap,\n depthFuncMap,\n primitiveMap,\n stencilFuncMap,\n stencilOpMap,\n} from './constants';\nimport ReglAttribute from './ReglAttribute';\nimport ReglElements from './ReglElements';\nimport ReglFramebuffer from './ReglFramebuffer';\nimport ReglTexture2D from './ReglTexture2D';\n\n/**\n * adaptor for regl.DrawCommand\n */\nexport default class ReglModel implements IModel {\n private reGl: regl.Regl;\n private drawCommand: regl.DrawCommand;\n private uniforms: {\n [key: string]: IUniform;\n } = {};\n\n constructor(reGl: regl.Regl, options: IModelInitializationOptions) {\n this.reGl = reGl;\n const {\n vs,\n fs,\n attributes,\n uniforms,\n primitive,\n count,\n elements,\n depth,\n blend,\n stencil,\n cull,\n instances,\n scissor,\n viewport,\n } = options;\n const reglUniforms: { [key: string]: IUniform } = {};\n if (uniforms) {\n this.uniforms = extractUniforms(uniforms);\n Object.keys(uniforms).forEach((uniformName) => {\n // use regl prop API\n // @ts-ignore\n reglUniforms[uniformName] = reGl.prop(uniformName);\n });\n }\n\n const reglAttributes: { [key: string]: regl.Attribute } = {};\n Object.keys(attributes).forEach((name: string) => {\n reglAttributes[name] = (attributes[name] as ReglAttribute).get();\n });\n const drawParams: regl.DrawConfig = {\n attributes: reglAttributes,\n frag: `#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n#else\n precision mediump float;\n#endif\n${fs}`,\n uniforms: reglUniforms,\n vert: vs,\n primitive:\n primitiveMap[primitive === undefined ? gl.TRIANGLES : primitive],\n };\n if (instances) {\n drawParams.instances = instances;\n }\n\n // elements 中可能包含 count,此时不应传入\n if (count) {\n drawParams.count = count;\n }\n\n if (elements) {\n drawParams.elements = (elements as ReglElements).get();\n }\n\n if (scissor) {\n drawParams.scissor = scissor;\n }\n\n if (viewport) {\n drawParams.viewport = viewport;\n }\n\n this.initDepthDrawParams({ depth }, drawParams);\n this.initBlendDrawParams({ blend }, drawParams);\n this.initStencilDrawParams({ stencil }, drawParams);\n this.initCullDrawParams({ cull }, drawParams);\n\n this.drawCommand = reGl(drawParams);\n }\n\n public addUniforms(uniforms: { [key: string]: IUniform }) {\n this.uniforms = {\n ...this.uniforms,\n ...extractUniforms(uniforms),\n };\n }\n\n public draw(options: IModelDrawOptions) {\n const uniforms: {\n [key: string]: IUniform;\n } = {\n ...this.uniforms,\n ...extractUniforms(options.uniforms || {}),\n };\n\n const reglDrawProps: {\n [key: string]:\n | regl.Framebuffer\n | regl.Texture2D\n | number\n | number[]\n | boolean;\n } = {};\n\n Object.keys(uniforms).forEach((uniformName: string) => {\n const type = typeof uniforms[uniformName];\n if (\n type === 'boolean' ||\n type === 'number' ||\n Array.isArray(uniforms[uniformName]) ||\n // @ts-ignore\n uniforms[uniformName].BYTES_PER_ELEMENT\n ) {\n reglDrawProps[uniformName] = uniforms[uniformName] as\n | number\n | number[]\n | boolean;\n } else {\n reglDrawProps[uniformName] = (uniforms[uniformName] as\n | ReglFramebuffer\n | ReglTexture2D).get();\n }\n });\n this.drawCommand(reglDrawProps);\n }\n\n public destroy() {\n // don't need do anything since we will call `rendererService.cleanup()`\n }\n\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#depth-buffer\n */\n private initDepthDrawParams(\n { depth }: Pick<IModelInitializationOptions, 'depth'>,\n drawParams: regl.DrawConfig,\n ) {\n if (depth) {\n drawParams.depth = {\n enable: depth.enable === undefined ? true : !!depth.enable,\n mask: depth.mask === undefined ? true : !!depth.mask,\n func: depthFuncMap[depth.func || gl.LESS],\n range: depth.range || [0, 1],\n };\n }\n }\n\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#blending\n */\n private initBlendDrawParams(\n { blend }: Pick<IModelInitializationOptions, 'blend'>,\n drawParams: regl.DrawConfig,\n ) {\n if (blend) {\n const { enable, func, equation, color = [0, 0, 0, 0] } = blend;\n // @ts-ignore\n drawParams.blend = {\n enable: !!enable,\n func: {\n srcRGB: blendFuncMap[(func && func.srcRGB) || gl.SRC_ALPHA],\n srcAlpha: blendFuncMap[(func && func.srcAlpha) || gl.SRC_ALPHA],\n dstRGB: blendFuncMap[(func && func.dstRGB) || gl.ONE_MINUS_SRC_ALPHA],\n dstAlpha:\n blendFuncMap[(func && func.dstAlpha) || gl.ONE_MINUS_SRC_ALPHA],\n },\n equation: {\n rgb: blendEquationMap[(equation && equation.rgb) || gl.FUNC_ADD],\n alpha: blendEquationMap[(equation && equation.alpha) || gl.FUNC_ADD],\n },\n color,\n };\n }\n }\n\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#stencil\n */\n private initStencilDrawParams(\n { stencil }: Pick<IModelInitializationOptions, 'stencil'>,\n drawParams: regl.DrawConfig,\n ) {\n if (stencil) {\n const {\n enable,\n mask = -1,\n func = {\n cmp: gl.ALWAYS,\n ref: 0,\n mask: -1,\n },\n opFront = {\n fail: gl.KEEP,\n zfail: gl.KEEP,\n zpass: gl.KEEP,\n },\n opBack = {\n fail: gl.KEEP,\n zfail: gl.KEEP,\n zpass: gl.KEEP,\n },\n } = stencil;\n drawParams.stencil = {\n enable: !!enable,\n mask,\n func: {\n ...func,\n cmp: stencilFuncMap[func.cmp],\n },\n opFront: {\n fail: stencilOpMap[opFront.fail],\n zfail: stencilOpMap[opFront.zfail],\n zpass: stencilOpMap[opFront.zpass],\n },\n opBack: {\n fail: stencilOpMap[opBack.fail],\n zfail: stencilOpMap[opBack.zfail],\n zpass: stencilOpMap[opBack.zpass],\n },\n };\n }\n }\n\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#culling\n */\n private initCullDrawParams(\n { cull }: Pick<IModelInitializationOptions, 'cull'>,\n drawParams: regl.DrawConfig,\n ) {\n if (cull) {\n const { enable, face = gl.BACK } = cull;\n drawParams.cull = {\n enable: !!enable,\n face: cullFaceMap[face],\n };\n }\n }\n}\n"],"file":"ReglModel.js"}
\No newline at end of file