@antv/l7-renderer 2.8.32 → 2.8.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { IAttribute, IModel, IModelDrawOptions, IModelInitializationOptions, IUniform } from '@antv/l7-core';
1
+ import { IAttribute, IElements, IModel, IModelDrawOptions, IModelInitializationOptions, IUniform } from '@antv/l7-core';
2
2
  import regl from 'l7regl';
3
3
  /**
4
4
  * adaptor for regl.DrawCommand
@@ -12,6 +12,9 @@ export default class ReglModel implements IModel {
12
12
  private options;
13
13
  private uniforms;
14
14
  constructor(reGl: regl.Regl, options: IModelInitializationOptions);
15
+ updateAttributesAndElements(attributes: {
16
+ [key: string]: IAttribute;
17
+ }, elements: IElements): void;
15
18
  updateAttributes(attributes: {
16
19
  [key: string]: IAttribute;
17
20
  }): void;
@@ -103,6 +103,24 @@ var ReglModel = function () {
103
103
  }
104
104
 
105
105
  _createClass(ReglModel, [{
106
+ key: "updateAttributesAndElements",
107
+ value: function updateAttributesAndElements(attributes, elements) {
108
+ var reglAttributes = {};
109
+ Object.keys(attributes).forEach(function (name) {
110
+ reglAttributes[name] = attributes[name].get();
111
+ });
112
+ this.drawParams.attributes = reglAttributes;
113
+ this.drawParams.elements = elements.get();
114
+ this.drawCommand = this.reGl(this.drawParams);
115
+
116
+ var pickDrawParams = _cloneDeep(this.drawParams);
117
+
118
+ pickDrawParams.blend = _objectSpread(_objectSpread({}, pickDrawParams.blend), {}, {
119
+ enable: false
120
+ });
121
+ this.drawPickCommand = this.reGl(pickDrawParams);
122
+ }
123
+ }, {
106
124
  key: "updateAttributes",
107
125
  value: function updateAttributes(attributes) {
108
126
  var reglAttributes = {};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/regl/ReglModel.ts"],"names":["gl","blendEquationMap","blendFuncMap","cullFaceMap","depthFuncMap","primitiveMap","stencilFuncMap","stencilOpMap","ReglModel","reGl","options","vs","fs","attributes","uniforms","primitive","count","elements","depth","blend","stencil","cull","instances","reglUniforms","extractUniforms","Object","keys","forEach","uniformName","prop","reglAttributes","name","get","drawParams","frag","vert","undefined","TRIANGLES","initDepthDrawParams","initBlendDrawParams","initStencilDrawParams","initCullDrawParams","drawCommand","pickDrawParams","enable","drawPickCommand","pick","length","reglDrawProps","type","Array","isArray","BYTES_PER_ELEMENT","destroy","values","attr","destroyed","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","extractedUniforms","extractUniformsRecursively","uniformValue","prefix","childName","child","idx"],"mappings":"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","sourcesContent":["import {\n gl,\n IAttribute,\n IModel,\n IModelDrawOptions,\n IModelInitializationOptions,\n IUniform,\n} from '@antv/l7-core';\nimport regl from 'l7regl';\nimport { cloneDeep, extend, isPlainObject, isTypedArray } from 'lodash';\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 destroyed: boolean = false;\n private drawCommand: regl.DrawCommand;\n private drawPickCommand: regl.DrawCommand;\n private drawParams: regl.DrawConfig;\n private options: IModelInitializationOptions;\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 } = options;\n const reglUniforms: { [key: string]: IUniform } = {};\n this.options = options;\n if (uniforms) {\n this.uniforms = this.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: fs,\n uniforms: reglUniforms,\n vert: vs,\n blend: {},\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 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 const pickDrawParams = cloneDeep(drawParams);\n\n pickDrawParams.blend = {\n ...pickDrawParams.blend,\n enable: false,\n };\n\n this.drawPickCommand = reGl(pickDrawParams);\n this.drawParams = drawParams;\n }\n\n public updateAttributes(attributes: { [key: string]: IAttribute }) {\n const reglAttributes: { [key: string]: regl.Attribute } = {};\n Object.keys(attributes).forEach((name: string) => {\n reglAttributes[name] = (attributes[name] as ReglAttribute).get();\n });\n this.drawParams.attributes = reglAttributes;\n this.drawCommand = this.reGl(this.drawParams);\n\n const pickDrawParams = cloneDeep(this.drawParams);\n\n pickDrawParams.blend = {\n ...pickDrawParams.blend,\n enable: false,\n };\n\n this.drawPickCommand = this.reGl(pickDrawParams);\n }\n\n public addUniforms(uniforms: { [key: string]: IUniform }) {\n this.uniforms = {\n ...this.uniforms,\n ...this.extractUniforms(uniforms),\n };\n }\n\n public draw(options: IModelDrawOptions, pick?: boolean) {\n // console.log('options', this.drawParams)\n if (\n this.drawParams.attributes &&\n Object.keys(this.drawParams.attributes).length === 0\n ) {\n return;\n }\n const uniforms: {\n [key: string]: IUniform;\n } = {\n ...this.uniforms,\n ...this.extractUniforms(options.uniforms || {}),\n };\n const reglDrawProps: {\n [key: string]:\n | regl.Framebuffer\n | regl.Texture2D\n | number\n | number[]\n | boolean;\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 // TODO: 在进行拾取操作的绘制中,不应该使用叠加模式 - picking 根据拾取的颜色作为判断的输入,而叠加模式会产生新的,在 id 序列中不存在的颜色\n if (!pick) {\n this.drawCommand(reglDrawProps);\n } else {\n this.drawPickCommand(reglDrawProps);\n }\n // this.drawCommand(reglDrawProps);\n // this.drawPickCommand(reglDrawProps);\n }\n\n public destroy() {\n // @ts-ignore\n this.drawParams.elements.destroy();\n if (this.options.attributes) {\n Object.values(this.options.attributes).forEach((attr: any) => {\n // @ts-ignore\n (attr as ReglAttribute).destroy();\n });\n }\n this.destroyed = true;\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 /**\n * 考虑结构体命名, eg:\n * a: { b: 1 } -> 'a.b'\n * a: [ { b: 1 } ] -> 'a[0].b'\n */\n private extractUniforms(uniforms: {\n [key: string]: IUniform;\n }): {\n [key: string]: IUniform;\n } {\n const extractedUniforms = {};\n Object.keys(uniforms).forEach((uniformName) => {\n this.extractUniformsRecursively(\n uniformName,\n uniforms[uniformName],\n extractedUniforms,\n '',\n );\n });\n\n return extractedUniforms;\n }\n\n private extractUniformsRecursively(\n uniformName: string,\n uniformValue: IUniform,\n uniforms: {\n [key: string]: IUniform;\n },\n prefix: string,\n ) {\n if (\n uniformValue === null ||\n typeof uniformValue === 'number' || // u_A: 1\n typeof uniformValue === 'boolean' || // u_A: false\n (Array.isArray(uniformValue) && typeof uniformValue[0] === 'number') || // u_A: [1, 2, 3]\n isTypedArray(uniformValue) || // u_A: Float32Array\n // @ts-ignore\n uniformValue === '' ||\n 'resize' in uniformValue\n ) {\n uniforms[`${prefix && prefix + '.'}${uniformName}`] = uniformValue;\n return;\n }\n\n // u_Struct.a.b.c\n if (isPlainObject(uniformValue)) {\n Object.keys(uniformValue).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n uniformValue[childName],\n uniforms,\n `${prefix && prefix + '.'}${uniformName}`,\n );\n });\n }\n\n // u_Struct[0].a\n if (Array.isArray(uniformValue)) {\n uniformValue.forEach((child, idx) => {\n Object.keys(child).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n child[childName],\n uniforms,\n `${prefix && prefix + '.'}${uniformName}[${idx}]`,\n );\n });\n });\n }\n }\n}\n"],"file":"ReglModel.js"}
1
+ {"version":3,"sources":["../../src/regl/ReglModel.ts"],"names":["gl","blendEquationMap","blendFuncMap","cullFaceMap","depthFuncMap","primitiveMap","stencilFuncMap","stencilOpMap","ReglModel","reGl","options","vs","fs","attributes","uniforms","primitive","count","elements","depth","blend","stencil","cull","instances","reglUniforms","extractUniforms","Object","keys","forEach","uniformName","prop","reglAttributes","name","get","drawParams","frag","vert","undefined","TRIANGLES","initDepthDrawParams","initBlendDrawParams","initStencilDrawParams","initCullDrawParams","drawCommand","pickDrawParams","enable","drawPickCommand","pick","length","reglDrawProps","type","Array","isArray","BYTES_PER_ELEMENT","destroy","values","attr","destroyed","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","extractedUniforms","extractUniformsRecursively","uniformValue","prefix","childName","child","idx"],"mappings":"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","sourcesContent":["import {\n gl,\n IAttribute,\n IElements,\n IModel,\n IModelDrawOptions,\n IModelInitializationOptions,\n IUniform,\n} from '@antv/l7-core';\nimport regl from 'l7regl';\nimport { cloneDeep, extend, isPlainObject, isTypedArray } from 'lodash';\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 destroyed: boolean = false;\n private drawCommand: regl.DrawCommand;\n private drawPickCommand: regl.DrawCommand;\n private drawParams: regl.DrawConfig;\n private options: IModelInitializationOptions;\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 } = options;\n const reglUniforms: { [key: string]: IUniform } = {};\n this.options = options;\n if (uniforms) {\n this.uniforms = this.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: fs,\n uniforms: reglUniforms,\n vert: vs,\n blend: {},\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 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 const pickDrawParams = cloneDeep(drawParams);\n\n pickDrawParams.blend = {\n ...pickDrawParams.blend,\n enable: false,\n };\n\n this.drawPickCommand = reGl(pickDrawParams);\n this.drawParams = drawParams;\n }\n\n public updateAttributesAndElements(\n attributes: { [key: string]: IAttribute },\n elements: IElements,\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 this.drawParams.attributes = reglAttributes;\n this.drawParams.elements = (elements as ReglElements).get();\n\n this.drawCommand = this.reGl(this.drawParams);\n const pickDrawParams = cloneDeep(this.drawParams);\n pickDrawParams.blend = {\n ...pickDrawParams.blend,\n enable: false,\n };\n\n this.drawPickCommand = this.reGl(pickDrawParams);\n }\n\n public updateAttributes(attributes: { [key: string]: IAttribute }) {\n const reglAttributes: { [key: string]: regl.Attribute } = {};\n Object.keys(attributes).forEach((name: string) => {\n reglAttributes[name] = (attributes[name] as ReglAttribute).get();\n });\n this.drawParams.attributes = reglAttributes;\n this.drawCommand = this.reGl(this.drawParams);\n\n const pickDrawParams = cloneDeep(this.drawParams);\n\n pickDrawParams.blend = {\n ...pickDrawParams.blend,\n enable: false,\n };\n\n this.drawPickCommand = this.reGl(pickDrawParams);\n }\n\n public addUniforms(uniforms: { [key: string]: IUniform }) {\n this.uniforms = {\n ...this.uniforms,\n ...this.extractUniforms(uniforms),\n };\n }\n\n public draw(options: IModelDrawOptions, pick?: boolean) {\n // console.log('options', this.drawParams)\n if (\n this.drawParams.attributes &&\n Object.keys(this.drawParams.attributes).length === 0\n ) {\n return;\n }\n const uniforms: {\n [key: string]: IUniform;\n } = {\n ...this.uniforms,\n ...this.extractUniforms(options.uniforms || {}),\n };\n const reglDrawProps: {\n [key: string]:\n | regl.Framebuffer\n | regl.Texture2D\n | number\n | number[]\n | boolean;\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 // TODO: 在进行拾取操作的绘制中,不应该使用叠加模式 - picking 根据拾取的颜色作为判断的输入,而叠加模式会产生新的,在 id 序列中不存在的颜色\n if (!pick) {\n this.drawCommand(reglDrawProps);\n } else {\n this.drawPickCommand(reglDrawProps);\n }\n // this.drawCommand(reglDrawProps);\n // this.drawPickCommand(reglDrawProps);\n }\n\n public destroy() {\n // @ts-ignore\n this.drawParams.elements.destroy();\n if (this.options.attributes) {\n Object.values(this.options.attributes).forEach((attr: any) => {\n // @ts-ignore\n (attr as ReglAttribute).destroy();\n });\n }\n this.destroyed = true;\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 /**\n * 考虑结构体命名, eg:\n * a: { b: 1 } -> 'a.b'\n * a: [ { b: 1 } ] -> 'a[0].b'\n */\n private extractUniforms(uniforms: {\n [key: string]: IUniform;\n }): {\n [key: string]: IUniform;\n } {\n const extractedUniforms = {};\n Object.keys(uniforms).forEach((uniformName) => {\n this.extractUniformsRecursively(\n uniformName,\n uniforms[uniformName],\n extractedUniforms,\n '',\n );\n });\n\n return extractedUniforms;\n }\n\n private extractUniformsRecursively(\n uniformName: string,\n uniformValue: IUniform,\n uniforms: {\n [key: string]: IUniform;\n },\n prefix: string,\n ) {\n if (\n uniformValue === null ||\n typeof uniformValue === 'number' || // u_A: 1\n typeof uniformValue === 'boolean' || // u_A: false\n (Array.isArray(uniformValue) && typeof uniformValue[0] === 'number') || // u_A: [1, 2, 3]\n isTypedArray(uniformValue) || // u_A: Float32Array\n // @ts-ignore\n uniformValue === '' ||\n 'resize' in uniformValue\n ) {\n uniforms[`${prefix && prefix + '.'}${uniformName}`] = uniformValue;\n return;\n }\n\n // u_Struct.a.b.c\n if (isPlainObject(uniformValue)) {\n Object.keys(uniformValue).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n uniformValue[childName],\n uniforms,\n `${prefix && prefix + '.'}${uniformName}`,\n );\n });\n }\n\n // u_Struct[0].a\n if (Array.isArray(uniformValue)) {\n uniformValue.forEach((child, idx) => {\n Object.keys(child).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n child[childName],\n uniforms,\n `${prefix && prefix + '.'}${uniformName}[${idx}]`,\n );\n });\n });\n }\n }\n}\n"],"file":"ReglModel.js"}
@@ -109,6 +109,22 @@ var ReglModel = function () {
109
109
  }
110
110
 
111
111
  (0, _createClass2.default)(ReglModel, [{
112
+ key: "updateAttributesAndElements",
113
+ value: function updateAttributesAndElements(attributes, elements) {
114
+ var reglAttributes = {};
115
+ Object.keys(attributes).forEach(function (name) {
116
+ reglAttributes[name] = attributes[name].get();
117
+ });
118
+ this.drawParams.attributes = reglAttributes;
119
+ this.drawParams.elements = elements.get();
120
+ this.drawCommand = this.reGl(this.drawParams);
121
+ var pickDrawParams = (0, _cloneDeep2.default)(this.drawParams);
122
+ pickDrawParams.blend = _objectSpread(_objectSpread({}, pickDrawParams.blend), {}, {
123
+ enable: false
124
+ });
125
+ this.drawPickCommand = this.reGl(pickDrawParams);
126
+ }
127
+ }, {
112
128
  key: "updateAttributes",
113
129
  value: function updateAttributes(attributes) {
114
130
  var reglAttributes = {};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/regl/ReglModel.ts"],"names":["ReglModel","reGl","options","vs","fs","attributes","uniforms","primitive","count","elements","depth","blend","stencil","cull","instances","reglUniforms","extractUniforms","Object","keys","forEach","uniformName","prop","reglAttributes","name","get","drawParams","frag","vert","primitiveMap","undefined","gl","TRIANGLES","initDepthDrawParams","initBlendDrawParams","initStencilDrawParams","initCullDrawParams","drawCommand","pickDrawParams","enable","drawPickCommand","pick","length","reglDrawProps","type","Array","isArray","BYTES_PER_ELEMENT","destroy","values","attr","destroyed","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","extractedUniforms","extractUniformsRecursively","uniformValue","prefix","childName","child","idx"],"mappings":"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","sourcesContent":["import {\n gl,\n IAttribute,\n IModel,\n IModelDrawOptions,\n IModelInitializationOptions,\n IUniform,\n} from '@antv/l7-core';\nimport regl from 'l7regl';\nimport { cloneDeep, extend, isPlainObject, isTypedArray } from 'lodash';\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 destroyed: boolean = false;\n private drawCommand: regl.DrawCommand;\n private drawPickCommand: regl.DrawCommand;\n private drawParams: regl.DrawConfig;\n private options: IModelInitializationOptions;\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 } = options;\n const reglUniforms: { [key: string]: IUniform } = {};\n this.options = options;\n if (uniforms) {\n this.uniforms = this.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: fs,\n uniforms: reglUniforms,\n vert: vs,\n blend: {},\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 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 const pickDrawParams = cloneDeep(drawParams);\n\n pickDrawParams.blend = {\n ...pickDrawParams.blend,\n enable: false,\n };\n\n this.drawPickCommand = reGl(pickDrawParams);\n this.drawParams = drawParams;\n }\n\n public updateAttributes(attributes: { [key: string]: IAttribute }) {\n const reglAttributes: { [key: string]: regl.Attribute } = {};\n Object.keys(attributes).forEach((name: string) => {\n reglAttributes[name] = (attributes[name] as ReglAttribute).get();\n });\n this.drawParams.attributes = reglAttributes;\n this.drawCommand = this.reGl(this.drawParams);\n\n const pickDrawParams = cloneDeep(this.drawParams);\n\n pickDrawParams.blend = {\n ...pickDrawParams.blend,\n enable: false,\n };\n\n this.drawPickCommand = this.reGl(pickDrawParams);\n }\n\n public addUniforms(uniforms: { [key: string]: IUniform }) {\n this.uniforms = {\n ...this.uniforms,\n ...this.extractUniforms(uniforms),\n };\n }\n\n public draw(options: IModelDrawOptions, pick?: boolean) {\n // console.log('options', this.drawParams)\n if (\n this.drawParams.attributes &&\n Object.keys(this.drawParams.attributes).length === 0\n ) {\n return;\n }\n const uniforms: {\n [key: string]: IUniform;\n } = {\n ...this.uniforms,\n ...this.extractUniforms(options.uniforms || {}),\n };\n const reglDrawProps: {\n [key: string]:\n | regl.Framebuffer\n | regl.Texture2D\n | number\n | number[]\n | boolean;\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 // TODO: 在进行拾取操作的绘制中,不应该使用叠加模式 - picking 根据拾取的颜色作为判断的输入,而叠加模式会产生新的,在 id 序列中不存在的颜色\n if (!pick) {\n this.drawCommand(reglDrawProps);\n } else {\n this.drawPickCommand(reglDrawProps);\n }\n // this.drawCommand(reglDrawProps);\n // this.drawPickCommand(reglDrawProps);\n }\n\n public destroy() {\n // @ts-ignore\n this.drawParams.elements.destroy();\n if (this.options.attributes) {\n Object.values(this.options.attributes).forEach((attr: any) => {\n // @ts-ignore\n (attr as ReglAttribute).destroy();\n });\n }\n this.destroyed = true;\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 /**\n * 考虑结构体命名, eg:\n * a: { b: 1 } -> 'a.b'\n * a: [ { b: 1 } ] -> 'a[0].b'\n */\n private extractUniforms(uniforms: {\n [key: string]: IUniform;\n }): {\n [key: string]: IUniform;\n } {\n const extractedUniforms = {};\n Object.keys(uniforms).forEach((uniformName) => {\n this.extractUniformsRecursively(\n uniformName,\n uniforms[uniformName],\n extractedUniforms,\n '',\n );\n });\n\n return extractedUniforms;\n }\n\n private extractUniformsRecursively(\n uniformName: string,\n uniformValue: IUniform,\n uniforms: {\n [key: string]: IUniform;\n },\n prefix: string,\n ) {\n if (\n uniformValue === null ||\n typeof uniformValue === 'number' || // u_A: 1\n typeof uniformValue === 'boolean' || // u_A: false\n (Array.isArray(uniformValue) && typeof uniformValue[0] === 'number') || // u_A: [1, 2, 3]\n isTypedArray(uniformValue) || // u_A: Float32Array\n // @ts-ignore\n uniformValue === '' ||\n 'resize' in uniformValue\n ) {\n uniforms[`${prefix && prefix + '.'}${uniformName}`] = uniformValue;\n return;\n }\n\n // u_Struct.a.b.c\n if (isPlainObject(uniformValue)) {\n Object.keys(uniformValue).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n uniformValue[childName],\n uniforms,\n `${prefix && prefix + '.'}${uniformName}`,\n );\n });\n }\n\n // u_Struct[0].a\n if (Array.isArray(uniformValue)) {\n uniformValue.forEach((child, idx) => {\n Object.keys(child).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n child[childName],\n uniforms,\n `${prefix && prefix + '.'}${uniformName}[${idx}]`,\n );\n });\n });\n }\n }\n}\n"],"file":"ReglModel.js"}
1
+ {"version":3,"sources":["../../src/regl/ReglModel.ts"],"names":["ReglModel","reGl","options","vs","fs","attributes","uniforms","primitive","count","elements","depth","blend","stencil","cull","instances","reglUniforms","extractUniforms","Object","keys","forEach","uniformName","prop","reglAttributes","name","get","drawParams","frag","vert","primitiveMap","undefined","gl","TRIANGLES","initDepthDrawParams","initBlendDrawParams","initStencilDrawParams","initCullDrawParams","drawCommand","pickDrawParams","enable","drawPickCommand","pick","length","reglDrawProps","type","Array","isArray","BYTES_PER_ELEMENT","destroy","values","attr","destroyed","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","extractedUniforms","extractUniformsRecursively","uniformValue","prefix","childName","child","idx"],"mappings":"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","sourcesContent":["import {\n gl,\n IAttribute,\n IElements,\n IModel,\n IModelDrawOptions,\n IModelInitializationOptions,\n IUniform,\n} from '@antv/l7-core';\nimport regl from 'l7regl';\nimport { cloneDeep, extend, isPlainObject, isTypedArray } from 'lodash';\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 destroyed: boolean = false;\n private drawCommand: regl.DrawCommand;\n private drawPickCommand: regl.DrawCommand;\n private drawParams: regl.DrawConfig;\n private options: IModelInitializationOptions;\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 } = options;\n const reglUniforms: { [key: string]: IUniform } = {};\n this.options = options;\n if (uniforms) {\n this.uniforms = this.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: fs,\n uniforms: reglUniforms,\n vert: vs,\n blend: {},\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 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 const pickDrawParams = cloneDeep(drawParams);\n\n pickDrawParams.blend = {\n ...pickDrawParams.blend,\n enable: false,\n };\n\n this.drawPickCommand = reGl(pickDrawParams);\n this.drawParams = drawParams;\n }\n\n public updateAttributesAndElements(\n attributes: { [key: string]: IAttribute },\n elements: IElements,\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 this.drawParams.attributes = reglAttributes;\n this.drawParams.elements = (elements as ReglElements).get();\n\n this.drawCommand = this.reGl(this.drawParams);\n const pickDrawParams = cloneDeep(this.drawParams);\n pickDrawParams.blend = {\n ...pickDrawParams.blend,\n enable: false,\n };\n\n this.drawPickCommand = this.reGl(pickDrawParams);\n }\n\n public updateAttributes(attributes: { [key: string]: IAttribute }) {\n const reglAttributes: { [key: string]: regl.Attribute } = {};\n Object.keys(attributes).forEach((name: string) => {\n reglAttributes[name] = (attributes[name] as ReglAttribute).get();\n });\n this.drawParams.attributes = reglAttributes;\n this.drawCommand = this.reGl(this.drawParams);\n\n const pickDrawParams = cloneDeep(this.drawParams);\n\n pickDrawParams.blend = {\n ...pickDrawParams.blend,\n enable: false,\n };\n\n this.drawPickCommand = this.reGl(pickDrawParams);\n }\n\n public addUniforms(uniforms: { [key: string]: IUniform }) {\n this.uniforms = {\n ...this.uniforms,\n ...this.extractUniforms(uniforms),\n };\n }\n\n public draw(options: IModelDrawOptions, pick?: boolean) {\n // console.log('options', this.drawParams)\n if (\n this.drawParams.attributes &&\n Object.keys(this.drawParams.attributes).length === 0\n ) {\n return;\n }\n const uniforms: {\n [key: string]: IUniform;\n } = {\n ...this.uniforms,\n ...this.extractUniforms(options.uniforms || {}),\n };\n const reglDrawProps: {\n [key: string]:\n | regl.Framebuffer\n | regl.Texture2D\n | number\n | number[]\n | boolean;\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 // TODO: 在进行拾取操作的绘制中,不应该使用叠加模式 - picking 根据拾取的颜色作为判断的输入,而叠加模式会产生新的,在 id 序列中不存在的颜色\n if (!pick) {\n this.drawCommand(reglDrawProps);\n } else {\n this.drawPickCommand(reglDrawProps);\n }\n // this.drawCommand(reglDrawProps);\n // this.drawPickCommand(reglDrawProps);\n }\n\n public destroy() {\n // @ts-ignore\n this.drawParams.elements.destroy();\n if (this.options.attributes) {\n Object.values(this.options.attributes).forEach((attr: any) => {\n // @ts-ignore\n (attr as ReglAttribute).destroy();\n });\n }\n this.destroyed = true;\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 /**\n * 考虑结构体命名, eg:\n * a: { b: 1 } -> 'a.b'\n * a: [ { b: 1 } ] -> 'a[0].b'\n */\n private extractUniforms(uniforms: {\n [key: string]: IUniform;\n }): {\n [key: string]: IUniform;\n } {\n const extractedUniforms = {};\n Object.keys(uniforms).forEach((uniformName) => {\n this.extractUniformsRecursively(\n uniformName,\n uniforms[uniformName],\n extractedUniforms,\n '',\n );\n });\n\n return extractedUniforms;\n }\n\n private extractUniformsRecursively(\n uniformName: string,\n uniformValue: IUniform,\n uniforms: {\n [key: string]: IUniform;\n },\n prefix: string,\n ) {\n if (\n uniformValue === null ||\n typeof uniformValue === 'number' || // u_A: 1\n typeof uniformValue === 'boolean' || // u_A: false\n (Array.isArray(uniformValue) && typeof uniformValue[0] === 'number') || // u_A: [1, 2, 3]\n isTypedArray(uniformValue) || // u_A: Float32Array\n // @ts-ignore\n uniformValue === '' ||\n 'resize' in uniformValue\n ) {\n uniforms[`${prefix && prefix + '.'}${uniformName}`] = uniformValue;\n return;\n }\n\n // u_Struct.a.b.c\n if (isPlainObject(uniformValue)) {\n Object.keys(uniformValue).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n uniformValue[childName],\n uniforms,\n `${prefix && prefix + '.'}${uniformName}`,\n );\n });\n }\n\n // u_Struct[0].a\n if (Array.isArray(uniformValue)) {\n uniformValue.forEach((child, idx) => {\n Object.keys(child).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n child[childName],\n uniforms,\n `${prefix && prefix + '.'}${uniformName}[${idx}]`,\n );\n });\n });\n }\n }\n}\n"],"file":"ReglModel.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antv/l7-renderer",
3
- "version": "2.8.32",
3
+ "version": "2.8.35",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -26,14 +26,14 @@
26
26
  "gl": "^4.4.0"
27
27
  },
28
28
  "dependencies": {
29
- "@antv/l7-core": "^2.8.32",
29
+ "@antv/l7-core": "^2.8.35",
30
30
  "@babel/runtime": "^7.7.7",
31
31
  "inversify": "^5.0.1",
32
32
  "l7regl": "^0.0.20",
33
33
  "lodash": "^4.17.15",
34
34
  "reflect-metadata": "^0.1.13"
35
35
  },
36
- "gitHead": "346a79a5ff4642ee87fe7f89694748b88718dae1",
36
+ "gitHead": "c1e1bb8c13c67c68ead38f722871a47440b13b4e",
37
37
  "publishConfig": {
38
38
  "access": "public"
39
39
  }