@onerjs/core 8.31.8 → 8.31.9
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/Engines/WebGPU/Extensions/engine.multiRender.d.ts +2 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +5 -2
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
- package/Engines/WebGPU/webgpuTextureHelper.js +11 -0
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.d.ts +1 -0
- package/Engines/WebGPU/webgpuTextureManager.js +100 -9
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/renderTargetWrapper.js +6 -1
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +7 -4
- package/Engines/webgpuEngine.js +45 -16
- package/Engines/webgpuEngine.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +8 -5
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Particles/solidParticle.d.ts +9 -0
- package/Particles/solidParticle.js +11 -0
- package/Particles/solidParticle.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +28 -0
- package/Particles/solidParticleSystem.js +75 -0
- package/Particles/solidParticleSystem.js.map +1 -1
- package/package.json +1 -1
|
@@ -165,7 +165,12 @@ export class RenderTargetWrapper {
|
|
|
165
165
|
*/
|
|
166
166
|
generateMipMaps() {
|
|
167
167
|
if (this._engine._currentRenderTarget === this) {
|
|
168
|
-
this.
|
|
168
|
+
if (this.isMulti) {
|
|
169
|
+
this._engine.unBindMultiColorAttachmentFramebuffer(this, true);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
this._engine.unBindFramebuffer(this, true);
|
|
173
|
+
}
|
|
169
174
|
}
|
|
170
175
|
if (this.isMulti) {
|
|
171
176
|
this._engine.generateMipMapsMultiFramebuffer(this);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderTargetWrapper.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/renderTargetWrapper.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,gBAAgB,EAAE,yDAAwD;AAYnF;;GAEG;AACH,MAAM,OAAO,mBAAmB;IA6B5B;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACI,sBAAsB,CAAC,OAAkC,EAAE,eAAe,GAAG,IAAI;QACpF,IAAI,eAAe,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC/C,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC;QAEpC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,+BAA+B,GAAG,KAAK,CAAC;QAEvG,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,+BAA+B,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1G,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAW,8BAA8B;QACrC,OAAO,IAAI,CAAC,+BAA+B,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAA2C,IAAI,CAAC,KAAM,CAAC,KAAK,IAAY,IAAI,CAAC,KAAK,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAA2C,IAAI,CAAC,KAAM,CAAC,MAAM,IAAY,IAAI,CAAC,KAAK,CAAC;IACxF,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAA4E,IAAI,CAAC,KAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACxG,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAA4E,IAAI,CAAC,KAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IACvG,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAiCD;;;;;OAKG;IACI,iBAAiB,CAAC,KAAa;QAClC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACI,UAAU,CAAC,KAAa,EAAE,iBAAiB,GAAG,IAAI,EAAE,KAAK,GAAG,KAAK;QACpE,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ;YACxB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,4CAA4C,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC;YAC3F,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,oCAAoC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;OAGG;IACI,mBAAmB;QACtB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;IAED;;OAEG;IACI,eAAe;QAClB,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,YAAY,OAAgB,EAAE,MAAe,EAAE,IAAiB,EAAE,MAAsB,EAAE,KAAc;QAlQhG,cAAS,GAAgC,IAAI,CAAC;QAC9C,iBAAY,GAAuB,IAAI,CAAC;QACxC,kBAAa,GAAuB,IAAI,CAAC;QAEjD,gBAAgB;QACT,aAAQ,GAAG,CAAC,CAAC;QAEpB,gBAAgB;QACT,iBAAY,GAAuB,IAAI,CAAC;QAC/C,gBAAgB;QACT,2BAAsB,GAAY,KAAK,CAAC;QAC/C,gBAAgB;QACT,yBAAoB,GAAY,KAAK,CAAC;QAI7C,gBAAgB;QACT,oCAA+B,GAAY,KAAK,CAAC;QAoIxD;;WAEG;QACI,gCAA2B,GAAG,KAAK,CAAC;QAE3C;;;WAGG;QACI,sBAAiB,GAAG,IAAI,CAAC;QAEhC;;WAEG;QACI,qBAAgB,GAAG,KAAK,CAAC;QAEhC;;WAEG;QACI,uBAAkB,GAAG,KAAK,CAAC;QAElC;;WAEG;QACI,kBAAa,GAAG,KAAK,CAAC;QAE7B;;WAEG;QACI,oBAAe,GAAG,KAAK,CAAC;QAiF3B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED;;;OAGG;IACI,WAAW,CAAC,QAAiE;QAChF,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC9B,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,UAAU,CAAC,OAAwB,EAAE,QAAgB,CAAC,EAAE,kBAA2B,IAAI;QAC1F,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC;YACpC,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;YAC3C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACI,sBAAsB,CAAC,MAAgB,EAAE,KAAe;QAC3D,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACI,oBAAoB,CAAC,QAAgB,CAAC,EAAE,KAAc,EAAE,IAAa;QACxE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACtC,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACpC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACI,yBAAyB,CAC5B,qBAA6B,CAAC,EAC9B,oBAA6B,IAAI,EACjC,kBAA2B,KAAK,EAChC,UAAkB,CAAC,EACnB,SAAiB,SAAS,CAAC,2BAA2B,EACtD,KAAc;QAEd,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE,CAAC;QAErC,IAAI,CAAC,+BAA+B,GAAG,eAAe,CAAC;QACvD,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;QACvC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAC9D,IAAI,CAAC,KAAK,EACV;YACI,iBAAiB;YACjB,kBAAkB;YAClB,eAAe;YACf,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,OAAO;YACP,kBAAkB,EAAE,MAAM;YAC1B,KAAK;SACR,EACD,IAAI,CACP,CAAC;QAEF,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED;;;OAGG;IACI,WAAW,CAAC,YAAiC;QAChD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,YAAiC;QAC/C,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,YAAY,CAAC,oBAAoB,EAAE,CAAC;gBACpC,YAAY,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;YAChD,CAAC;YAED,YAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC9D,YAAY,CAAC,+BAA+B,GAAG,IAAI,CAAC,+BAA+B,CAAC;YACpF,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC;QACpD,CAAC;IACL,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,MAAuB;QACtC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAES,yBAAyB;QAC/B,IAAI,GAAG,GAAkC,IAAI,CAAC;QAE9C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;YACnC,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,IAAI,oBAAoB,GAAG,KAAK,CAAC;gBACjC,IAAI,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;gBACvC,IAAI,kBAAkB,GAAG,CAAC,CAAC,CAAC;gBAE5B,MAAM,iBAAiB,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;gBACxE,IAAI,iBAAiB,yCAAgC,IAAI,iBAAiB,gDAAuC,EAAE,CAAC;oBAChH,oBAAoB,GAAG,IAAI,CAAC;oBAC5B,kBAAkB,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;oBAClE,YAAY,EAAE,CAAC;gBACnB,CAAC;gBAED,MAAM,aAAa,GAAa,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAa,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAa,EAAE,CAAC;gBACjC,MAAM,SAAS,GAAa,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;gBAChC,MAAM,WAAW,GAAa,EAAE,CAAC;gBACjC,MAAM,qBAAqB,GAA6B,EAAE,CAAC;gBAE3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC;oBACpC,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAEhC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBACzC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAE7B,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACtD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBACtB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBACrB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACJ,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;wBAC5C,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;4BACpB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;4BAC7C,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACpC,CAAC;6BAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;4BACxB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;4BAC7C,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACxB,CAAC,CAAC;;;2BAGC;6BAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;4BACxB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;4BACvC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACpC,CAAC;6BAAM,CAAC;4BACJ,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;4BACvC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACxB,CAAC;oBACL,CAAC;oBAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBACpB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC9C,CAAC;oBACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAChD,CAAC;gBACL,CAAC;gBAED,MAAM,UAAU,GAA8B;oBAC1C,aAAa;oBACb,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,eAAe;oBAChD,mBAAmB,EAAE,IAAI,CAAC,oBAAoB;oBAC9C,qBAAqB,EAAE,IAAI,CAAC,sBAAsB;oBAClD,oBAAoB;oBACpB,kBAAkB;oBAClB,KAAK;oBACL,OAAO;oBACP,YAAY;oBACZ,WAAW;oBACX,SAAS;oBACT,UAAU;oBACV,WAAW;oBACX,KAAK,EAAE,IAAI,CAAC,KAAK;iBACpB,CAAC;gBACF,MAAM,IAAI,GAAG;oBACT,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;iBACpB,CAAC;gBAEF,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC;oBACpC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;wBACxB,SAAS;oBACb,CAAC;oBACD,MAAM,KAAK,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAC9D,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5C,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,OAAO,GAAgC,EAAE,CAAC;YAEhD,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC;YACxD,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,IAAI,KAAK,CAAC;YACjE,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC;YAC5D,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;YAClD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;YACtC,OAAO,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YAC5C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAE3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,GAAG;oBACT,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS;iBACxE,CAAC;gBAEF,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/B,CAAC;QACL,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAES,wBAAwB,CAAC,MAA2B;QAC1D,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;YACvC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,oBAAoB,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC3D,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACnE,MAAM,CAAC,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;IACrC,CAAC;IAED,gBAAgB;IACT,QAAQ;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;YAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YAChD,MAAM,QAAQ,GACV,YAAY,KAAK,SAAS,CAAC,6BAA6B;gBACxD,YAAY,KAAK,SAAS,CAAC,8BAA8B;gBACzD,YAAY,KAAK,SAAS,CAAC,gCAAgC,CAAC;YAEhE,GAAG,CAAC,yBAAyB,CACzB,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAC7C,QAAQ,EACR,IAAI,CAAC,+BAA+B,EACpC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EACjC,MAAM,EACN,IAAI,CAAC,yBAAyB,CACjC,CAAC;QACN,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACnB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAED,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACnC,GAAG,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACI,eAAe;QAClB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAChC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,uBAAuB,GAAG,KAAK;QAC1C,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC3B,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE,CAAC;YACrC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;CACJ","sourcesContent":["import type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport type { RenderTargetCreationOptions, TextureSize } from \"../Materials/Textures/textureCreationOptions\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Constants } from \"./constants\";\r\nimport type { AbstractEngine } from \"./abstractEngine\";\r\nimport type { IMultiRenderTargetOptions } from \"../Materials/Textures/multiRenderTarget\";\r\nimport { HasStencilAspect } from \"core/Materials/Textures/textureHelper.functions\";\r\n\r\n/**\r\n * An interface enforcing the renderTarget accessor to used by render target textures.\r\n */\r\nexport interface IRenderTargetTexture {\r\n /**\r\n * Entry point to access the wrapper on a texture.\r\n */\r\n renderTarget: Nullable<RenderTargetWrapper>;\r\n}\r\n\r\n/**\r\n * Wrapper around a render target (either single or multi textures)\r\n */\r\nexport class RenderTargetWrapper {\r\n protected _engine: AbstractEngine;\r\n private _size: TextureSize;\r\n private _isCube: boolean;\r\n private _isMulti: boolean;\r\n private _textures: Nullable<InternalTexture[]> = null;\r\n private _faceIndices: Nullable<number[]> = null;\r\n private _layerIndices: Nullable<number[]> = null;\r\n private _depthStencilTextureLabel?: string;\r\n /** @internal */\r\n public _samples = 1;\r\n\r\n /** @internal */\r\n public _attachments: Nullable<number[]> = null;\r\n /** @internal */\r\n public _generateStencilBuffer: boolean = false;\r\n /** @internal */\r\n public _generateDepthBuffer: boolean = false;\r\n\r\n /** @internal */\r\n public _depthStencilTexture: Nullable<InternalTexture>;\r\n /** @internal */\r\n public _depthStencilTextureWithStencil: boolean = false;\r\n\r\n /**\r\n * Gets or sets the label of the render target wrapper (optional, for debugging purpose)\r\n */\r\n public label?: string;\r\n\r\n /**\r\n * Gets the depth/stencil texture\r\n */\r\n public get depthStencilTexture() {\r\n return this._depthStencilTexture;\r\n }\r\n\r\n /**\r\n * Sets the depth/stencil texture\r\n * @param texture The depth/stencil texture to set\r\n * @param disposeExisting True to dispose the existing depth/stencil texture (if any) before replacing it (default: true)\r\n */\r\n public setDepthStencilTexture(texture: Nullable<InternalTexture>, disposeExisting = true) {\r\n if (disposeExisting && this._depthStencilTexture) {\r\n this._depthStencilTexture.dispose();\r\n }\r\n\r\n this._depthStencilTexture = texture;\r\n\r\n this._generateDepthBuffer = this._generateStencilBuffer = this._depthStencilTextureWithStencil = false;\r\n\r\n if (texture) {\r\n this._generateDepthBuffer = true;\r\n this._generateStencilBuffer = this._depthStencilTextureWithStencil = HasStencilAspect(texture.format);\r\n }\r\n }\r\n\r\n /**\r\n * Indicates if the depth/stencil texture has a stencil aspect\r\n */\r\n public get depthStencilTextureWithStencil() {\r\n return this._depthStencilTextureWithStencil;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a cube texture or if false a 2d texture\r\n */\r\n public get isCube(): boolean {\r\n return this._isCube;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a single or multi target render wrapper\r\n */\r\n public get isMulti(): boolean {\r\n return this._isMulti;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a single or an array of textures\r\n */\r\n public get is2DArray(): boolean {\r\n return this.layers > 0;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a 3D texture\r\n */\r\n public get is3D(): boolean {\r\n return this.depth > 0;\r\n }\r\n\r\n /**\r\n * Gets the size of the render target wrapper (used for cubes, as width=height in this case)\r\n */\r\n public get size(): number {\r\n return this.width;\r\n }\r\n\r\n /**\r\n * Gets the width of the render target wrapper\r\n */\r\n public get width(): number {\r\n return (<{ width: number; height: number }>this._size).width ?? <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the height of the render target wrapper\r\n */\r\n public get height(): number {\r\n return (<{ width: number; height: number }>this._size).height ?? <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the number of layers of the render target wrapper (only used if is2DArray is true and wrapper is not a multi render target)\r\n */\r\n public get layers(): number {\r\n return (<{ width: number; height: number; depth?: number; layers?: number }>this._size).layers || 0;\r\n }\r\n\r\n /**\r\n * Gets the depth of the render target wrapper (only used if is3D is true and wrapper is not a multi render target)\r\n */\r\n public get depth(): number {\r\n return (<{ width: number; height: number; depth?: number; layers?: number }>this._size).depth || 0;\r\n }\r\n\r\n /**\r\n * Gets the render texture. If this is a multi render target, gets the first texture\r\n */\r\n public get texture(): Nullable<InternalTexture> {\r\n return this._textures?.[0] ?? null;\r\n }\r\n\r\n /**\r\n * Gets the list of render textures. If we are not in a multi render target, the list will be null (use the texture getter instead)\r\n */\r\n public get textures(): Nullable<InternalTexture[]> {\r\n return this._textures;\r\n }\r\n\r\n /**\r\n * Gets the face indices that correspond to the list of render textures. If we are not in a multi render target, the list will be null\r\n */\r\n public get faceIndices(): Nullable<number[]> {\r\n return this._faceIndices;\r\n }\r\n\r\n /**\r\n * Gets the layer indices that correspond to the list of render textures. If we are not in a multi render target, the list will be null\r\n */\r\n public get layerIndices(): Nullable<number[]> {\r\n return this._layerIndices;\r\n }\r\n\r\n /**\r\n * Sets this property to true to disable the automatic MSAA resolve that happens when the render target wrapper is unbound (default is false)\r\n */\r\n public disableAutomaticMSAAResolve = false;\r\n\r\n /**\r\n * Indicates if MSAA color texture(s) should be resolved when a resolve occur (either automatically by the engine or manually by the user) (default is true)\r\n * Note that you can trigger a MSAA resolve at any time by calling resolveMSAATextures()\r\n */\r\n public resolveMSAAColors = true;\r\n\r\n /**\r\n * Indicates if MSAA depth texture should be resolved when a resolve occur (either automatically by the engine or manually by the user) (default is false)\r\n */\r\n public resolveMSAADepth = false;\r\n\r\n /**\r\n * Indicates if MSAA stencil texture should be resolved when a resolve occur (either automatically by the engine or manually by the user) (default is false)\r\n */\r\n public resolveMSAAStencil = false;\r\n\r\n /**\r\n * Indicates if the depth texture is in read-only mode (may allow some optimizations in WebGPU)\r\n */\r\n public depthReadOnly = false;\r\n\r\n /**\r\n * Indicates if the stencil texture is in read-only mode (may allow some optimizations in WebGPU)\r\n */\r\n public stencilReadOnly = false;\r\n\r\n /**\r\n * Gets the base array layer of a texture in the textures array\r\n * This is an number that is calculated based on the layer and face indices set for this texture at that index\r\n * @param index The index of the texture in the textures array to get the base array layer for\r\n * @returns the base array layer of the texture at the given index\r\n */\r\n public getBaseArrayLayer(index: number): number {\r\n if (!this._textures) {\r\n return -1;\r\n }\r\n\r\n const texture = this._textures[index];\r\n const layerIndex = this._layerIndices?.[index] ?? 0;\r\n const faceIndex = this._faceIndices?.[index] ?? 0;\r\n\r\n return texture.isCube ? layerIndex * 6 + faceIndex : texture.is3D ? 0 : layerIndex;\r\n }\r\n\r\n /**\r\n * Gets the sample count of the render target\r\n */\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n /**\r\n * Sets the sample count of the render target\r\n * @param value sample count\r\n * @param initializeBuffers If set to true, the engine will make an initializing call to drawBuffers (only used when isMulti=true).\r\n * @param force true to force calling the update sample count engine function even if the current sample count is equal to value\r\n * @returns the sample count that has been set\r\n */\r\n public setSamples(value: number, initializeBuffers = true, force = false): number {\r\n if (this.samples === value && !force) {\r\n return value;\r\n }\r\n\r\n const result = this._isMulti\r\n ? this._engine.updateMultipleRenderTargetTextureSampleCount(this, value, initializeBuffers)\r\n : this._engine.updateRenderTargetTextureSampleCount(this, value);\r\n this._samples = value;\r\n return result;\r\n }\r\n\r\n /**\r\n * Resolves the MSAA textures into their non-MSAA version.\r\n * Note that if samples equals 1 (no MSAA), no resolve is performed.\r\n */\r\n public resolveMSAATextures(): void {\r\n if (this.isMulti) {\r\n this._engine.resolveMultiFramebuffer(this);\r\n } else {\r\n this._engine.resolveFramebuffer(this);\r\n }\r\n }\r\n\r\n /**\r\n * Generates mipmaps for each texture of the render target\r\n */\r\n public generateMipMaps(): void {\r\n if (this._engine._currentRenderTarget === this) {\r\n this._engine.unBindFramebuffer(this, true);\r\n }\r\n if (this.isMulti) {\r\n this._engine.generateMipMapsMultiFramebuffer(this);\r\n } else {\r\n this._engine.generateMipMapsFramebuffer(this);\r\n }\r\n }\r\n\r\n /**\r\n * Initializes the render target wrapper\r\n * @param isMulti true if the wrapper is a multi render target\r\n * @param isCube true if the wrapper should render to a cube texture\r\n * @param size size of the render target (width/height/layers)\r\n * @param engine engine used to create the render target\r\n * @param label defines the label to use for the wrapper (for debugging purpose only)\r\n */\r\n constructor(isMulti: boolean, isCube: boolean, size: TextureSize, engine: AbstractEngine, label?: string) {\r\n this._isMulti = isMulti;\r\n this._isCube = isCube;\r\n this._size = size;\r\n this._engine = engine;\r\n this._depthStencilTexture = null;\r\n this.label = label;\r\n }\r\n\r\n /**\r\n * Sets the render target texture(s)\r\n * @param textures texture(s) to set\r\n */\r\n public setTextures(textures: Nullable<InternalTexture> | Nullable<InternalTexture[]>): void {\r\n if (Array.isArray(textures)) {\r\n this._textures = textures;\r\n } else if (textures) {\r\n this._textures = [textures];\r\n } else {\r\n this._textures = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set a texture in the textures array\r\n * @param texture The texture to set\r\n * @param index The index in the textures array to set\r\n * @param disposePrevious If this function should dispose the previous texture\r\n */\r\n public setTexture(texture: InternalTexture, index: number = 0, disposePrevious: boolean = true): void {\r\n if (!this._textures) {\r\n this._textures = [];\r\n }\r\n if (this._textures[index] === texture) {\r\n return;\r\n }\r\n\r\n if (this._textures[index] && disposePrevious) {\r\n this._textures[index].dispose();\r\n }\r\n\r\n this._textures[index] = texture;\r\n }\r\n\r\n /**\r\n * Sets the layer and face indices of every render target texture bound to each color attachment\r\n * @param layers The layers of each texture to be set\r\n * @param faces The faces of each texture to be set\r\n */\r\n public setLayerAndFaceIndices(layers: number[], faces: number[]) {\r\n this._layerIndices = layers;\r\n this._faceIndices = faces;\r\n }\r\n\r\n /**\r\n * Sets the layer and face indices of a texture in the textures array that should be bound to each color attachment\r\n * @param index The index of the texture in the textures array to modify\r\n * @param layer The layer of the texture to be set\r\n * @param face The face of the texture to be set\r\n */\r\n public setLayerAndFaceIndex(index: number = 0, layer?: number, face?: number): void {\r\n if (!this._layerIndices) {\r\n this._layerIndices = [];\r\n }\r\n if (!this._faceIndices) {\r\n this._faceIndices = [];\r\n }\r\n\r\n if (layer !== undefined && layer >= 0) {\r\n this._layerIndices[index] = layer;\r\n }\r\n if (face !== undefined && face >= 0) {\r\n this._faceIndices[index] = face;\r\n }\r\n }\r\n\r\n /**\r\n * Creates the depth/stencil texture\r\n * @param comparisonFunction Comparison function to use for the texture\r\n * @param bilinearFiltering true if bilinear filtering should be used when sampling the texture\r\n * @param generateStencil Not used anymore. \"format\" will be used to determine if stencil should be created\r\n * @param samples sample count to use when creating the texture (default: 1)\r\n * @param format format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH32_FLOAT)\r\n * @param label defines the label to use for the texture (for debugging purpose only)\r\n * @returns the depth/stencil created texture\r\n */\r\n public createDepthStencilTexture(\r\n comparisonFunction: number = 0,\r\n bilinearFiltering: boolean = true,\r\n generateStencil: boolean = false,\r\n samples: number = 1,\r\n format: number = Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n label?: string\r\n ): InternalTexture {\r\n this._depthStencilTexture?.dispose();\r\n\r\n this._depthStencilTextureWithStencil = generateStencil;\r\n this._depthStencilTextureLabel = label;\r\n this._depthStencilTexture = this._engine.createDepthStencilTexture(\r\n this._size,\r\n {\r\n bilinearFiltering,\r\n comparisonFunction,\r\n generateStencil,\r\n isCube: this._isCube,\r\n samples,\r\n depthTextureFormat: format,\r\n label,\r\n },\r\n this\r\n );\r\n\r\n return this._depthStencilTexture;\r\n }\r\n\r\n /**\r\n * @deprecated Use shareDepth instead\r\n * @param renderTarget Destination renderTarget\r\n */\r\n public _shareDepth(renderTarget: RenderTargetWrapper): void {\r\n this.shareDepth(renderTarget);\r\n }\r\n\r\n /**\r\n * Shares the depth buffer of this render target with another render target.\r\n * @param renderTarget Destination renderTarget\r\n */\r\n public shareDepth(renderTarget: RenderTargetWrapper): void {\r\n if (this._depthStencilTexture) {\r\n if (renderTarget._depthStencilTexture) {\r\n renderTarget._depthStencilTexture.dispose();\r\n }\r\n\r\n renderTarget._depthStencilTexture = this._depthStencilTexture;\r\n renderTarget._depthStencilTextureWithStencil = this._depthStencilTextureWithStencil;\r\n this._depthStencilTexture.incrementReferences();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _swapAndDie(target: InternalTexture): void {\r\n if (this.texture) {\r\n this.texture._swapAndDie(target);\r\n }\r\n this._textures = null;\r\n this.dispose(true);\r\n }\r\n\r\n protected _cloneRenderTargetWrapper(): Nullable<RenderTargetWrapper> {\r\n let rtw: Nullable<RenderTargetWrapper> = null;\r\n\r\n if (this._isMulti) {\r\n const textureArray = this.textures;\r\n if (textureArray && textureArray.length > 0) {\r\n let generateDepthTexture = false;\r\n let textureCount = textureArray.length;\r\n let depthTextureFormat = -1;\r\n\r\n const lastTextureSource = textureArray[textureArray.length - 1]._source;\r\n if (lastTextureSource === InternalTextureSource.Depth || lastTextureSource === InternalTextureSource.DepthStencil) {\r\n generateDepthTexture = true;\r\n depthTextureFormat = textureArray[textureArray.length - 1].format;\r\n textureCount--;\r\n }\r\n\r\n const samplingModes: number[] = [];\r\n const types: number[] = [];\r\n const formats: number[] = [];\r\n const targetTypes: number[] = [];\r\n const faceIndex: number[] = [];\r\n const layerIndex: number[] = [];\r\n const layerCounts: number[] = [];\r\n const internalTexture2Index: { [id: number]: number } = {};\r\n\r\n for (let i = 0; i < textureCount; ++i) {\r\n const texture = textureArray[i];\r\n\r\n samplingModes.push(texture.samplingMode);\r\n types.push(texture.type);\r\n formats.push(texture.format);\r\n\r\n const index = internalTexture2Index[texture.uniqueId];\r\n if (index !== undefined) {\r\n targetTypes.push(-1);\r\n layerCounts.push(0);\r\n } else {\r\n internalTexture2Index[texture.uniqueId] = i;\r\n if (texture.is2DArray) {\r\n targetTypes.push(Constants.TEXTURE_2D_ARRAY);\r\n layerCounts.push(texture.depth);\r\n } else if (texture.isCube) {\r\n targetTypes.push(Constants.TEXTURE_CUBE_MAP);\r\n layerCounts.push(0);\r\n } /*else if (texture.isCubeArray) {\r\n targetTypes.push(Constants.TEXTURE_CUBE_MAP_ARRAY);\r\n layerCounts.push(texture.depth);\r\n }*/ else if (texture.is3D) {\r\n targetTypes.push(Constants.TEXTURE_3D);\r\n layerCounts.push(texture.depth);\r\n } else {\r\n targetTypes.push(Constants.TEXTURE_2D);\r\n layerCounts.push(0);\r\n }\r\n }\r\n\r\n if (this._faceIndices) {\r\n faceIndex.push(this._faceIndices[i] ?? 0);\r\n }\r\n if (this._layerIndices) {\r\n layerIndex.push(this._layerIndices[i] ?? 0);\r\n }\r\n }\r\n\r\n const optionsMRT: IMultiRenderTargetOptions = {\r\n samplingModes,\r\n generateMipMaps: textureArray[0].generateMipMaps,\r\n generateDepthBuffer: this._generateDepthBuffer,\r\n generateStencilBuffer: this._generateStencilBuffer,\r\n generateDepthTexture,\r\n depthTextureFormat,\r\n types,\r\n formats,\r\n textureCount,\r\n targetTypes,\r\n faceIndex,\r\n layerIndex,\r\n layerCounts,\r\n label: this.label,\r\n };\r\n const size = {\r\n width: this.width,\r\n height: this.height,\r\n depth: this.depth,\r\n };\r\n\r\n rtw = this._engine.createMultipleRenderTarget(size, optionsMRT);\r\n\r\n for (let i = 0; i < textureCount; ++i) {\r\n if (targetTypes[i] !== -1) {\r\n continue;\r\n }\r\n const index = internalTexture2Index[textureArray[i].uniqueId];\r\n rtw.setTexture(rtw.textures![index], i);\r\n }\r\n }\r\n } else {\r\n const options: RenderTargetCreationOptions = {};\r\n\r\n options.generateDepthBuffer = this._generateDepthBuffer;\r\n options.generateMipMaps = this.texture?.generateMipMaps ?? false;\r\n options.generateStencilBuffer = this._generateStencilBuffer;\r\n options.samplingMode = this.texture?.samplingMode;\r\n options.type = this.texture?.type;\r\n options.format = this.texture?.format;\r\n options.noColorAttachment = !this._textures;\r\n options.label = this.label;\r\n\r\n if (this.isCube) {\r\n rtw = this._engine.createRenderTargetCubeTexture(this.width, options);\r\n } else {\r\n const size = {\r\n width: this.width,\r\n height: this.height,\r\n layers: this.is2DArray || this.is3D ? this.texture?.depth : undefined,\r\n };\r\n\r\n rtw = this._engine.createRenderTargetTexture(size, options);\r\n }\r\n if (rtw.texture) {\r\n rtw.texture.isReady = true;\r\n }\r\n }\r\n\r\n return rtw;\r\n }\r\n\r\n protected _swapRenderTargetWrapper(target: RenderTargetWrapper): void {\r\n if (this._textures && target._textures) {\r\n for (let i = 0; i < this._textures.length; ++i) {\r\n this._textures[i]._swapAndDie(target._textures[i], false);\r\n target._textures[i].isReady = true;\r\n }\r\n }\r\n if (this._depthStencilTexture && target._depthStencilTexture) {\r\n this._depthStencilTexture._swapAndDie(target._depthStencilTexture);\r\n target._depthStencilTexture.isReady = true;\r\n }\r\n\r\n this._textures = null;\r\n this._depthStencilTexture = null;\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n const rtw = this._cloneRenderTargetWrapper();\r\n if (!rtw) {\r\n return;\r\n }\r\n\r\n if (this._depthStencilTexture) {\r\n const samplingMode = this._depthStencilTexture.samplingMode;\r\n const format = this._depthStencilTexture.format;\r\n const bilinear =\r\n samplingMode === Constants.TEXTURE_BILINEAR_SAMPLINGMODE ||\r\n samplingMode === Constants.TEXTURE_TRILINEAR_SAMPLINGMODE ||\r\n samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST;\r\n\r\n rtw.createDepthStencilTexture(\r\n this._depthStencilTexture._comparisonFunction,\r\n bilinear,\r\n this._depthStencilTextureWithStencil,\r\n this._depthStencilTexture.samples,\r\n format,\r\n this._depthStencilTextureLabel\r\n );\r\n }\r\n\r\n if (this.samples > 1) {\r\n rtw.setSamples(this.samples);\r\n }\r\n\r\n rtw._swapRenderTargetWrapper(this);\r\n rtw.dispose();\r\n }\r\n\r\n /**\r\n * Releases the internal render textures\r\n */\r\n public releaseTextures(): void {\r\n if (this._textures) {\r\n for (let i = 0; i < this._textures.length; ++i) {\r\n this._textures[i].dispose();\r\n }\r\n }\r\n this._textures = null;\r\n }\r\n\r\n /**\r\n * Disposes the whole render target wrapper\r\n * @param disposeOnlyFramebuffers true if only the frame buffers should be released (used for the WebGL engine). If false, all the textures will also be released\r\n */\r\n public dispose(disposeOnlyFramebuffers = false): void {\r\n if (!disposeOnlyFramebuffers) {\r\n this._depthStencilTexture?.dispose();\r\n this._depthStencilTexture = null;\r\n this.releaseTextures();\r\n }\r\n\r\n this._engine._releaseRenderTargetWrapper(this);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"renderTargetWrapper.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/renderTargetWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport type { RenderTargetCreationOptions, TextureSize } from \"../Materials/Textures/textureCreationOptions\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Constants } from \"./constants\";\r\nimport type { AbstractEngine } from \"./abstractEngine\";\r\nimport type { IMultiRenderTargetOptions } from \"../Materials/Textures/multiRenderTarget\";\r\nimport { HasStencilAspect } from \"core/Materials/Textures/textureHelper.functions\";\r\n\r\n/**\r\n * An interface enforcing the renderTarget accessor to used by render target textures.\r\n */\r\nexport interface IRenderTargetTexture {\r\n /**\r\n * Entry point to access the wrapper on a texture.\r\n */\r\n renderTarget: Nullable<RenderTargetWrapper>;\r\n}\r\n\r\n/**\r\n * Wrapper around a render target (either single or multi textures)\r\n */\r\nexport class RenderTargetWrapper {\r\n protected _engine: AbstractEngine;\r\n private _size: TextureSize;\r\n private _isCube: boolean;\r\n private _isMulti: boolean;\r\n private _textures: Nullable<InternalTexture[]> = null;\r\n private _faceIndices: Nullable<number[]> = null;\r\n private _layerIndices: Nullable<number[]> = null;\r\n private _depthStencilTextureLabel?: string;\r\n /** @internal */\r\n public _samples = 1;\r\n\r\n /** @internal */\r\n public _attachments: Nullable<number[]> = null;\r\n /** @internal */\r\n public _generateStencilBuffer: boolean = false;\r\n /** @internal */\r\n public _generateDepthBuffer: boolean = false;\r\n\r\n /** @internal */\r\n public _depthStencilTexture: Nullable<InternalTexture>;\r\n /** @internal */\r\n public _depthStencilTextureWithStencil: boolean = false;\r\n\r\n /**\r\n * Gets or sets the label of the render target wrapper (optional, for debugging purpose)\r\n */\r\n public label?: string;\r\n\r\n /**\r\n * Gets the depth/stencil texture\r\n */\r\n public get depthStencilTexture() {\r\n return this._depthStencilTexture;\r\n }\r\n\r\n /**\r\n * Sets the depth/stencil texture\r\n * @param texture The depth/stencil texture to set\r\n * @param disposeExisting True to dispose the existing depth/stencil texture (if any) before replacing it (default: true)\r\n */\r\n public setDepthStencilTexture(texture: Nullable<InternalTexture>, disposeExisting = true) {\r\n if (disposeExisting && this._depthStencilTexture) {\r\n this._depthStencilTexture.dispose();\r\n }\r\n\r\n this._depthStencilTexture = texture;\r\n\r\n this._generateDepthBuffer = this._generateStencilBuffer = this._depthStencilTextureWithStencil = false;\r\n\r\n if (texture) {\r\n this._generateDepthBuffer = true;\r\n this._generateStencilBuffer = this._depthStencilTextureWithStencil = HasStencilAspect(texture.format);\r\n }\r\n }\r\n\r\n /**\r\n * Indicates if the depth/stencil texture has a stencil aspect\r\n */\r\n public get depthStencilTextureWithStencil() {\r\n return this._depthStencilTextureWithStencil;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a cube texture or if false a 2d texture\r\n */\r\n public get isCube(): boolean {\r\n return this._isCube;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a single or multi target render wrapper\r\n */\r\n public get isMulti(): boolean {\r\n return this._isMulti;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a single or an array of textures\r\n */\r\n public get is2DArray(): boolean {\r\n return this.layers > 0;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a 3D texture\r\n */\r\n public get is3D(): boolean {\r\n return this.depth > 0;\r\n }\r\n\r\n /**\r\n * Gets the size of the render target wrapper (used for cubes, as width=height in this case)\r\n */\r\n public get size(): number {\r\n return this.width;\r\n }\r\n\r\n /**\r\n * Gets the width of the render target wrapper\r\n */\r\n public get width(): number {\r\n return (<{ width: number; height: number }>this._size).width ?? <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the height of the render target wrapper\r\n */\r\n public get height(): number {\r\n return (<{ width: number; height: number }>this._size).height ?? <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the number of layers of the render target wrapper (only used if is2DArray is true and wrapper is not a multi render target)\r\n */\r\n public get layers(): number {\r\n return (<{ width: number; height: number; depth?: number; layers?: number }>this._size).layers || 0;\r\n }\r\n\r\n /**\r\n * Gets the depth of the render target wrapper (only used if is3D is true and wrapper is not a multi render target)\r\n */\r\n public get depth(): number {\r\n return (<{ width: number; height: number; depth?: number; layers?: number }>this._size).depth || 0;\r\n }\r\n\r\n /**\r\n * Gets the render texture. If this is a multi render target, gets the first texture\r\n */\r\n public get texture(): Nullable<InternalTexture> {\r\n return this._textures?.[0] ?? null;\r\n }\r\n\r\n /**\r\n * Gets the list of render textures. If we are not in a multi render target, the list will be null (use the texture getter instead)\r\n */\r\n public get textures(): Nullable<InternalTexture[]> {\r\n return this._textures;\r\n }\r\n\r\n /**\r\n * Gets the face indices that correspond to the list of render textures. If we are not in a multi render target, the list will be null\r\n */\r\n public get faceIndices(): Nullable<number[]> {\r\n return this._faceIndices;\r\n }\r\n\r\n /**\r\n * Gets the layer indices that correspond to the list of render textures. If we are not in a multi render target, the list will be null\r\n */\r\n public get layerIndices(): Nullable<number[]> {\r\n return this._layerIndices;\r\n }\r\n\r\n /**\r\n * Sets this property to true to disable the automatic MSAA resolve that happens when the render target wrapper is unbound (default is false)\r\n */\r\n public disableAutomaticMSAAResolve = false;\r\n\r\n /**\r\n * Indicates if MSAA color texture(s) should be resolved when a resolve occur (either automatically by the engine or manually by the user) (default is true)\r\n * Note that you can trigger a MSAA resolve at any time by calling resolveMSAATextures()\r\n */\r\n public resolveMSAAColors = true;\r\n\r\n /**\r\n * Indicates if MSAA depth texture should be resolved when a resolve occur (either automatically by the engine or manually by the user) (default is false)\r\n */\r\n public resolveMSAADepth = false;\r\n\r\n /**\r\n * Indicates if MSAA stencil texture should be resolved when a resolve occur (either automatically by the engine or manually by the user) (default is false)\r\n */\r\n public resolveMSAAStencil = false;\r\n\r\n /**\r\n * Indicates if the depth texture is in read-only mode (may allow some optimizations in WebGPU)\r\n */\r\n public depthReadOnly = false;\r\n\r\n /**\r\n * Indicates if the stencil texture is in read-only mode (may allow some optimizations in WebGPU)\r\n */\r\n public stencilReadOnly = false;\r\n\r\n /**\r\n * Gets the base array layer of a texture in the textures array\r\n * This is an number that is calculated based on the layer and face indices set for this texture at that index\r\n * @param index The index of the texture in the textures array to get the base array layer for\r\n * @returns the base array layer of the texture at the given index\r\n */\r\n public getBaseArrayLayer(index: number): number {\r\n if (!this._textures) {\r\n return -1;\r\n }\r\n\r\n const texture = this._textures[index];\r\n const layerIndex = this._layerIndices?.[index] ?? 0;\r\n const faceIndex = this._faceIndices?.[index] ?? 0;\r\n\r\n return texture.isCube ? layerIndex * 6 + faceIndex : texture.is3D ? 0 : layerIndex;\r\n }\r\n\r\n /**\r\n * Gets the sample count of the render target\r\n */\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n /**\r\n * Sets the sample count of the render target\r\n * @param value sample count\r\n * @param initializeBuffers If set to true, the engine will make an initializing call to drawBuffers (only used when isMulti=true).\r\n * @param force true to force calling the update sample count engine function even if the current sample count is equal to value\r\n * @returns the sample count that has been set\r\n */\r\n public setSamples(value: number, initializeBuffers = true, force = false): number {\r\n if (this.samples === value && !force) {\r\n return value;\r\n }\r\n\r\n const result = this._isMulti\r\n ? this._engine.updateMultipleRenderTargetTextureSampleCount(this, value, initializeBuffers)\r\n : this._engine.updateRenderTargetTextureSampleCount(this, value);\r\n this._samples = value;\r\n return result;\r\n }\r\n\r\n /**\r\n * Resolves the MSAA textures into their non-MSAA version.\r\n * Note that if samples equals 1 (no MSAA), no resolve is performed.\r\n */\r\n public resolveMSAATextures(): void {\r\n if (this.isMulti) {\r\n this._engine.resolveMultiFramebuffer(this);\r\n } else {\r\n this._engine.resolveFramebuffer(this);\r\n }\r\n }\r\n\r\n /**\r\n * Generates mipmaps for each texture of the render target\r\n */\r\n public generateMipMaps(): void {\r\n if (this._engine._currentRenderTarget === this) {\r\n if (this.isMulti) {\r\n this._engine.unBindMultiColorAttachmentFramebuffer(this, true);\r\n } else {\r\n this._engine.unBindFramebuffer(this, true);\r\n }\r\n }\r\n if (this.isMulti) {\r\n this._engine.generateMipMapsMultiFramebuffer(this);\r\n } else {\r\n this._engine.generateMipMapsFramebuffer(this);\r\n }\r\n }\r\n\r\n /**\r\n * Initializes the render target wrapper\r\n * @param isMulti true if the wrapper is a multi render target\r\n * @param isCube true if the wrapper should render to a cube texture\r\n * @param size size of the render target (width/height/layers)\r\n * @param engine engine used to create the render target\r\n * @param label defines the label to use for the wrapper (for debugging purpose only)\r\n */\r\n constructor(isMulti: boolean, isCube: boolean, size: TextureSize, engine: AbstractEngine, label?: string) {\r\n this._isMulti = isMulti;\r\n this._isCube = isCube;\r\n this._size = size;\r\n this._engine = engine;\r\n this._depthStencilTexture = null;\r\n this.label = label;\r\n }\r\n\r\n /**\r\n * Sets the render target texture(s)\r\n * @param textures texture(s) to set\r\n */\r\n public setTextures(textures: Nullable<InternalTexture> | Nullable<InternalTexture[]>): void {\r\n if (Array.isArray(textures)) {\r\n this._textures = textures;\r\n } else if (textures) {\r\n this._textures = [textures];\r\n } else {\r\n this._textures = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set a texture in the textures array\r\n * @param texture The texture to set\r\n * @param index The index in the textures array to set\r\n * @param disposePrevious If this function should dispose the previous texture\r\n */\r\n public setTexture(texture: InternalTexture, index: number = 0, disposePrevious: boolean = true): void {\r\n if (!this._textures) {\r\n this._textures = [];\r\n }\r\n if (this._textures[index] === texture) {\r\n return;\r\n }\r\n\r\n if (this._textures[index] && disposePrevious) {\r\n this._textures[index].dispose();\r\n }\r\n\r\n this._textures[index] = texture;\r\n }\r\n\r\n /**\r\n * Sets the layer and face indices of every render target texture bound to each color attachment\r\n * @param layers The layers of each texture to be set\r\n * @param faces The faces of each texture to be set\r\n */\r\n public setLayerAndFaceIndices(layers: number[], faces: number[]) {\r\n this._layerIndices = layers;\r\n this._faceIndices = faces;\r\n }\r\n\r\n /**\r\n * Sets the layer and face indices of a texture in the textures array that should be bound to each color attachment\r\n * @param index The index of the texture in the textures array to modify\r\n * @param layer The layer of the texture to be set\r\n * @param face The face of the texture to be set\r\n */\r\n public setLayerAndFaceIndex(index: number = 0, layer?: number, face?: number): void {\r\n if (!this._layerIndices) {\r\n this._layerIndices = [];\r\n }\r\n if (!this._faceIndices) {\r\n this._faceIndices = [];\r\n }\r\n\r\n if (layer !== undefined && layer >= 0) {\r\n this._layerIndices[index] = layer;\r\n }\r\n if (face !== undefined && face >= 0) {\r\n this._faceIndices[index] = face;\r\n }\r\n }\r\n\r\n /**\r\n * Creates the depth/stencil texture\r\n * @param comparisonFunction Comparison function to use for the texture\r\n * @param bilinearFiltering true if bilinear filtering should be used when sampling the texture\r\n * @param generateStencil Not used anymore. \"format\" will be used to determine if stencil should be created\r\n * @param samples sample count to use when creating the texture (default: 1)\r\n * @param format format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH32_FLOAT)\r\n * @param label defines the label to use for the texture (for debugging purpose only)\r\n * @returns the depth/stencil created texture\r\n */\r\n public createDepthStencilTexture(\r\n comparisonFunction: number = 0,\r\n bilinearFiltering: boolean = true,\r\n generateStencil: boolean = false,\r\n samples: number = 1,\r\n format: number = Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n label?: string\r\n ): InternalTexture {\r\n this._depthStencilTexture?.dispose();\r\n\r\n this._depthStencilTextureWithStencil = generateStencil;\r\n this._depthStencilTextureLabel = label;\r\n this._depthStencilTexture = this._engine.createDepthStencilTexture(\r\n this._size,\r\n {\r\n bilinearFiltering,\r\n comparisonFunction,\r\n generateStencil,\r\n isCube: this._isCube,\r\n samples,\r\n depthTextureFormat: format,\r\n label,\r\n },\r\n this\r\n );\r\n\r\n return this._depthStencilTexture;\r\n }\r\n\r\n /**\r\n * @deprecated Use shareDepth instead\r\n * @param renderTarget Destination renderTarget\r\n */\r\n public _shareDepth(renderTarget: RenderTargetWrapper): void {\r\n this.shareDepth(renderTarget);\r\n }\r\n\r\n /**\r\n * Shares the depth buffer of this render target with another render target.\r\n * @param renderTarget Destination renderTarget\r\n */\r\n public shareDepth(renderTarget: RenderTargetWrapper): void {\r\n if (this._depthStencilTexture) {\r\n if (renderTarget._depthStencilTexture) {\r\n renderTarget._depthStencilTexture.dispose();\r\n }\r\n\r\n renderTarget._depthStencilTexture = this._depthStencilTexture;\r\n renderTarget._depthStencilTextureWithStencil = this._depthStencilTextureWithStencil;\r\n this._depthStencilTexture.incrementReferences();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _swapAndDie(target: InternalTexture): void {\r\n if (this.texture) {\r\n this.texture._swapAndDie(target);\r\n }\r\n this._textures = null;\r\n this.dispose(true);\r\n }\r\n\r\n protected _cloneRenderTargetWrapper(): Nullable<RenderTargetWrapper> {\r\n let rtw: Nullable<RenderTargetWrapper> = null;\r\n\r\n if (this._isMulti) {\r\n const textureArray = this.textures;\r\n if (textureArray && textureArray.length > 0) {\r\n let generateDepthTexture = false;\r\n let textureCount = textureArray.length;\r\n let depthTextureFormat = -1;\r\n\r\n const lastTextureSource = textureArray[textureArray.length - 1]._source;\r\n if (lastTextureSource === InternalTextureSource.Depth || lastTextureSource === InternalTextureSource.DepthStencil) {\r\n generateDepthTexture = true;\r\n depthTextureFormat = textureArray[textureArray.length - 1].format;\r\n textureCount--;\r\n }\r\n\r\n const samplingModes: number[] = [];\r\n const types: number[] = [];\r\n const formats: number[] = [];\r\n const targetTypes: number[] = [];\r\n const faceIndex: number[] = [];\r\n const layerIndex: number[] = [];\r\n const layerCounts: number[] = [];\r\n const internalTexture2Index: { [id: number]: number } = {};\r\n\r\n for (let i = 0; i < textureCount; ++i) {\r\n const texture = textureArray[i];\r\n\r\n samplingModes.push(texture.samplingMode);\r\n types.push(texture.type);\r\n formats.push(texture.format);\r\n\r\n const index = internalTexture2Index[texture.uniqueId];\r\n if (index !== undefined) {\r\n targetTypes.push(-1);\r\n layerCounts.push(0);\r\n } else {\r\n internalTexture2Index[texture.uniqueId] = i;\r\n if (texture.is2DArray) {\r\n targetTypes.push(Constants.TEXTURE_2D_ARRAY);\r\n layerCounts.push(texture.depth);\r\n } else if (texture.isCube) {\r\n targetTypes.push(Constants.TEXTURE_CUBE_MAP);\r\n layerCounts.push(0);\r\n } /*else if (texture.isCubeArray) {\r\n targetTypes.push(Constants.TEXTURE_CUBE_MAP_ARRAY);\r\n layerCounts.push(texture.depth);\r\n }*/ else if (texture.is3D) {\r\n targetTypes.push(Constants.TEXTURE_3D);\r\n layerCounts.push(texture.depth);\r\n } else {\r\n targetTypes.push(Constants.TEXTURE_2D);\r\n layerCounts.push(0);\r\n }\r\n }\r\n\r\n if (this._faceIndices) {\r\n faceIndex.push(this._faceIndices[i] ?? 0);\r\n }\r\n if (this._layerIndices) {\r\n layerIndex.push(this._layerIndices[i] ?? 0);\r\n }\r\n }\r\n\r\n const optionsMRT: IMultiRenderTargetOptions = {\r\n samplingModes,\r\n generateMipMaps: textureArray[0].generateMipMaps,\r\n generateDepthBuffer: this._generateDepthBuffer,\r\n generateStencilBuffer: this._generateStencilBuffer,\r\n generateDepthTexture,\r\n depthTextureFormat,\r\n types,\r\n formats,\r\n textureCount,\r\n targetTypes,\r\n faceIndex,\r\n layerIndex,\r\n layerCounts,\r\n label: this.label,\r\n };\r\n const size = {\r\n width: this.width,\r\n height: this.height,\r\n depth: this.depth,\r\n };\r\n\r\n rtw = this._engine.createMultipleRenderTarget(size, optionsMRT);\r\n\r\n for (let i = 0; i < textureCount; ++i) {\r\n if (targetTypes[i] !== -1) {\r\n continue;\r\n }\r\n const index = internalTexture2Index[textureArray[i].uniqueId];\r\n rtw.setTexture(rtw.textures![index], i);\r\n }\r\n }\r\n } else {\r\n const options: RenderTargetCreationOptions = {};\r\n\r\n options.generateDepthBuffer = this._generateDepthBuffer;\r\n options.generateMipMaps = this.texture?.generateMipMaps ?? false;\r\n options.generateStencilBuffer = this._generateStencilBuffer;\r\n options.samplingMode = this.texture?.samplingMode;\r\n options.type = this.texture?.type;\r\n options.format = this.texture?.format;\r\n options.noColorAttachment = !this._textures;\r\n options.label = this.label;\r\n\r\n if (this.isCube) {\r\n rtw = this._engine.createRenderTargetCubeTexture(this.width, options);\r\n } else {\r\n const size = {\r\n width: this.width,\r\n height: this.height,\r\n layers: this.is2DArray || this.is3D ? this.texture?.depth : undefined,\r\n };\r\n\r\n rtw = this._engine.createRenderTargetTexture(size, options);\r\n }\r\n if (rtw.texture) {\r\n rtw.texture.isReady = true;\r\n }\r\n }\r\n\r\n return rtw;\r\n }\r\n\r\n protected _swapRenderTargetWrapper(target: RenderTargetWrapper): void {\r\n if (this._textures && target._textures) {\r\n for (let i = 0; i < this._textures.length; ++i) {\r\n this._textures[i]._swapAndDie(target._textures[i], false);\r\n target._textures[i].isReady = true;\r\n }\r\n }\r\n if (this._depthStencilTexture && target._depthStencilTexture) {\r\n this._depthStencilTexture._swapAndDie(target._depthStencilTexture);\r\n target._depthStencilTexture.isReady = true;\r\n }\r\n\r\n this._textures = null;\r\n this._depthStencilTexture = null;\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n const rtw = this._cloneRenderTargetWrapper();\r\n if (!rtw) {\r\n return;\r\n }\r\n\r\n if (this._depthStencilTexture) {\r\n const samplingMode = this._depthStencilTexture.samplingMode;\r\n const format = this._depthStencilTexture.format;\r\n const bilinear =\r\n samplingMode === Constants.TEXTURE_BILINEAR_SAMPLINGMODE ||\r\n samplingMode === Constants.TEXTURE_TRILINEAR_SAMPLINGMODE ||\r\n samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST;\r\n\r\n rtw.createDepthStencilTexture(\r\n this._depthStencilTexture._comparisonFunction,\r\n bilinear,\r\n this._depthStencilTextureWithStencil,\r\n this._depthStencilTexture.samples,\r\n format,\r\n this._depthStencilTextureLabel\r\n );\r\n }\r\n\r\n if (this.samples > 1) {\r\n rtw.setSamples(this.samples);\r\n }\r\n\r\n rtw._swapRenderTargetWrapper(this);\r\n rtw.dispose();\r\n }\r\n\r\n /**\r\n * Releases the internal render textures\r\n */\r\n public releaseTextures(): void {\r\n if (this._textures) {\r\n for (let i = 0; i < this._textures.length; ++i) {\r\n this._textures[i].dispose();\r\n }\r\n }\r\n this._textures = null;\r\n }\r\n\r\n /**\r\n * Disposes the whole render target wrapper\r\n * @param disposeOnlyFramebuffers true if only the frame buffers should be released (used for the WebGL engine). If false, all the textures will also be released\r\n */\r\n public dispose(disposeOnlyFramebuffers = false): void {\r\n if (!disposeOnlyFramebuffers) {\r\n this._depthStencilTexture?.dispose();\r\n this._depthStencilTexture = null;\r\n this.releaseTextures();\r\n }\r\n\r\n this._engine._releaseRenderTargetWrapper(this);\r\n }\r\n}\r\n"]}
|
|
@@ -863,7 +863,8 @@ export declare class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
863
863
|
flushFramebuffer(): void;
|
|
864
864
|
/** @internal */
|
|
865
865
|
_currentFrameBufferIsDefaultFrameBuffer(): boolean;
|
|
866
|
-
|
|
866
|
+
/** @internal */
|
|
867
|
+
_startRenderTargetRenderPass(renderTargetWrapper: RenderTargetWrapper, setClearStates: boolean, clearColor: Nullable<IColor4Like>, clearDepth: boolean, clearStencil: boolean): void;
|
|
867
868
|
private _startMainRenderPass;
|
|
868
869
|
/**
|
|
869
870
|
* Binds the frame buffer to the specified texture.
|
|
@@ -883,17 +884,19 @@ export declare class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
883
884
|
* @param onBeforeUnbind defines a function which will be called before the effective unbind
|
|
884
885
|
*/
|
|
885
886
|
unBindFramebuffer(texture: RenderTargetWrapper, disableGenerateMipMaps?: boolean, onBeforeUnbind?: () => void): void;
|
|
887
|
+
private _resolveAndGenerateMipMapsFramebuffer;
|
|
886
888
|
/**
|
|
887
889
|
* Generates mipmaps for the texture of the (single) render target
|
|
888
890
|
* @param texture The render target containing the texture to generate the mipmaps for
|
|
889
891
|
*/
|
|
890
892
|
generateMipMapsFramebuffer(texture: RenderTargetWrapper): void;
|
|
891
893
|
/**
|
|
892
|
-
* Resolves the MSAA texture of the
|
|
894
|
+
* Resolves the MSAA texture of the render target into its non-MSAA version.
|
|
893
895
|
* Note that if "texture" is not a MSAA render target, no resolve is performed.
|
|
894
|
-
* @param
|
|
896
|
+
* @param texture The render target texture containing the MSAA texture to resolve
|
|
897
|
+
* @param resolveColors If true, resolve the color textures (default: true) - still subject to texture.resolveMSAAColors
|
|
895
898
|
*/
|
|
896
|
-
resolveFramebuffer(
|
|
899
|
+
resolveFramebuffer(texture: RenderTargetWrapper, resolveColors?: boolean): void;
|
|
897
900
|
/**
|
|
898
901
|
* Unbind the current render target and bind the default framebuffer
|
|
899
902
|
*/
|
package/Engines/webgpuEngine.js
CHANGED
|
@@ -2374,6 +2374,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2374
2374
|
//------------------------------------------------------------------------------
|
|
2375
2375
|
// Render Pass
|
|
2376
2376
|
//------------------------------------------------------------------------------
|
|
2377
|
+
/** @internal */
|
|
2377
2378
|
_startRenderTargetRenderPass(renderTargetWrapper, setClearStates, clearColor, clearDepth, clearStencil) {
|
|
2378
2379
|
this._endCurrentRenderPass();
|
|
2379
2380
|
const rtWrapper = renderTargetWrapper;
|
|
@@ -2381,9 +2382,11 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2381
2382
|
const gpuDepthStencilWrapper = depthStencilTexture?._hardwareTexture;
|
|
2382
2383
|
const gpuDepthStencilTexture = gpuDepthStencilWrapper?.underlyingResource;
|
|
2383
2384
|
const gpuDepthStencilMSAATexture = gpuDepthStencilWrapper?.getMSAATexture(0);
|
|
2384
|
-
const depthTextureView = gpuDepthStencilTexture?.createView(this._rttRenderPassWrapper.depthAttachmentViewDescriptor);
|
|
2385
2385
|
const depthMSAATextureView = gpuDepthStencilMSAATexture?.createView(this._rttRenderPassWrapper.depthAttachmentViewDescriptor);
|
|
2386
|
-
const
|
|
2386
|
+
const depthTextureView = depthMSAATextureView ? undefined : gpuDepthStencilTexture?.createView(this._rttRenderPassWrapper.depthAttachmentViewDescriptor);
|
|
2387
|
+
// We use the MSAA texture format (if available) to determine if it has a stencil aspect or not because, for MSAA depth textures,
|
|
2388
|
+
// the format of the "resolve" texture (gpuDepthStencilWrapper.format) is a single red channel format, not a depth-stencil format.
|
|
2389
|
+
const depthTextureHasStencil = gpuDepthStencilWrapper ? WebGPUTextureHelper.HasStencilAspect(gpuDepthStencilMSAATexture?.format ?? gpuDepthStencilWrapper.format) : false;
|
|
2387
2390
|
const colorAttachments = [];
|
|
2388
2391
|
if (this.useReverseDepthBuffer) {
|
|
2389
2392
|
this.setDepthFunctionToGreaterOrEqual();
|
|
@@ -2428,7 +2431,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2428
2431
|
const colorMSAATextureView = gpuMSAATexture?.createView(msaaViewDescriptor);
|
|
2429
2432
|
colorAttachments.push({
|
|
2430
2433
|
view: colorMSAATextureView ? colorMSAATextureView : colorTextureView,
|
|
2431
|
-
resolveTarget: gpuMSAATexture ? colorTextureView : undefined,
|
|
2434
|
+
resolveTarget: gpuMSAATexture && !rtWrapper.disableAutomaticMSAAResolve ? colorTextureView : undefined,
|
|
2432
2435
|
depthSlice: mrtTexture.is3D ? (rtWrapper.layerIndices?.[i] ?? 0) : undefined,
|
|
2433
2436
|
clearValue: index !== 0 && mustClearColor ? (isRtInteger ? clearColorForIntegerRt : clearColor) : undefined,
|
|
2434
2437
|
loadOp: index !== 0 && mustClearColor ? "clear" /* WebGPUConstants.LoadOp.Clear */ : "load" /* WebGPUConstants.LoadOp.Load */,
|
|
@@ -2456,7 +2459,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2456
2459
|
const isRtInteger = internalTexture.type === 7 || internalTexture.type === 5;
|
|
2457
2460
|
colorAttachments.push({
|
|
2458
2461
|
view: colorMSAATextureView ? colorMSAATextureView : colorTextureView,
|
|
2459
|
-
resolveTarget: gpuMSAATexture ? colorTextureView : undefined,
|
|
2462
|
+
resolveTarget: gpuMSAATexture && !rtWrapper.disableAutomaticMSAAResolve ? colorTextureView : undefined,
|
|
2460
2463
|
depthSlice,
|
|
2461
2464
|
clearValue: mustClearColor ? (isRtInteger ? clearColorForIntegerRt : clearColor) : undefined,
|
|
2462
2465
|
loadOp: mustClearColor ? "clear" /* WebGPUConstants.LoadOp.Clear */ : "load" /* WebGPUConstants.LoadOp.Load */,
|
|
@@ -2607,6 +2610,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2607
2610
|
this._setDepthTextureFormat(this._rttRenderPassWrapper);
|
|
2608
2611
|
this._setColorFormat(this._rttRenderPassWrapper);
|
|
2609
2612
|
this._rttRenderPassWrapper.colorAttachmentViewDescriptor = {
|
|
2613
|
+
label: texture.label ? texture.label + " - Color Attachment View" : "RTT - Color Attachment View",
|
|
2610
2614
|
format: this._colorFormat,
|
|
2611
2615
|
dimension: texture.is3D ? "3d" /* WebGPUConstants.TextureViewDimension.E3d */ : "2d" /* WebGPUConstants.TextureViewDimension.E2d */,
|
|
2612
2616
|
mipLevelCount: 1,
|
|
@@ -2616,6 +2620,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2616
2620
|
aspect: "all" /* WebGPUConstants.TextureAspect.All */,
|
|
2617
2621
|
};
|
|
2618
2622
|
this._rttRenderPassWrapper.depthAttachmentViewDescriptor = {
|
|
2623
|
+
label: texture.label ? texture.label + " - Depth Attachment View" : "RTT - Depth Attachment View",
|
|
2619
2624
|
format: this._depthTextureFormat,
|
|
2620
2625
|
dimension: depthStencilTexture && depthStencilTexture.is3D ? "3d" /* WebGPUConstants.TextureViewDimension.E3d */ : "2d" /* WebGPUConstants.TextureViewDimension.E2d */,
|
|
2621
2626
|
mipLevelCount: 1,
|
|
@@ -2689,14 +2694,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2689
2694
|
}
|
|
2690
2695
|
this._currentRenderTarget = saveCrt;
|
|
2691
2696
|
this._endCurrentRenderPass();
|
|
2692
|
-
|
|
2693
|
-
if (texture.isMulti) {
|
|
2694
|
-
this.generateMipMapsMultiFramebuffer(texture);
|
|
2695
|
-
}
|
|
2696
|
-
else {
|
|
2697
|
-
this.generateMipMapsFramebuffer(texture);
|
|
2698
|
-
}
|
|
2699
|
-
}
|
|
2697
|
+
this._resolveAndGenerateMipMapsFramebuffer(texture, disableGenerateMipMaps);
|
|
2700
2698
|
this._currentRenderTarget = null;
|
|
2701
2699
|
if (this.dbgVerboseLogsForFirstFrames) {
|
|
2702
2700
|
if (this._count === undefined) {
|
|
@@ -2710,6 +2708,21 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2710
2708
|
this._cacheRenderPipeline.setMRT([]);
|
|
2711
2709
|
this._cacheRenderPipeline.setMRTAttachments(this._mrtAttachments);
|
|
2712
2710
|
}
|
|
2711
|
+
_resolveAndGenerateMipMapsFramebuffer(texture, disableGenerateMipMaps = false) {
|
|
2712
|
+
const webglRtWrapper = texture;
|
|
2713
|
+
if (!webglRtWrapper.disableAutomaticMSAAResolve) {
|
|
2714
|
+
// we pass false as the second parameter because the color resolve has already been done automatically when the render pass ended
|
|
2715
|
+
this.resolveFramebuffer(texture, false);
|
|
2716
|
+
}
|
|
2717
|
+
if (!disableGenerateMipMaps) {
|
|
2718
|
+
if (texture.isMulti) {
|
|
2719
|
+
this.generateMipMapsMultiFramebuffer(texture);
|
|
2720
|
+
}
|
|
2721
|
+
else {
|
|
2722
|
+
this.generateMipMapsFramebuffer(texture);
|
|
2723
|
+
}
|
|
2724
|
+
}
|
|
2725
|
+
}
|
|
2713
2726
|
/**
|
|
2714
2727
|
* Generates mipmaps for the texture of the (single) render target
|
|
2715
2728
|
* @param texture The render target containing the texture to generate the mipmaps for
|
|
@@ -2720,12 +2733,28 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2720
2733
|
}
|
|
2721
2734
|
}
|
|
2722
2735
|
/**
|
|
2723
|
-
* Resolves the MSAA texture of the
|
|
2736
|
+
* Resolves the MSAA texture of the render target into its non-MSAA version.
|
|
2724
2737
|
* Note that if "texture" is not a MSAA render target, no resolve is performed.
|
|
2725
|
-
* @param
|
|
2738
|
+
* @param texture The render target texture containing the MSAA texture to resolve
|
|
2739
|
+
* @param resolveColors If true, resolve the color textures (default: true) - still subject to texture.resolveMSAAColors
|
|
2726
2740
|
*/
|
|
2727
|
-
resolveFramebuffer(
|
|
2728
|
-
|
|
2741
|
+
resolveFramebuffer(texture, resolveColors = true) {
|
|
2742
|
+
if (texture.samples <= 1) {
|
|
2743
|
+
return;
|
|
2744
|
+
}
|
|
2745
|
+
if (texture.resolveMSAAColors && resolveColors) {
|
|
2746
|
+
const disableAutomaticMSAAResolve = texture.disableAutomaticMSAAResolve;
|
|
2747
|
+
texture.disableAutomaticMSAAResolve = false;
|
|
2748
|
+
// Simply bind and unbind the framebuffer to trigger the resolve
|
|
2749
|
+
this.bindFramebuffer(texture);
|
|
2750
|
+
this._startRenderTargetRenderPass(this._currentRenderTarget, false, null, false, false);
|
|
2751
|
+
this.unBindFramebuffer(texture);
|
|
2752
|
+
texture.disableAutomaticMSAAResolve = disableAutomaticMSAAResolve;
|
|
2753
|
+
}
|
|
2754
|
+
if (texture.resolveMSAADepth && texture._depthStencilTexture) {
|
|
2755
|
+
const gpuTextureWrapper = texture._depthStencilTexture._hardwareTexture;
|
|
2756
|
+
this._textureHelper.resolveMSAADepthTexture(gpuTextureWrapper.getMSAATexture(0), gpuTextureWrapper.underlyingResource, this._renderEncoder);
|
|
2757
|
+
}
|
|
2729
2758
|
}
|
|
2730
2759
|
/**
|
|
2731
2760
|
* Unbind the current render target and bind the default framebuffer
|