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

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.
package/dist/index.js 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.20
6
6
  */
7
7
 
8
8
  'use strict';
@@ -470,7 +470,7 @@ function renderMeshes(renderer, state) {
470
470
  else if (!mesh.hide) {
471
471
  delegate.willRenderMesh && delegate.willRenderMesh(mesh, state);
472
472
  renderMesh(renderer, mesh, state);
473
- delegate.didiRenderMesh && delegate.didiRenderMesh(mesh, state);
473
+ delegate.didRenderMesh && delegate.didRenderMesh(mesh, state);
474
474
  }
475
475
  }
476
476
  for (var i = 0; i < sortedMeshes.length; i++) {
@@ -1794,65 +1794,77 @@ var GLProgram = /** @class */ (function () {
1794
1794
  renderer.state.useProgram(this.glHandle);
1795
1795
  }
1796
1796
  };
1797
+ GLProgram.prototype.getSemanticValue = function (state, semanticName) {
1798
+ var renderPassSemantics = state.currentPass.semantics;
1799
+ var renderFrameSemantics = state.currentFrame.semantics;
1800
+ if (renderPassSemantics.hasSemanticValue(semanticName)) {
1801
+ return renderPassSemantics.getSemanticValue(semanticName, state);
1802
+ }
1803
+ else if (renderFrameSemantics.hasSemanticValue(semanticName)) {
1804
+ return renderFrameSemantics.getSemanticValue(semanticName, state);
1805
+ }
1806
+ };
1797
1807
  GLProgram.prototype.setupUniforms = function (state) {
1798
1808
  var _this = this;
1799
1809
  this.bind();
1800
- var frame = state.currentFrame;
1801
1810
  var material = state.currentMesh.material;
1802
1811
  var gl = this.renderer.gl;
1803
1812
  var blocks = material._dataBlocks;
1804
1813
  var shared = this.shared;
1805
- var uniformSemantics = material.uniformSemantics;
1806
- var renderPassSemantics = state.currentPass.semantics;
1807
- var renderFrameSemantics = frame.semantics;
1808
- // semantic {uModel:'MODEL'}
1809
1814
  temArr.clear();
1810
1815
  forEach(this.uniformBlockMap, function (uboInfo, name) {
1811
1816
  if (uboInfo) {
1812
- for (var i = 0; i < blocks.length; i++) {
1813
- var block = blocks[i];
1814
- var uboBuffer = block.createUboBuffer(uboInfo);
1817
+ var block_1 = material.getDataBlockByName(uboInfo.name);
1818
+ if (block_1) {
1819
+ forEach(block_1.uniformSemantics, function (semanticName, uniformName) {
1820
+ if (uniformName in uboInfo.uniforms && !block_1.hasUniformValue(uniformName)) {
1821
+ var val = _this.getSemanticValue(state, semanticName);
1822
+ if (val || val === 0) {
1823
+ block_1.setUniformValue(uniformName, val, true);
1824
+ }
1825
+ }
1826
+ });
1827
+ var uboBuffer = block_1.createUboBuffer(uboInfo);
1815
1828
  if (uboBuffer) {
1816
- block.setUboBuffer(uboBuffer);
1817
- temArr.add(block);
1829
+ block_1.setUboBuffer(uboBuffer);
1830
+ temArr.add(block_1);
1818
1831
  return uboBuffer.bind(gl, _this.glHandle, uboInfo.index);
1819
1832
  }
1820
1833
  }
1821
1834
  }
1822
1835
  });
1823
1836
  forEach(this.uniformInfoMap, function (info, name) {
1824
- var val, hasUniformValue;
1837
+ var val;
1825
1838
  for (var i = 0; i < blocks.length; i++) {
1826
1839
  var block = blocks[i];
1827
- if (temArr.has(block)) {
1840
+ var semanticName = block.uniformSemantics[name];
1841
+ if (info.isTexture) {
1842
+ if (block.hasUniformValue(name)) {
1843
+ val = block.getUniformTexture(name);
1844
+ }
1845
+ else if (semanticName) {
1846
+ val = _this.getSemanticValue(state, semanticName);
1847
+ }
1848
+ }
1849
+ else if (temArr.has(block)) {
1828
1850
  continue;
1829
1851
  }
1830
- if (block.hasUniformValue(name)) {
1852
+ else if (block.hasUniformValue(name)) {
1831
1853
  if (!shared && !block._uniformFlags[name] && info.textureIndex === -1) {
1832
1854
  //not dirty, don't assign
1833
1855
  return;
1834
1856
  }
1835
1857
  val = block.getUniformValue(name);
1836
- hasUniformValue = true;
1837
- break;
1838
1858
  }
1839
- }
1840
- if (!hasUniformValue) {
1841
- var semanticName = uniformSemantics[name];
1842
- if (semanticName) {
1843
- if (renderPassSemantics.hasSemanticValue(semanticName)) {
1844
- val = renderPassSemantics.getSemanticValue(semanticName, state);
1845
- }
1846
- else if (renderFrameSemantics.hasSemanticValue(semanticName)) {
1847
- val = renderFrameSemantics.getSemanticValue(semanticName, state);
1848
- }
1859
+ else if (semanticName) {
1860
+ val = _this.getSemanticValue(state, semanticName);
1861
+ }
1862
+ if (val !== undefined && val !== null) {
1863
+ _this.setGLUniformValue(name, val, info, gl);
1864
+ }
1865
+ else if (!info.isTexture) {
1866
+ consoleWarn("mesh ".concat(state.currentMesh.name, " uniform ").concat(name, " value unset"));
1849
1867
  }
1850
- }
1851
- if (val !== undefined && val !== null) {
1852
- _this.setGLUniformValue(name, val, info, gl);
1853
- }
1854
- else if (!info.isTexture) {
1855
- consoleWarn("mesh ".concat(state.currentMesh.name, " uniform ").concat(name, " value unset"));
1856
1868
  }
1857
1869
  });
1858
1870
  };
@@ -4456,24 +4468,29 @@ var GLMaterial = /** @class */ (function () {
4456
4468
  }());
4457
4469
 
4458
4470
  function isUniformStruct(value) {
4459
- return (isObj(value)) && (value.length === undefined) && value.assignRenderer === undefined;
4471
+ return (isObj(value)) && (value.length === undefined);
4460
4472
  }
4461
4473
  function isUniformStructArray(value) {
4462
4474
  return (value) && (value.length !== undefined) && isUniformStruct(value[0]);
4463
4475
  }
4464
4476
  var MarsMaterialDataBlock = /** @class */ (function () {
4465
4477
  function MarsMaterialDataBlock(props, renderer) {
4478
+ var _this = this;
4466
4479
  this._isDestroyed = false;
4467
4480
  this._isDestroyed = false;
4468
4481
  this.name = props.name || 'defDataBlock';
4469
4482
  this._uniformValues = {};
4470
4483
  this._uniformFlags = {};
4471
4484
  this.uboBufferMap = {};
4485
+ this._uniformTextures = {};
4472
4486
  this._uniformValueRanges = {};
4473
4487
  this._keepUboData = !!props.keepUboData;
4488
+ this.uniformSemantics = props.uniformSemantics || {};
4489
+ this._uniformPrivate = {};
4474
4490
  if (props.uniformValues) {
4475
4491
  this.setUniformValues(props.uniformValues);
4476
4492
  }
4493
+ forEach(props.uniformTextures, function (tex, name) { return _this.setUniformTexture(name, tex); });
4477
4494
  if (renderer) {
4478
4495
  this.assignRenderer(renderer);
4479
4496
  }
@@ -4511,6 +4528,20 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4511
4528
  enumerable: false,
4512
4529
  configurable: true
4513
4530
  });
4531
+ MarsMaterialDataBlock.prototype.setUniformTexture = function (uniformName, texture) {
4532
+ if (texture) {
4533
+ this._uniformTextures[uniformName] = texture;
4534
+ this._assignUniformValueRenderer(texture, this.renderer);
4535
+ this._uniformPrivate[uniformName] = true;
4536
+ }
4537
+ else {
4538
+ delete this._uniformTextures[uniformName];
4539
+ delete this._uniformPrivate[uniformName];
4540
+ }
4541
+ };
4542
+ MarsMaterialDataBlock.prototype.getUniformTexture = function (uniformName) {
4543
+ return this._uniformTextures[uniformName];
4544
+ };
4514
4545
  MarsMaterialDataBlock.prototype.assignRenderer = function (renderer) {
4515
4546
  var _this = this;
4516
4547
  if (this.renderer && renderer !== this.renderer) {
@@ -4519,7 +4550,7 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4519
4550
  if (renderer && !this.renderer) {
4520
4551
  // @ts-expect-error safe to assign
4521
4552
  this.renderer = renderer;
4522
- forEach(this._uniformValues, function (value) {
4553
+ forEach(this._uniformTextures, function (value) {
4523
4554
  _this._assignUniformValueRenderer(value, renderer);
4524
4555
  });
4525
4556
  }
@@ -4548,11 +4579,11 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4548
4579
  this._uniformFlags[name] = true;
4549
4580
  };
4550
4581
  MarsMaterialDataBlock.prototype.hasUniformValue = function (name) {
4551
- return name in this._uniformValues;
4582
+ return !!this._uniformPrivate[name];
4552
4583
  };
4553
4584
  MarsMaterialDataBlock.prototype.destroy = function (options) {
4554
4585
  if ((options === null || options === void 0 ? void 0 : options.textures) !== exports.DestroyOptions.keep) {
4555
- forEach(this._uniformValues, function (uniform) {
4586
+ forEach(this._uniformTextures, function (uniform) {
4556
4587
  if (uniform instanceof MarsTexture) {
4557
4588
  uniform.destroy();
4558
4589
  }
@@ -4565,10 +4596,13 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4565
4596
  });
4566
4597
  // @ts-expect-error safe to assign
4567
4598
  this.uboBufferMap = {};
4599
+ this._uniformPrivate = {};
4568
4600
  // @ts-expect-error safe to assign
4569
4601
  this._uniformFlags = {};
4570
4602
  // @ts-expect-error safe to assign
4571
4603
  this._uniformValues = {};
4604
+ // @ts-expect-error safe to assign
4605
+ this._uniformTextures = {};
4572
4606
  this.assignRenderer = throwDestroyedError;
4573
4607
  this._isDestroyed = true;
4574
4608
  };
@@ -4578,20 +4612,39 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4578
4612
  MarsMaterialDataBlock.prototype.getUniformValues = function () {
4579
4613
  return this._uniformValues;
4580
4614
  };
4581
- MarsMaterialDataBlock.prototype.setUniformValue = function (name, value) {
4615
+ MarsMaterialDataBlock.prototype.setUniformValue = function (name, value, isSemantic) {
4582
4616
  var _this = this;
4583
4617
  if (value === undefined) {
4618
+ var originValue = this._uniformValues[name];
4619
+ if (isUniformStruct(originValue)) {
4620
+ forEach(originValue, function (data, key) {
4621
+ var nameInStruct = name + '.' + key;
4622
+ delete _this._uniformPrivate[nameInStruct];
4623
+ });
4624
+ }
4625
+ else if (isUniformStructArray(originValue)) {
4626
+ originValue.forEach(function (valueData, i) {
4627
+ forEach(valueData, function (valueInStruct, key) {
4628
+ var nameInStruct = name + '[' + i + ']' + '.' + key;
4629
+ delete _this._uniformPrivate[nameInStruct];
4630
+ });
4631
+ });
4632
+ }
4584
4633
  delete this._uniformValues[name];
4585
4634
  this._uniformFlags[name] = false;
4635
+ delete this._uniformPrivate[name];
4636
+ }
4637
+ else if (value instanceof MarsTexture) {
4638
+ throw Error('setUniformValue not accept texture:' + name);
4586
4639
  }
4587
4640
  else {
4641
+ this._uniformPrivate[name] = !isSemantic;
4588
4642
  if (isUniformStruct(value)) {
4589
4643
  forEach(value, function (data, key) {
4590
4644
  var nameInStruct = name + '.' + key;
4591
- var valueInStruct = data;
4592
- _this._uniformValues[nameInStruct] = valueInStruct;
4645
+ _this._uniformValues[nameInStruct] = data;
4593
4646
  _this._uniformFlags[nameInStruct] = true;
4594
- _this._assignUniformValueRenderer(valueInStruct, _this.renderer);
4647
+ _this._uniformPrivate[nameInStruct] = true;
4595
4648
  });
4596
4649
  // 只是用来保存结构体对象
4597
4650
  this._uniformValues[name] = value;
@@ -4603,7 +4656,7 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4603
4656
  var nameInStruct = name + '[' + i + ']' + '.' + key;
4604
4657
  _this._uniformValues[nameInStruct] = valueInStruct;
4605
4658
  _this._uniformFlags[nameInStruct] = true;
4606
- _this._assignUniformValueRenderer(valueInStruct, _this.renderer);
4659
+ _this._uniformPrivate[nameInStruct] = true;
4607
4660
  });
4608
4661
  });
4609
4662
  // 只是用来保存结构体对象
@@ -4613,7 +4666,6 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4613
4666
  else {
4614
4667
  this._uniformValues[name] = value;
4615
4668
  this._uniformFlags[name] = true;
4616
- this._assignUniformValueRenderer(value, this.renderer);
4617
4669
  }
4618
4670
  }
4619
4671
  return true;
@@ -4624,10 +4676,21 @@ var MarsMaterialDataBlock = /** @class */ (function () {
4624
4676
  _this.setUniformValue(key, val);
4625
4677
  });
4626
4678
  };
4679
+ MarsMaterialDataBlock.prototype.setUniformSemantic = function (name, semantic) {
4680
+ if (semantic) {
4681
+ this.uniformSemantics[name] = semantic;
4682
+ }
4683
+ else {
4684
+ delete this.uniformSemantics[name];
4685
+ }
4686
+ };
4627
4687
  MarsMaterialDataBlock.prototype.clone = function (name) {
4628
4688
  return new MarsMaterialDataBlock({
4629
4689
  name: name,
4630
4690
  uniformValues: this._uniformValues,
4691
+ uniformTextures: this._uniformTextures,
4692
+ uniformSemantics: this.uniformSemantics,
4693
+ keepUboData: this._keepUboData,
4631
4694
  }, this.renderer);
4632
4695
  };
4633
4696
  return MarsMaterialDataBlock;
@@ -4642,13 +4705,10 @@ var MarsMaterial = /** @class */ (function () {
4642
4705
  this.renderType = 0 /* MaterialRenderType.normal */;
4643
4706
  this.states = this.createMaterialStates(options.states);
4644
4707
  this.options = options;
4708
+ this._dbMap = {};
4645
4709
  if (!this._dataBlocks.length) {
4646
- this._dataBlocks[0] = new MarsMaterialDataBlock({ name: '' });
4647
- }
4648
- if (options.uniformValues) {
4649
- this.defaultDataBlock.setUniformValues(options.uniformValues);
4710
+ this._dataBlocks[0] = new MarsMaterialDataBlock({ name: 'main' });
4650
4711
  }
4651
- this.uniformSemantics = Object.assign({}, options.uniformSemantics);
4652
4712
  }
4653
4713
  Object.defineProperty(MarsMaterial.prototype, "isDestroyed", {
4654
4714
  get: function () {
@@ -4659,7 +4719,7 @@ var MarsMaterial = /** @class */ (function () {
4659
4719
  });
4660
4720
  Object.defineProperty(MarsMaterial.prototype, "dataBlocks", {
4661
4721
  get: function () {
4662
- return this._dataBlocks.slice();
4722
+ return this._dataBlocks;
4663
4723
  },
4664
4724
  enumerable: false,
4665
4725
  configurable: true
@@ -4731,6 +4791,9 @@ var MarsMaterial = /** @class */ (function () {
4731
4791
  return Object.freeze(ret);
4732
4792
  };
4733
4793
  MarsMaterial.prototype.addDataBlock = function (b) {
4794
+ if (this.getDataBlockByName(b.name)) {
4795
+ throw Error('dataBlock with same name:' + b.name);
4796
+ }
4734
4797
  if (arrAdd(this._dataBlocks, b)) {
4735
4798
  b.invalidAllFlags();
4736
4799
  var r = this.renderer;
@@ -4739,16 +4802,19 @@ var MarsMaterial = /** @class */ (function () {
4739
4802
  }
4740
4803
  }
4741
4804
  };
4805
+ MarsMaterial.prototype.getDataBlockByName = function (name) {
4806
+ var cache = this._dbMap[name];
4807
+ if (!cache) {
4808
+ var db = this._dataBlocks.find(function (db) { return db.name === name; });
4809
+ if (db) {
4810
+ return this._dbMap[name] = db;
4811
+ }
4812
+ }
4813
+ return cache;
4814
+ };
4742
4815
  MarsMaterial.prototype.removeDataBlock = function (b) {
4743
4816
  arrRemove(this._dataBlocks, b);
4744
- };
4745
- MarsMaterial.prototype.setUniformSemantic = function (uniformName, semantic) {
4746
- if (semantic === undefined) {
4747
- delete this.uniformSemantics[uniformName];
4748
- }
4749
- else {
4750
- this.uniformSemantics[uniformName] = semantic;
4751
- }
4817
+ delete this._dbMap[b.name];
4752
4818
  };
4753
4819
  MarsMaterial.prototype.assignRenderer = function (renderer) {
4754
4820
  if (!this.materialInternal) {
@@ -5519,7 +5585,7 @@ var MarsExtWrap = /** @class */ (function () {
5519
5585
  fb.viewport[3] = target.height || source.height;
5520
5586
  renderer.internal.resetColorAttachments(fb, [target.internal]);
5521
5587
  var mesh = rp.meshes[0];
5522
- mesh.material.defaultDataBlock.setUniformValue('uTex', source);
5588
+ mesh.material.defaultDataBlock.setUniformTexture('uTex', source);
5523
5589
  RenderFrameInternal.renderRenderPass(renderer, rp, { currentFrame: {} });
5524
5590
  }
5525
5591
  }
@@ -5664,6 +5730,20 @@ var MarsRenderer = /** @class */ (function () {
5664
5730
  }
5665
5731
  }
5666
5732
  };
5733
+ MarsRenderer.prototype.cancelAnimationFrame = function (id) {
5734
+ return window.cancelAnimationFrame(id);
5735
+ };
5736
+ MarsRenderer.prototype.getErrors = function () {
5737
+ var gl = this.internal.gl;
5738
+ var err = gl.getError();
5739
+ if (err) {
5740
+ return ['webgl error:' + err];
5741
+ }
5742
+ return [];
5743
+ };
5744
+ MarsRenderer.prototype.requestAnimationFrame = function (cb) {
5745
+ return window.requestAnimationFrame(cb);
5746
+ };
5667
5747
  return MarsRenderer;
5668
5748
  }());
5669
5749
 
@@ -5730,7 +5810,7 @@ var MarsSharedGeometry = /** @class */ (function (_super) {
5730
5810
  return MarsSharedGeometry;
5731
5811
  }(MarsGeometry));
5732
5812
 
5733
- consoleLog('version: ' + "0.1.61-beta.2");
5813
+ consoleLog('version: ' + "0.1.61-beta.20");
5734
5814
 
5735
5815
  exports.Geometry = MarsGeometry;
5736
5816
  exports.InstancedMesh = MarsInstancedMesh;