UNPKG

14.8 kBSource Map (JSON)View Raw
1{"version":3,"file":"ReglModel.js","names":["ReglModel","reGl","options","drawCommand","uniforms","vs","fs","defines","attributes","primitive","count","elements","depth","blend","stencil","cull","instances","scissor","viewport","reglUniforms","extractUniforms","Object","keys","forEach","uniformName","prop","reglAttributes","name","get","defineStmts","generateDefines","drawParams","frag","vert","primitiveMap","undefined","gl","TRIANGLES","initDepthDrawParams","initBlendDrawParams","initStencilDrawParams","initCullDrawParams","reglDrawProps","type","Array","isArray","BYTES_PER_ELEMENT","enable","mask","func","depthFuncMap","LESS","range","equation","color","srcRGB","blendFuncMap","SRC_ALPHA","srcAlpha","dstRGB","ONE_MINUS_SRC_ALPHA","dstAlpha","rgb","blendEquationMap","FUNC_ADD","alpha","cmp","ALWAYS","ref","opFront","fail","KEEP","zfail","zpass","opBack","stencilFuncMap","stencilOpMap","face","BACK","cullFaceMap","map","Number","join"],"sources":["../../src/webgl/ReglModel.ts"],"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 defines,\n attributes,\n uniforms,\n primitive,\n count,\n elements,\n depth,\n blend,\n stencil,\n cull,\n instances,\n scissor,\n // @ts-ignore\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\n const defineStmts = (defines && this.generateDefines(defines)) || '';\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${defineStmts}\n${fs}`,\n uniforms: reglUniforms,\n vert: `\n${defineStmts}\n${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 if (type === 'string') {\n // TODO: image url\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 private generateDefines(defines: Record<string, number | boolean>) {\n return Object.keys(defines)\n .map((name) => `#define ${name} ${Number(defines[name])}`)\n .join('\\n');\n }\n}\n"],"mappings":"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"}
\No newline at end of file