@predy-js/render-interface 0.1.61-beta.2 → 0.1.61-beta.22

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.
Files changed (42) hide show
  1. package/dist/index.js +231 -136
  2. package/dist/index.js.map +1 -1
  3. package/dist/index.mjs +231 -137
  4. package/dist/index.mjs.map +1 -1
  5. package/dist/src/render/MarsGeometry.d.ts +4 -3
  6. package/dist/src/render/MarsMaterial.d.ts +2 -3
  7. package/dist/src/render/MarsMaterialDataBlock.d.ts +12 -3
  8. package/dist/src/render/MarsRenderer.d.ts +3 -0
  9. package/dist/src/webgl/GLGPUBuffer.d.ts +2 -4
  10. package/dist/src/webgl/GLGPURenderer.d.ts +2 -0
  11. package/dist/src/webgl/GLGeometry.d.ts +6 -2
  12. package/dist/src/webgl/GLProgram.d.ts +2 -0
  13. package/dist/statistic.js +1 -1
  14. package/dist/types/GPUBuffer.d.ts +14 -14
  15. package/dist/types/Geometry.d.ts +9 -4
  16. package/dist/types/Material.d.ts +27 -24
  17. package/dist/types/RenderFrame.d.ts +3 -5
  18. package/dist/types/RenderPass.d.ts +2 -2
  19. package/dist/types/Renderer.d.ts +21 -12
  20. package/dist/types/ShaderLibrary.d.ts +4 -4
  21. package/dist/types/native/DataBlockInternal.d.ts +3 -0
  22. package/dist/types/native/GPUBufferInternal.d.ts +1 -1
  23. package/dist/types/native/ImageBitmapInternal.d.ts +0 -2
  24. package/dist/types/native/MaterialInternal.d.ts +0 -9
  25. package/dist/types/native/RenderFrameInternal.d.ts +3 -7
  26. package/dist/types/native/RendererInternal.d.ts +10 -0
  27. package/dist/types/native/TextureInternal.d.ts +1 -0
  28. package/package.json +1 -1
  29. package/types/GPUBuffer.ts +16 -19
  30. package/types/Geometry.ts +11 -4
  31. package/types/Material.ts +37 -31
  32. package/types/RenderFrame.ts +3 -5
  33. package/types/RenderPass.ts +2 -2
  34. package/types/Renderer.ts +24 -13
  35. package/types/ShaderLibrary.ts +4 -4
  36. package/types/native/DataBlockInternal.ts +5 -0
  37. package/types/native/GPUBufferInternal.ts +1 -2
  38. package/types/native/ImageBitmapInternal.ts +0 -2
  39. package/types/native/MaterialInternal.ts +0 -11
  40. package/types/native/RenderFrameInternal.ts +3 -7
  41. package/types/native/RendererInternal.ts +13 -0
  42. package/types/native/TextureInternal.ts +1 -0
package/dist/index.mjs CHANGED
@@ -2,7 +2,7 @@
2
2
  * Name: @predy-js/render-interface
3
3
  * Description: undefined
4
4
  * Author: undefined
5
- * Version: v0.1.61-beta.2
5
+ * Version: v0.1.61-beta.22
6
6
  */
7
7
 
8
8
  /******************************************************************************
@@ -149,7 +149,9 @@ var TextureSourceType;
149
149
  TextureSourceType[TextureSourceType["mipmaps"] = 7] = "mipmaps";
150
150
  })(TextureSourceType || (TextureSourceType = {}));
151
151
 
152
- var _a$6, _b$2;
152
+ var GPUBufferOptionsMemoryShared = 1 << 1;
153
+
154
+ var _a$6, _b$3;
153
155
  // @ts-expect-error safe to assign
154
156
  var constants = {};
155
157
  {
@@ -188,11 +190,11 @@ function getBytesPerElementByGLType(type) {
188
190
  var _a;
189
191
  return ((_a = map[type]) === null || _a === void 0 ? void 0 : _a.BYTES_PER_ELEMENT) || 0;
190
192
  }
191
- var MatAttrLocPairMap = (_b$2 = {},
192
- _b$2[constants.FLOAT_MAT2] = [2, 2],
193
- _b$2[constants.FLOAT_MAT3] = [3, 3],
194
- _b$2[constants.FLOAT_MAT4] = [4, 4],
195
- _b$2);
193
+ var MatAttrLocPairMap = (_b$3 = {},
194
+ _b$3[constants.FLOAT_MAT2] = [2, 2],
195
+ _b$3[constants.FLOAT_MAT3] = [3, 3],
196
+ _b$3[constants.FLOAT_MAT4] = [4, 4],
197
+ _b$3);
196
198
  function getMatAttrLocPair(type) {
197
199
  return MatAttrLocPairMap[type] || [1, 1];
198
200
  }
@@ -466,7 +468,7 @@ function renderMeshes(renderer, state) {
466
468
  else if (!mesh.hide) {
467
469
  delegate.willRenderMesh && delegate.willRenderMesh(mesh, state);
468
470
  renderMesh(renderer, mesh, state);
469
- delegate.didiRenderMesh && delegate.didiRenderMesh(mesh, state);
471
+ delegate.didRenderMesh && delegate.didRenderMesh(mesh, state);
470
472
  }
471
473
  }
472
474
  for (var i = 0; i < sortedMeshes.length; i++) {
@@ -674,19 +676,17 @@ var GPUCapabilityEmpty = /** @class */ (function () {
674
676
  var GLGPUBuffer = /** @class */ (function () {
675
677
  function GLGPUBuffer(options, renderer) {
676
678
  this._isDestroyed = false;
677
- this.target = options.target || constants.ARRAY_BUFFER;
678
- this.type = options.type || constants.FLOAT;
679
679
  this.renderer = renderer;
680
680
  this.glBuffer = renderer.createGLBuffer(this, options.name);
681
681
  this.usage = options.usage || constants.STATIC_DRAW;
682
- this.bytesPerElement = getBytesPerElementByGLType(this.type);
683
682
  this._byteLength = 0;
684
683
  this.name = options.name || '';
684
+ this.target = options.target || constants.ARRAY_BUFFER;
685
685
  if (options.data) {
686
686
  this.bufferData(options.data);
687
687
  }
688
- else if (options.elementCount) {
689
- this.bufferData(getBytesPerElementByGLType(this.type) * options.elementCount);
688
+ else if (options.byteLength) {
689
+ this.bufferData(options.byteLength);
690
690
  }
691
691
  }
692
692
  Object.defineProperty(GLGPUBuffer.prototype, "byteLength", {
@@ -703,13 +703,6 @@ var GLGPUBuffer = /** @class */ (function () {
703
703
  enumerable: false,
704
704
  configurable: true
705
705
  });
706
- Object.defineProperty(GLGPUBuffer.prototype, "elementCount", {
707
- get: function () {
708
- return (this.byteLength / this.bytesPerElement);
709
- },
710
- enumerable: false,
711
- configurable: true
712
- });
713
706
  Object.defineProperty(GLGPUBuffer.prototype, "level", {
714
707
  get: function () {
715
708
  var _a;
@@ -747,6 +740,7 @@ var GLGPUBuffer = /** @class */ (function () {
747
740
  gl.bufferSubData(target, 0, typedArray);
748
741
  }
749
742
  }
743
+ gl.bindBuffer(target, null);
750
744
  }
751
745
  else {
752
746
  this._byteLength = 0;
@@ -756,7 +750,7 @@ var GLGPUBuffer = /** @class */ (function () {
756
750
  if (this.renderer) {
757
751
  var gl = this.renderer.gl;
758
752
  var target = this.target;
759
- var byteOffset = elementOffset * this.bytesPerElement;
753
+ var byteOffset = elementOffset * typedArray.BYTES_PER_ELEMENT;
760
754
  gl.bindBuffer(target, this.glBuffer);
761
755
  var byteLength = byteOffset + typedArray.byteLength;
762
756
  if (byteLength > this._byteLength) {
@@ -764,6 +758,7 @@ var GLGPUBuffer = /** @class */ (function () {
764
758
  gl.bufferData(target, byteLength, this.usage);
765
759
  }
766
760
  gl.bufferSubData(target, byteOffset, typedArray);
761
+ gl.bindBuffer(target, null);
767
762
  }
768
763
  else {
769
764
  this._byteLength = 0;
@@ -780,13 +775,19 @@ var GLGPUBuffer = /** @class */ (function () {
780
775
  var _a;
781
776
  if (this.level === 2) {
782
777
  var gl = (_a = this.renderer) === null || _a === void 0 ? void 0 : _a.gl;
778
+ var target = this.target;
783
779
  if (gl) {
784
- gl.getBufferSubData(this.target, elementOffset * this.bytesPerElement, typedArray);
780
+ gl.bindBuffer(target, this.glBuffer);
781
+ gl.getBufferSubData(target, elementOffset * typedArray.BYTES_PER_ELEMENT, typedArray);
782
+ gl.bindBuffer(target, null);
785
783
  return true;
786
784
  }
787
785
  }
788
786
  return false;
789
787
  };
788
+ GLGPUBuffer.prototype.getElementCount = function (bytePerElement) {
789
+ return this._byteLength / bytePerElement;
790
+ };
790
791
  GLGPUBuffer.prototype.assignRenderer = function (renderer) {
791
792
  if (!this.renderer) {
792
793
  // @ts-expect-error safe to assign
@@ -1448,7 +1449,7 @@ function assignTextureLoc(gl, info, value, renderer, index) {
1448
1449
  }
1449
1450
  }
1450
1451
 
1451
- var _a$4, _b$1;
1452
+ var _a$4, _b$2;
1452
1453
  var BlockUniformInfoOffset = 1;
1453
1454
  var BlockUniformInfoByteLength = 8;
1454
1455
  var BlockUniformInfoType = 0;
@@ -1590,43 +1591,42 @@ var MemorySetter = (_a$4 = {},
1590
1591
  _a$4[constants.BOOL_VEC3] = setUInt8Array,
1591
1592
  _a$4[constants.BOOL_VEC4] = setUInt8Array,
1592
1593
  _a$4);
1593
- var ItemPerValueMap = (_b$1 = {},
1594
- _b$1[constants.FLOAT] = 1,
1595
- _b$1[constants.INT] = 1,
1596
- _b$1[constants.UNSIGNED_INT] = 1,
1597
- _b$1[constants.SHORT] = 1,
1598
- _b$1[constants.BOOL] = 1,
1599
- _b$1[constants.UNSIGNED_SHORT] = 1,
1600
- _b$1[constants.FLOAT_VEC2] = 2,
1601
- _b$1[constants.FLOAT_VEC3] = 3,
1602
- _b$1[constants.FLOAT_VEC4] = 4,
1603
- _b$1[constants.FLOAT_MAT2] = 4,
1604
- _b$1[constants.FLOAT_MAT3] = 9,
1605
- _b$1[constants.FLOAT_MAT4] = 16,
1606
- _b$1[constants.FLOAT_MAT2x3] = 6,
1607
- _b$1[constants.FLOAT_MAT2x4] = 8,
1608
- _b$1[constants.FLOAT_MAT4x3] = 12,
1609
- _b$1[constants.FLOAT_MAT4x2] = 8,
1610
- _b$1[constants.FLOAT_MAT3x4] = 12,
1611
- _b$1[constants.FLOAT_MAT3x2] = 6,
1612
- _b$1[constants.INT_VEC2] = 2,
1613
- _b$1[constants.INT_VEC3] = 3,
1614
- _b$1[constants.INT_VEC4] = 4,
1615
- _b$1[constants.UNSIGNED_INT_VEC2] = 2,
1616
- _b$1[constants.UNSIGNED_INT_VEC3] = 3,
1617
- _b$1[constants.UNSIGNED_INT_VEC4] = 4,
1618
- _b$1[constants.BOOL_VEC2] = 2,
1619
- _b$1[constants.BOOL_VEC3] = 3,
1620
- _b$1[constants.BOOL_VEC4] = 4,
1621
- _b$1);
1594
+ var ItemPerValueMap = (_b$2 = {},
1595
+ _b$2[constants.FLOAT] = 1,
1596
+ _b$2[constants.INT] = 1,
1597
+ _b$2[constants.UNSIGNED_INT] = 1,
1598
+ _b$2[constants.SHORT] = 1,
1599
+ _b$2[constants.BOOL] = 1,
1600
+ _b$2[constants.UNSIGNED_SHORT] = 1,
1601
+ _b$2[constants.FLOAT_VEC2] = 2,
1602
+ _b$2[constants.FLOAT_VEC3] = 3,
1603
+ _b$2[constants.FLOAT_VEC4] = 4,
1604
+ _b$2[constants.FLOAT_MAT2] = 4,
1605
+ _b$2[constants.FLOAT_MAT3] = 9,
1606
+ _b$2[constants.FLOAT_MAT4] = 16,
1607
+ _b$2[constants.FLOAT_MAT2x3] = 6,
1608
+ _b$2[constants.FLOAT_MAT2x4] = 8,
1609
+ _b$2[constants.FLOAT_MAT4x3] = 12,
1610
+ _b$2[constants.FLOAT_MAT4x2] = 8,
1611
+ _b$2[constants.FLOAT_MAT3x4] = 12,
1612
+ _b$2[constants.FLOAT_MAT3x2] = 6,
1613
+ _b$2[constants.INT_VEC2] = 2,
1614
+ _b$2[constants.INT_VEC3] = 3,
1615
+ _b$2[constants.INT_VEC4] = 4,
1616
+ _b$2[constants.UNSIGNED_INT_VEC2] = 2,
1617
+ _b$2[constants.UNSIGNED_INT_VEC3] = 3,
1618
+ _b$2[constants.UNSIGNED_INT_VEC4] = 4,
1619
+ _b$2[constants.BOOL_VEC2] = 2,
1620
+ _b$2[constants.BOOL_VEC3] = 3,
1621
+ _b$2[constants.BOOL_VEC4] = 4,
1622
+ _b$2);
1622
1623
  var fullRange = [0, 0];
1623
1624
  var UniformBlockBuffer = /** @class */ (function () {
1624
1625
  function UniformBlockBuffer(renderer, info) {
1625
1626
  this.buffer = new GLGPUBuffer({
1626
1627
  target: constants.UNIFORM_BUFFER,
1627
1628
  name: info.name,
1628
- type: constants.BYTE,
1629
- elementCount: info.size,
1629
+ byteLength: info.size,
1630
1630
  }, renderer);
1631
1631
  this.dirtyFlags = {};
1632
1632
  this.info = info;
@@ -1790,65 +1790,77 @@ var GLProgram = /** @class */ (function () {
1790
1790
  renderer.state.useProgram(this.glHandle);
1791
1791
  }
1792
1792
  };
1793
+ GLProgram.prototype.getSemanticValue = function (state, semanticName) {
1794
+ var renderPassSemantics = state.currentPass.semantics;
1795
+ var renderFrameSemantics = state.currentFrame.semantics;
1796
+ if (renderPassSemantics.hasSemanticValue(semanticName)) {
1797
+ return renderPassSemantics.getSemanticValue(semanticName, state);
1798
+ }
1799
+ else if (renderFrameSemantics.hasSemanticValue(semanticName)) {
1800
+ return renderFrameSemantics.getSemanticValue(semanticName, state);
1801
+ }
1802
+ };
1793
1803
  GLProgram.prototype.setupUniforms = function (state) {
1794
1804
  var _this = this;
1795
1805
  this.bind();
1796
- var frame = state.currentFrame;
1797
1806
  var material = state.currentMesh.material;
1798
1807
  var gl = this.renderer.gl;
1799
1808
  var blocks = material._dataBlocks;
1800
1809
  var shared = this.shared;
1801
- var uniformSemantics = material.uniformSemantics;
1802
- var renderPassSemantics = state.currentPass.semantics;
1803
- var renderFrameSemantics = frame.semantics;
1804
- // semantic {uModel:'MODEL'}
1805
1810
  temArr.clear();
1806
1811
  forEach(this.uniformBlockMap, function (uboInfo, name) {
1807
1812
  if (uboInfo) {
1808
- for (var i = 0; i < blocks.length; i++) {
1809
- var block = blocks[i];
1810
- var uboBuffer = block.createUboBuffer(uboInfo);
1813
+ var block_1 = material.getDataBlockByName(uboInfo.name);
1814
+ if (block_1) {
1815
+ forEach(block_1.uniformSemantics, function (semanticName, uniformName) {
1816
+ if (uniformName in uboInfo.uniforms && !block_1.hasUniformValue(uniformName)) {
1817
+ var val = _this.getSemanticValue(state, semanticName);
1818
+ if (val || val === 0) {
1819
+ block_1.setUniformValue(uniformName, val, true);
1820
+ }
1821
+ }
1822
+ });
1823
+ var uboBuffer = block_1.createUboBuffer(uboInfo);
1811
1824
  if (uboBuffer) {
1812
- block.setUboBuffer(uboBuffer);
1813
- temArr.add(block);
1825
+ block_1.setUboBuffer(uboBuffer);
1826
+ temArr.add(block_1);
1814
1827
  return uboBuffer.bind(gl, _this.glHandle, uboInfo.index);
1815
1828
  }
1816
1829
  }
1817
1830
  }
1818
1831
  });
1819
1832
  forEach(this.uniformInfoMap, function (info, name) {
1820
- var val, hasUniformValue;
1833
+ var val;
1821
1834
  for (var i = 0; i < blocks.length; i++) {
1822
1835
  var block = blocks[i];
1823
- if (temArr.has(block)) {
1836
+ var semanticName = block.uniformSemantics[name];
1837
+ if (info.isTexture) {
1838
+ if (block.hasUniformValue(name)) {
1839
+ val = block.getUniformTexture(name);
1840
+ }
1841
+ else if (semanticName) {
1842
+ val = _this.getSemanticValue(state, semanticName);
1843
+ }
1844
+ }
1845
+ else if (temArr.has(block)) {
1824
1846
  continue;
1825
1847
  }
1826
- if (block.hasUniformValue(name)) {
1848
+ else if (block.hasUniformValue(name)) {
1827
1849
  if (!shared && !block._uniformFlags[name] && info.textureIndex === -1) {
1828
1850
  //not dirty, don't assign
1829
1851
  return;
1830
1852
  }
1831
1853
  val = block.getUniformValue(name);
1832
- hasUniformValue = true;
1833
- break;
1834
1854
  }
1835
- }
1836
- if (!hasUniformValue) {
1837
- var semanticName = uniformSemantics[name];
1838
- if (semanticName) {
1839
- if (renderPassSemantics.hasSemanticValue(semanticName)) {
1840
- val = renderPassSemantics.getSemanticValue(semanticName, state);
1841
- }
1842
- else if (renderFrameSemantics.hasSemanticValue(semanticName)) {
1843
- val = renderFrameSemantics.getSemanticValue(semanticName, state);
1844
- }
1855
+ else if (semanticName) {
1856
+ val = _this.getSemanticValue(state, semanticName);
1857
+ }
1858
+ if (val !== undefined && val !== null) {
1859
+ _this.setGLUniformValue(name, val, info, gl);
1860
+ }
1861
+ else if (!info.isTexture) {
1862
+ consoleWarn("mesh ".concat(state.currentMesh.name, " uniform ").concat(name, " value unset"));
1845
1863
  }
1846
- }
1847
- if (val !== undefined && val !== null) {
1848
- _this.setGLUniformValue(name, val, info, gl);
1849
- }
1850
- else if (!info.isTexture) {
1851
- consoleWarn("mesh ".concat(state.currentMesh.name, " uniform ").concat(name, " value unset"));
1852
1864
  }
1853
1865
  });
1854
1866
  };
@@ -2418,7 +2430,7 @@ function registerCompressedTexture(gl) {
2418
2430
  return 0;
2419
2431
  }
2420
2432
 
2421
- var _a$2, _b;
2433
+ var _a$2, _b$1;
2422
2434
  var flipCanvas;
2423
2435
  var imageBitMapAvailable$1 = typeof ImageBitmap === 'function' && typeof createImageBitmap == 'function';
2424
2436
  var GLTexture = /** @class */ (function () {
@@ -2749,14 +2761,14 @@ var FORMAT_HALF_FLOAT = (_a$2 = {},
2749
2761
  _a$2[constants.LUMINANCE_ALPHA] = 33327,
2750
2762
  _a$2[constants.LUMINANCE] = 33325,
2751
2763
  _a$2);
2752
- var FORMAT_FLOAT = (_b = {},
2753
- _b[constants.RGBA] = 34836,
2754
- _b[constants.RGB] = 34837,
2755
- _b[constants.ALPHA] = 33326,
2756
- _b[constants.RED] = 33326,
2757
- _b[constants.LUMINANCE_ALPHA] = 33328,
2758
- _b[constants.LUMINANCE] = 33326,
2759
- _b);
2764
+ var FORMAT_FLOAT = (_b$1 = {},
2765
+ _b$1[constants.RGBA] = 34836,
2766
+ _b$1[constants.RGB] = 34837,
2767
+ _b$1[constants.ALPHA] = 33326,
2768
+ _b$1[constants.RED] = 33326,
2769
+ _b$1[constants.LUMINANCE_ALPHA] = 33328,
2770
+ _b$1[constants.LUMINANCE] = 33326,
2771
+ _b$1);
2760
2772
 
2761
2773
  var GL_LOST_EVENT = 'webglcontextlost';
2762
2774
  var GLGPURenderer = /** @class */ (function () {
@@ -2802,6 +2814,12 @@ var GLGPURenderer = /** @class */ (function () {
2802
2814
  gl.canvas.addEventListener(GL_LOST_EVENT, this.onContextLose);
2803
2815
  }
2804
2816
  }
2817
+ GLGPURenderer.prototype.requestAnimationFrame = function (cb) {
2818
+ return window.requestAnimationFrame(cb);
2819
+ };
2820
+ GLGPURenderer.prototype.cancelAnimationFrame = function (id) {
2821
+ return window.cancelAnimationFrame(id);
2822
+ };
2805
2823
  Object.defineProperty(GLGPURenderer.prototype, "isDestroyed", {
2806
2824
  get: function () {
2807
2825
  return this._isDestroyed;
@@ -4452,24 +4470,29 @@ var GLMaterial = /** @class */ (function () {
4452
4470
  }());
4453
4471
 
4454
4472
  function isUniformStruct(value) {
4455
- return (isObj(value)) && (value.length === undefined) && value.assignRenderer === undefined;
4473
+ return (isObj(value)) && (value.length === undefined);
4456
4474
  }
4457
4475
  function isUniformStructArray(value) {
4458
4476
  return (value) && (value.length !== undefined) && isUniformStruct(value[0]);
4459
4477
  }
4460
4478
  var MarsMaterialDataBlock = /** @class */ (function () {
4461
4479
  function MarsMaterialDataBlock(props, renderer) {
4480
+ var _this = this;
4462
4481
  this._isDestroyed = false;
4463
4482
  this._isDestroyed = false;
4464
4483
  this.name = props.name || 'defDataBlock';
4465
4484
  this._uniformValues = {};
4466
4485
  this._uniformFlags = {};
4467
4486
  this.uboBufferMap = {};
4487
+ this._uniformTextures = {};
4468
4488
  this._uniformValueRanges = {};
4469
4489
  this._keepUboData = !!props.keepUboData;
4490
+ this.uniformSemantics = props.uniformSemantics || {};
4491
+ this._uniformPrivate = {};
4470
4492
  if (props.uniformValues) {
4471
4493
  this.setUniformValues(props.uniformValues);
4472
4494
  }
4495
+ forEach(props.uniformTextures, function (tex, name) { return _this.setUniformTexture(name, tex); });
4473
4496
  if (renderer) {
4474
4497
  this.assignRenderer(renderer);
4475
4498
  }
@@ -4507,6 +4530,20 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4507
4530
  enumerable: false,
4508
4531
  configurable: true
4509
4532
  });
4533
+ MarsMaterialDataBlock.prototype.setUniformTexture = function (uniformName, texture) {
4534
+ if (texture) {
4535
+ this._uniformTextures[uniformName] = texture;
4536
+ this._assignUniformValueRenderer(texture, this.renderer);
4537
+ this._uniformPrivate[uniformName] = true;
4538
+ }
4539
+ else {
4540
+ delete this._uniformTextures[uniformName];
4541
+ delete this._uniformPrivate[uniformName];
4542
+ }
4543
+ };
4544
+ MarsMaterialDataBlock.prototype.getUniformTexture = function (uniformName) {
4545
+ return this._uniformTextures[uniformName];
4546
+ };
4510
4547
  MarsMaterialDataBlock.prototype.assignRenderer = function (renderer) {
4511
4548
  var _this = this;
4512
4549
  if (this.renderer && renderer !== this.renderer) {
@@ -4515,7 +4552,7 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4515
4552
  if (renderer && !this.renderer) {
4516
4553
  // @ts-expect-error safe to assign
4517
4554
  this.renderer = renderer;
4518
- forEach(this._uniformValues, function (value) {
4555
+ forEach(this._uniformTextures, function (value) {
4519
4556
  _this._assignUniformValueRenderer(value, renderer);
4520
4557
  });
4521
4558
  }
@@ -4544,11 +4581,11 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4544
4581
  this._uniformFlags[name] = true;
4545
4582
  };
4546
4583
  MarsMaterialDataBlock.prototype.hasUniformValue = function (name) {
4547
- return name in this._uniformValues;
4584
+ return !!this._uniformPrivate[name];
4548
4585
  };
4549
4586
  MarsMaterialDataBlock.prototype.destroy = function (options) {
4550
4587
  if ((options === null || options === void 0 ? void 0 : options.textures) !== DestroyOptions.keep) {
4551
- forEach(this._uniformValues, function (uniform) {
4588
+ forEach(this._uniformTextures, function (uniform) {
4552
4589
  if (uniform instanceof MarsTexture) {
4553
4590
  uniform.destroy();
4554
4591
  }
@@ -4561,10 +4598,13 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4561
4598
  });
4562
4599
  // @ts-expect-error safe to assign
4563
4600
  this.uboBufferMap = {};
4601
+ this._uniformPrivate = {};
4564
4602
  // @ts-expect-error safe to assign
4565
4603
  this._uniformFlags = {};
4566
4604
  // @ts-expect-error safe to assign
4567
4605
  this._uniformValues = {};
4606
+ // @ts-expect-error safe to assign
4607
+ this._uniformTextures = {};
4568
4608
  this.assignRenderer = throwDestroyedError;
4569
4609
  this._isDestroyed = true;
4570
4610
  };
@@ -4574,20 +4614,39 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4574
4614
  MarsMaterialDataBlock.prototype.getUniformValues = function () {
4575
4615
  return this._uniformValues;
4576
4616
  };
4577
- MarsMaterialDataBlock.prototype.setUniformValue = function (name, value) {
4617
+ MarsMaterialDataBlock.prototype.setUniformValue = function (name, value, isSemantic) {
4578
4618
  var _this = this;
4579
4619
  if (value === undefined) {
4620
+ var originValue = this._uniformValues[name];
4621
+ if (isUniformStruct(originValue)) {
4622
+ forEach(originValue, function (data, key) {
4623
+ var nameInStruct = name + '.' + key;
4624
+ delete _this._uniformPrivate[nameInStruct];
4625
+ });
4626
+ }
4627
+ else if (isUniformStructArray(originValue)) {
4628
+ originValue.forEach(function (valueData, i) {
4629
+ forEach(valueData, function (valueInStruct, key) {
4630
+ var nameInStruct = name + '[' + i + ']' + '.' + key;
4631
+ delete _this._uniformPrivate[nameInStruct];
4632
+ });
4633
+ });
4634
+ }
4580
4635
  delete this._uniformValues[name];
4581
4636
  this._uniformFlags[name] = false;
4637
+ delete this._uniformPrivate[name];
4638
+ }
4639
+ else if (value instanceof MarsTexture) {
4640
+ throw Error('setUniformValue not accept texture:' + name);
4582
4641
  }
4583
4642
  else {
4643
+ this._uniformPrivate[name] = !isSemantic;
4584
4644
  if (isUniformStruct(value)) {
4585
4645
  forEach(value, function (data, key) {
4586
4646
  var nameInStruct = name + '.' + key;
4587
- var valueInStruct = data;
4588
- _this._uniformValues[nameInStruct] = valueInStruct;
4647
+ _this._uniformValues[nameInStruct] = data;
4589
4648
  _this._uniformFlags[nameInStruct] = true;
4590
- _this._assignUniformValueRenderer(valueInStruct, _this.renderer);
4649
+ _this._uniformPrivate[nameInStruct] = true;
4591
4650
  });
4592
4651
  // 只是用来保存结构体对象
4593
4652
  this._uniformValues[name] = value;
@@ -4599,7 +4658,7 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4599
4658
  var nameInStruct = name + '[' + i + ']' + '.' + key;
4600
4659
  _this._uniformValues[nameInStruct] = valueInStruct;
4601
4660
  _this._uniformFlags[nameInStruct] = true;
4602
- _this._assignUniformValueRenderer(valueInStruct, _this.renderer);
4661
+ _this._uniformPrivate[nameInStruct] = true;
4603
4662
  });
4604
4663
  });
4605
4664
  // 只是用来保存结构体对象
@@ -4609,7 +4668,6 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4609
4668
  else {
4610
4669
  this._uniformValues[name] = value;
4611
4670
  this._uniformFlags[name] = true;
4612
- this._assignUniformValueRenderer(value, this.renderer);
4613
4671
  }
4614
4672
  }
4615
4673
  return true;
@@ -4620,10 +4678,21 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4620
4678
  _this.setUniformValue(key, val);
4621
4679
  });
4622
4680
  };
4681
+ MarsMaterialDataBlock.prototype.setUniformSemantic = function (name, semantic) {
4682
+ if (semantic) {
4683
+ this.uniformSemantics[name] = semantic;
4684
+ }
4685
+ else {
4686
+ delete this.uniformSemantics[name];
4687
+ }
4688
+ };
4623
4689
  MarsMaterialDataBlock.prototype.clone = function (name) {
4624
4690
  return new MarsMaterialDataBlock({
4625
4691
  name: name,
4626
4692
  uniformValues: this._uniformValues,
4693
+ uniformTextures: this._uniformTextures,
4694
+ uniformSemantics: this.uniformSemantics,
4695
+ keepUboData: this._keepUboData,
4627
4696
  }, this.renderer);
4628
4697
  };
4629
4698
  return MarsMaterialDataBlock;
@@ -4638,13 +4707,10 @@ var MarsMaterial = /** @class */ (function () {
4638
4707
  this.renderType = 0 /* MaterialRenderType.normal */;
4639
4708
  this.states = this.createMaterialStates(options.states);
4640
4709
  this.options = options;
4710
+ this._dbMap = {};
4641
4711
  if (!this._dataBlocks.length) {
4642
- this._dataBlocks[0] = new MarsMaterialDataBlock({ name: '' });
4643
- }
4644
- if (options.uniformValues) {
4645
- this.defaultDataBlock.setUniformValues(options.uniformValues);
4712
+ this._dataBlocks[0] = new MarsMaterialDataBlock({ name: 'main' });
4646
4713
  }
4647
- this.uniformSemantics = Object.assign({}, options.uniformSemantics);
4648
4714
  }
4649
4715
  Object.defineProperty(MarsMaterial.prototype, "isDestroyed", {
4650
4716
  get: function () {
@@ -4655,7 +4721,7 @@ var MarsMaterial = /** @class */ (function () {
4655
4721
  });
4656
4722
  Object.defineProperty(MarsMaterial.prototype, "dataBlocks", {
4657
4723
  get: function () {
4658
- return this._dataBlocks.slice();
4724
+ return this._dataBlocks;
4659
4725
  },
4660
4726
  enumerable: false,
4661
4727
  configurable: true
@@ -4727,6 +4793,9 @@ var MarsMaterial = /** @class */ (function () {
4727
4793
  return Object.freeze(ret);
4728
4794
  };
4729
4795
  MarsMaterial.prototype.addDataBlock = function (b) {
4796
+ if (this.getDataBlockByName(b.name)) {
4797
+ throw Error('dataBlock with same name:' + b.name);
4798
+ }
4730
4799
  if (arrAdd(this._dataBlocks, b)) {
4731
4800
  b.invalidAllFlags();
4732
4801
  var r = this.renderer;
@@ -4735,16 +4804,19 @@ var MarsMaterial = /** @class */ (function () {
4735
4804
  }
4736
4805
  }
4737
4806
  };
4807
+ MarsMaterial.prototype.getDataBlockByName = function (name) {
4808
+ var cache = this._dbMap[name];
4809
+ if (!cache) {
4810
+ var db = this._dataBlocks.find(function (db) { return db.name === name; });
4811
+ if (db) {
4812
+ return this._dbMap[name] = db;
4813
+ }
4814
+ }
4815
+ return cache;
4816
+ };
4738
4817
  MarsMaterial.prototype.removeDataBlock = function (b) {
4739
4818
  arrRemove(this._dataBlocks, b);
4740
- };
4741
- MarsMaterial.prototype.setUniformSemantic = function (uniformName, semantic) {
4742
- if (semantic === undefined) {
4743
- delete this.uniformSemantics[uniformName];
4744
- }
4745
- else {
4746
- this.uniformSemantics[uniformName] = semantic;
4747
- }
4819
+ delete this._dbMap[b.name];
4748
4820
  };
4749
4821
  MarsMaterial.prototype.assignRenderer = function (renderer) {
4750
4822
  if (!this.materialInternal) {
@@ -4818,12 +4890,15 @@ var GLVertexArrayObject = /** @class */ (function () {
4818
4890
  return GLVertexArrayObject;
4819
4891
  }());
4820
4892
 
4821
- var _a$1;
4893
+ var _a$1, _b;
4822
4894
  var INDEX_TYPE_MAP = (_a$1 = {},
4823
- _a$1[Uint8Array.BYTES_PER_ELEMENT] = constants.UNSIGNED_BYTE,
4824
4895
  _a$1[Uint16Array.BYTES_PER_ELEMENT] = constants.UNSIGNED_SHORT,
4825
4896
  _a$1[Uint32Array.BYTES_PER_ELEMENT] = constants.UNSIGNED_INT,
4826
4897
  _a$1);
4898
+ var TYPE_BYTE_MAP = (_b = {},
4899
+ _b[constants.UNSIGNED_SHORT] = Uint16Array.BYTES_PER_ELEMENT,
4900
+ _b[constants.UNSIGNED_INT] = Uint32Array.BYTES_PER_ELEMENT,
4901
+ _b);
4827
4902
  /**
4828
4903
  * GLGeometry对象,保存GLGPUBuffer对象。
4829
4904
  *
@@ -4849,7 +4924,8 @@ var GLGeometry = /** @class */ (function () {
4849
4924
  buffers[name] = new GLGPUBuffer(opt, renderer);
4850
4925
  });
4851
4926
  if (option.index && option.index.data) {
4852
- this._indexBuffer = this.createIndexBuffer(option.index.data, renderer);
4927
+ var ret = this.createIndexBuffer(option.index.data, renderer);
4928
+ this.setIndexBuffer(ret[0], ret[1]);
4853
4929
  }
4854
4930
  }
4855
4931
  this._buffersMap = buffers;
@@ -4871,18 +4947,18 @@ var GLGeometry = /** @class */ (function () {
4871
4947
  (_a = this.vaoMap[name]) === null || _a === void 0 ? void 0 : _a.destroy();
4872
4948
  this.vaoMap[name] = undefined;
4873
4949
  };
4874
- GLGeometry.prototype.setIndexBuffer = function (buffer) {
4950
+ GLGeometry.prototype.setIndexBuffer = function (buffer, indexBufferType) {
4875
4951
  this._indexBuffer = buffer;
4952
+ this.indexBufferType = indexBufferType;
4876
4953
  };
4877
4954
  GLGeometry.prototype.createIndexBuffer = function (data, renderer) {
4878
4955
  var type = INDEX_TYPE_MAP[data.BYTES_PER_ELEMENT];
4879
4956
  var indexOption = {
4880
4957
  data: data,
4881
4958
  target: constants.ELEMENT_ARRAY_BUFFER,
4882
- type: type,
4883
4959
  name: "".concat(this.name, "##index"),
4884
4960
  };
4885
- return new GLGPUBuffer(indexOption, renderer);
4961
+ return [new GLGPUBuffer(indexOption, renderer), type];
4886
4962
  };
4887
4963
  GLGeometry.prototype.getGPUBuffer = function (name) {
4888
4964
  return this._buffersMap[name];
@@ -4924,10 +5000,10 @@ var GLGeometry = /** @class */ (function () {
4924
5000
  if (gl && gpu) {
4925
5001
  var drawCount = this.drawCount;
4926
5002
  if (index) {
4927
- var type = index.type;
5003
+ var type = this.indexBufferType;
4928
5004
  //bind by vao
4929
5005
  //this._indexBuffer?.bind();
4930
- var dc = isNaN(drawCount) ? index.elementCount : drawCount;
5006
+ var dc = isNaN(drawCount) ? index.getElementCount(TYPE_BYTE_MAP[type]) : drawCount;
4931
5007
  if (dc > 0) {
4932
5008
  if (useInstancedDraw) {
4933
5009
  gpu.drawElementsInstanced(gl, this.mode, dc, type, this.drawStart || 0, state.currentMesh.instanceCount);
@@ -5023,7 +5099,6 @@ var MarsGeometry = /** @class */ (function () {
5023
5099
  buffers[name] = {
5024
5100
  data: data,
5025
5101
  usage: usage,
5026
- target: constants.ARRAY_BUFFER,
5027
5102
  name: name,
5028
5103
  };
5029
5104
  var gltype = attributeData2GLType(data);
@@ -5063,6 +5138,9 @@ var MarsGeometry = /** @class */ (function () {
5063
5138
  });
5064
5139
  // 顶点索引
5065
5140
  this._index = (_a = option.index) === null || _a === void 0 ? void 0 : _a.data;
5141
+ if (this._index instanceof Uint8Array) {
5142
+ throw Error('Uint8 Index not support');
5143
+ }
5066
5144
  dirtyFlags['index'] = {
5067
5145
  dirty: true,
5068
5146
  discard: true,
@@ -5177,8 +5255,6 @@ var MarsGeometry = /** @class */ (function () {
5177
5255
  var option = {
5178
5256
  data: data,
5179
5257
  usage: gpuBufferOption.usage,
5180
- target: gpuBufferOption.target,
5181
- elementCount: data.length,
5182
5258
  };
5183
5259
  buffers[gpuBufferName] = option;
5184
5260
  this._dirtyFlags[gpuBufferName].discard = true;
@@ -5278,19 +5354,21 @@ var MarsGeometry = /** @class */ (function () {
5278
5354
  return this._attributesName;
5279
5355
  };
5280
5356
  MarsGeometry.prototype.assignRenderer = function (renderer) {
5281
- var _a;
5282
5357
  if (!this.internal) {
5283
5358
  // 索引缓冲区参数
5284
5359
  var indexBufferOption = undefined;
5285
5360
  if (this._index) {
5286
- var type = INDEX_TYPE_MAP[(_a = this._index) === null || _a === void 0 ? void 0 : _a.BYTES_PER_ELEMENT];
5287
5361
  var data = this._index;
5288
5362
  indexBufferOption = {
5289
- target: constants.ELEMENT_ARRAY_BUFFER,
5290
- type: type,
5291
5363
  data: data,
5292
5364
  usage: constants.STATIC_DRAW,
5293
5365
  };
5366
+ if (data instanceof Uint16Array) {
5367
+ this.indexDataType = constants.SHORT;
5368
+ }
5369
+ else if (data instanceof Uint32Array) {
5370
+ this.indexDataType = constants.INT;
5371
+ }
5294
5372
  }
5295
5373
  // 顶点属性参数
5296
5374
  var options = {
@@ -5301,6 +5379,7 @@ var MarsGeometry = /** @class */ (function () {
5301
5379
  buffers: this._buffers,
5302
5380
  mode: this.mode,
5303
5381
  index: indexBufferOption,
5382
+ indexDataType: this.indexDataType,
5304
5383
  name: this.name,
5305
5384
  };
5306
5385
  //@ts-expect-error safe to set
@@ -5515,7 +5594,7 @@ var MarsExtWrap = /** @class */ (function () {
5515
5594
  fb.viewport[3] = target.height || source.height;
5516
5595
  renderer.internal.resetColorAttachments(fb, [target.internal]);
5517
5596
  var mesh = rp.meshes[0];
5518
- mesh.material.defaultDataBlock.setUniformValue('uTex', source);
5597
+ mesh.material.defaultDataBlock.setUniformTexture('uTex', source);
5519
5598
  RenderFrameInternal.renderRenderPass(renderer, rp, { currentFrame: {} });
5520
5599
  }
5521
5600
  }
@@ -5660,6 +5739,20 @@ var MarsRenderer = /** @class */ (function () {
5660
5739
  }
5661
5740
  }
5662
5741
  };
5742
+ MarsRenderer.prototype.cancelAnimationFrame = function (id) {
5743
+ return window.cancelAnimationFrame(id);
5744
+ };
5745
+ MarsRenderer.prototype.getErrors = function () {
5746
+ var gl = this.internal.gl;
5747
+ var err = gl.getError();
5748
+ if (err) {
5749
+ return ['webgl error:' + err];
5750
+ }
5751
+ return [];
5752
+ };
5753
+ MarsRenderer.prototype.requestAnimationFrame = function (cb) {
5754
+ return window.requestAnimationFrame(cb);
5755
+ };
5663
5756
  return MarsRenderer;
5664
5757
  }());
5665
5758
 
@@ -5695,7 +5788,8 @@ var MarsSharedGeometry = /** @class */ (function (_super) {
5695
5788
  glgeo.drawStart = this.drawStart;
5696
5789
  glgeo.mode = this.mode;
5697
5790
  if (this._index) {
5698
- glgeo._indexBuffer = glgeo.createIndexBuffer(this._index, renderer.internal);
5791
+ var ret = glgeo.createIndexBuffer(this._index, renderer.internal);
5792
+ glgeo.setIndexBuffer(ret[0], ret[1]);
5699
5793
  }
5700
5794
  //@ts-expect-error safe to assign
5701
5795
  this.internal = glgeo;
@@ -5726,7 +5820,7 @@ var MarsSharedGeometry = /** @class */ (function (_super) {
5726
5820
  return MarsSharedGeometry;
5727
5821
  }(MarsGeometry));
5728
5822
 
5729
- consoleLog('version: ' + "0.1.61-beta.2");
5823
+ consoleLog('version: ' + "0.1.61-beta.22");
5730
5824
 
5731
- export { DestroyOptions, MarsGeometry as Geometry, MarsInstancedMesh as InstancedMesh, MarsTextureFactory, MarsMaterial as Material, MarsMaterialDataBlock as MaterialDataBlock, MarsMesh as Mesh, MarsRenderFrame as RenderFrame, MarsRenderPass as RenderPass, RenderPassAttachmentStorageType, RenderPassDestroyAttachmentType, RenderPassMeshOrder, RenderPassPriorityNormal, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, MarsRenderer as Renderer, ShaderCompileResultStatus, ShaderLibraryEmpty, MarsSharedGeometry as SharedGeometry, MarsTexture as Texture, TextureLoadAction, TextureSourceType, TextureStoreAction, constants, getDefaultGPUCapability, getDefaultTextureFactory, setDefaultTextureFactory };
5825
+ export { DestroyOptions, GPUBufferOptionsMemoryShared, MarsGeometry as Geometry, MarsInstancedMesh as InstancedMesh, MarsTextureFactory, MarsMaterial as Material, MarsMaterialDataBlock as MaterialDataBlock, MarsMesh as Mesh, MarsRenderFrame as RenderFrame, MarsRenderPass as RenderPass, RenderPassAttachmentStorageType, RenderPassDestroyAttachmentType, RenderPassMeshOrder, RenderPassPriorityNormal, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, MarsRenderer as Renderer, ShaderCompileResultStatus, ShaderLibraryEmpty, MarsSharedGeometry as SharedGeometry, MarsTexture as Texture, TextureLoadAction, TextureSourceType, TextureStoreAction, constants, getDefaultGPUCapability, getDefaultTextureFactory, setDefaultTextureFactory };
5732
5826
  //# sourceMappingURL=index.mjs.map