@babylonjs/core 9.13.0 → 9.14.0
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/Animations/runtimeAnimation.js +11 -0
- package/Animations/runtimeAnimation.js.map +1 -1
- package/AudioV2/abstractAudio/abstractSound.d.ts +2 -1
- package/AudioV2/abstractAudio/abstractSound.js +3 -2
- package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
- package/AudioV2/abstractAudio/abstractSoundInstance.d.ts +1 -1
- package/AudioV2/abstractAudio/abstractSoundInstance.js.map +1 -1
- package/AudioV2/abstractAudio/staticSound.d.ts +6 -0
- package/AudioV2/abstractAudio/staticSound.js +9 -1
- package/AudioV2/abstractAudio/staticSound.js.map +1 -1
- package/AudioV2/abstractAudio/streamingSound.d.ts +6 -0
- package/AudioV2/abstractAudio/streamingSound.js +9 -1
- package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
- package/AudioV2/webAudio/webAudioStaticSound.d.ts +1 -1
- package/AudioV2/webAudio/webAudioStaticSound.js +6 -3
- package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.d.ts +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js +7 -4
- package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
- package/Cameras/arcRotateCamera.pure.js +9 -3
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Cameras/targetCamera.pure.js +18 -18
- package/Cameras/targetCamera.pure.js.map +1 -1
- package/Collisions/gpuPicker.js +23 -13
- package/Collisions/gpuPicker.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +3 -2
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +3 -0
- package/Engines/Native/nativeRenderTargetWrapper.js +24 -1
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js +16 -3
- package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +8 -1
- package/Engines/abstractEngine.pure.js +4 -3
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/engine.d.ts +113 -0
- package/Engines/thinNativeEngine.pure.d.ts +2 -0
- package/Engines/thinNativeEngine.pure.js +115 -9
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/FlowGraph/flowGraph.js +9 -0
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphDataConnection.pure.d.ts +14 -0
- package/FlowGraph/flowGraphDataConnection.pure.js +38 -1
- package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
- package/FlowGraph/serialization.d.ts +11 -0
- package/FlowGraph/serialization.js +11 -1
- package/FlowGraph/serialization.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +2 -2
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +43 -51
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.d.ts +0 -1
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +63 -35
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.pure.d.ts +1 -1
- package/Lights/Clustered/clusteredLightContainer.pure.js +2 -2
- package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
- package/Lights/areaLight.pure.js +5 -0
- package/Lights/areaLight.pure.js.map +1 -1
- package/Lights/light.d.ts +4 -2
- package/Lights/light.js +10 -4
- package/Lights/light.js.map +1 -1
- package/Lights/rectAreaLight.pure.d.ts +17 -0
- package/Lights/rectAreaLight.pure.js +67 -0
- package/Lights/rectAreaLight.pure.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.pure.js +1 -1
- package/Loading/Plugins/babylonFileLoader.pure.js.map +1 -1
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +43 -0
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +64 -0
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -0
- package/Materials/Textures/HTML/htmlInteractionManager.d.ts +69 -0
- package/Materials/Textures/HTML/htmlInteractionManager.js +130 -0
- package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -0
- package/Materials/Textures/HTML/htmlRaycastInteractionManager.d.ts +84 -0
- package/Materials/Textures/HTML/htmlRaycastInteractionManager.js +246 -0
- package/Materials/Textures/HTML/htmlRaycastInteractionManager.js.map +1 -0
- package/Materials/Textures/HTML/htmlTexture.d.ts +148 -0
- package/Materials/Textures/HTML/htmlTexture.js +455 -0
- package/Materials/Textures/HTML/htmlTexture.js.map +1 -0
- package/Materials/Textures/HTML/index.d.ts +4 -0
- package/Materials/Textures/HTML/index.js +5 -0
- package/Materials/Textures/HTML/index.js.map +1 -0
- package/Materials/Textures/HTML/pure.d.ts +5 -0
- package/Materials/Textures/HTML/pure.js +6 -0
- package/Materials/Textures/HTML/pure.js.map +1 -0
- package/Materials/Textures/index.d.ts +1 -0
- package/Materials/Textures/index.js +1 -1
- package/Materials/Textures/index.js.map +1 -1
- package/Materials/Textures/pure.d.ts +1 -0
- package/Materials/Textures/pure.js +1 -0
- package/Materials/Textures/pure.js.map +1 -1
- package/Materials/Textures/videoTexture.pure.d.ts +3 -0
- package/Materials/Textures/videoTexture.pure.js +30 -0
- package/Materials/Textures/videoTexture.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +9 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +12 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.d.ts +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js +20 -6
- package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +1 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +34 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +4 -3
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
- package/package.json +1 -1
package/Engines/engine.d.ts
CHANGED
|
@@ -1561,6 +1561,119 @@ var OffscreenCanvasRenderingContext2D: {
|
|
|
1561
1561
|
new (): OffscreenCanvasRenderingContext2D;
|
|
1562
1562
|
};
|
|
1563
1563
|
|
|
1564
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
1565
|
+
/* eslint-disable no-var */
|
|
1566
|
+
// Type definitions for the WICG HTML-in-Canvas proposal (https://github.com/WICG/html-in-canvas).
|
|
1567
|
+
// These augment the standard DOM, WebGL and WebGPU types so Babylon can consume the API - whether
|
|
1568
|
+
// provided natively (behind chrome://flags/#canvas-draw-element) or by the three-html-render polyfill -
|
|
1569
|
+
// without TypeScript errors. The proposal is experimental; signatures track the explainer IDL and
|
|
1570
|
+
// may change.
|
|
1571
|
+
|
|
1572
|
+
/**
|
|
1573
|
+
* A transferable snapshot of a rendered element, produced by `HTMLCanvasElement.captureElementImage`.
|
|
1574
|
+
*/
|
|
1575
|
+
interface ElementImage {
|
|
1576
|
+
readonly width: number;
|
|
1577
|
+
readonly height: number;
|
|
1578
|
+
close(): void;
|
|
1579
|
+
}
|
|
1580
|
+
|
|
1581
|
+
var ElementImage: {
|
|
1582
|
+
prototype: ElementImage;
|
|
1583
|
+
new (): ElementImage;
|
|
1584
|
+
};
|
|
1585
|
+
|
|
1586
|
+
/**
|
|
1587
|
+
* Source rectangle and sizing configuration for `WebGLRenderingContext.texElementImage2D`.
|
|
1588
|
+
*/
|
|
1589
|
+
interface WebGLCopyElementImageConfig {
|
|
1590
|
+
sx?: number;
|
|
1591
|
+
sy?: number;
|
|
1592
|
+
swidth?: number;
|
|
1593
|
+
sheight?: number;
|
|
1594
|
+
width?: number;
|
|
1595
|
+
height?: number;
|
|
1596
|
+
}
|
|
1597
|
+
|
|
1598
|
+
/**
|
|
1599
|
+
* Event dispatched on a `<canvas layoutsubtree>` when the rendering of one of its children changes.
|
|
1600
|
+
*/
|
|
1601
|
+
interface PaintEvent extends Event {
|
|
1602
|
+
readonly changedElements: ReadonlyArray<Element>;
|
|
1603
|
+
}
|
|
1604
|
+
|
|
1605
|
+
interface HTMLCanvasElementEventMap {
|
|
1606
|
+
paint: PaintEvent;
|
|
1607
|
+
}
|
|
1608
|
+
|
|
1609
|
+
interface HTMLCanvasElement {
|
|
1610
|
+
/** Opts canvas descendants into layout and hit testing so they can be drawn into the canvas. */
|
|
1611
|
+
layoutSubtree: boolean;
|
|
1612
|
+
/** Fired when the rendering of any canvas child has changed. */
|
|
1613
|
+
onpaint: ((this: HTMLCanvasElement, ev: PaintEvent) => any) | null;
|
|
1614
|
+
/** Requests a single `paint` event on the next rendering update, even if nothing changed. */
|
|
1615
|
+
requestPaint(): void;
|
|
1616
|
+
/** Captures a transferable snapshot of the given element. */
|
|
1617
|
+
captureElementImage(element: Element): ElementImage;
|
|
1618
|
+
/** Returns the CSS transform that keeps the element's DOM location in sync with its drawn location. */
|
|
1619
|
+
getElementTransform(element: Element | ElementImage, drawTransform: DOMMatrix): DOMMatrix;
|
|
1620
|
+
}
|
|
1621
|
+
|
|
1622
|
+
interface CanvasRenderingContext2D {
|
|
1623
|
+
drawElementImage(element: Element | ElementImage, dx: number, dy: number): DOMMatrix;
|
|
1624
|
+
drawElementImage(element: Element | ElementImage, dx: number, dy: number, dwidth: number, dheight: number): DOMMatrix;
|
|
1625
|
+
drawElementImage(
|
|
1626
|
+
element: Element | ElementImage,
|
|
1627
|
+
sx: number,
|
|
1628
|
+
sy: number,
|
|
1629
|
+
swidth: number,
|
|
1630
|
+
sheight: number,
|
|
1631
|
+
dx: number,
|
|
1632
|
+
dy: number,
|
|
1633
|
+
dwidth?: number,
|
|
1634
|
+
dheight?: number
|
|
1635
|
+
): DOMMatrix;
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
interface WebGLRenderingContext {
|
|
1639
|
+
/** Uploads a rendered element (or snapshot) into the currently bound 2D texture (current WICG signature). */
|
|
1640
|
+
texElementImage2D(target: number, internalformat: number, element: Element | ElementImage, config?: WebGLCopyElementImageConfig): void;
|
|
1641
|
+
/** Legacy texImage2D-shaped overload still shipped by some Chrome Canary builds. */
|
|
1642
|
+
texElementImage2D(target: number, level: number, internalformat: number, format: number, type: number, element: Element | ElementImage): void;
|
|
1643
|
+
}
|
|
1644
|
+
|
|
1645
|
+
interface WebGL2RenderingContext {
|
|
1646
|
+
/** Uploads a rendered element (or snapshot) into the currently bound 2D texture (current WICG signature). */
|
|
1647
|
+
texElementImage2D(target: number, internalformat: number, element: Element | ElementImage, config?: WebGLCopyElementImageConfig): void;
|
|
1648
|
+
/** Legacy texImage2D-shaped overload still shipped by some Chrome Canary builds. */
|
|
1649
|
+
texElementImage2D(target: number, level: number, internalformat: number, format: number, type: number, element: Element | ElementImage): void;
|
|
1650
|
+
}
|
|
1651
|
+
|
|
1652
|
+
/**
|
|
1653
|
+
* Source descriptor for `GPUQueue.copyElementImageToTexture`.
|
|
1654
|
+
*/
|
|
1655
|
+
interface GPUCopyElementImageSource {
|
|
1656
|
+
source: Element | ElementImage;
|
|
1657
|
+
sx?: number;
|
|
1658
|
+
sy?: number;
|
|
1659
|
+
swidth?: number;
|
|
1660
|
+
sheight?: number;
|
|
1661
|
+
}
|
|
1662
|
+
|
|
1663
|
+
/**
|
|
1664
|
+
* Destination descriptor for `GPUQueue.copyElementImageToTexture`.
|
|
1665
|
+
*/
|
|
1666
|
+
interface GPUCopyElementImageDestination {
|
|
1667
|
+
destination: GPUCopyExternalImageDestInfo;
|
|
1668
|
+
width?: number;
|
|
1669
|
+
height?: number;
|
|
1670
|
+
}
|
|
1671
|
+
|
|
1672
|
+
interface GPUQueue {
|
|
1673
|
+
/** Uploads a rendered element (or snapshot) into a destination GPU texture. */
|
|
1674
|
+
copyElementImageToTexture(source: GPUCopyElementImageSource, destination: GPUCopyElementImageDestination): void;
|
|
1675
|
+
}
|
|
1676
|
+
|
|
1564
1677
|
/* eslint-disable no-var */
|
|
1565
1678
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
1566
1679
|
// Mixins
|
|
@@ -469,6 +469,8 @@ export declare class ThinNativeEngine extends ThinEngine {
|
|
|
469
469
|
height: number;
|
|
470
470
|
depth: number;
|
|
471
471
|
}, options: boolean | RenderTargetCreationOptions): RenderTargetWrapper;
|
|
472
|
+
createRenderTargetCubeTexture(size: number, options?: RenderTargetCreationOptions): RenderTargetWrapper;
|
|
473
|
+
generateMipMapsForCubemap(_texture: InternalTexture, _unbind?: boolean): void;
|
|
472
474
|
updateRenderTargetTextureSampleCount(rtWrapper: RenderTargetWrapper, samples: number): number;
|
|
473
475
|
updateTextureSamplingMode(samplingMode: number, texture: InternalTexture): void;
|
|
474
476
|
bindFramebuffer(texture: RenderTargetWrapper, faceIndex?: number, requiredWidth?: number, requiredHeight?: number, forceFullscreenViewport?: boolean): void;
|
|
@@ -183,6 +183,10 @@ export class ThinNativeEngine extends ThinEngine {
|
|
|
183
183
|
this._webGLVersion = 2;
|
|
184
184
|
this.disableUniformBuffers = true;
|
|
185
185
|
this._shaderPlatformName = "NATIVE";
|
|
186
|
+
// Babylon Native is not WebGL and has no _gl context. Report a distinct engine name (like
|
|
187
|
+
// WebGPU reports "WebGPU") so application/feature code that branches on engine.name === "WebGL"
|
|
188
|
+
// to touch the WebGL-only _gl context skips the native engine instead of dereferencing null.
|
|
189
|
+
this._name = "Native";
|
|
186
190
|
// TODO: Initialize this more correctly based on the hardware capabilities.
|
|
187
191
|
// Init caps
|
|
188
192
|
this._caps = {
|
|
@@ -1854,6 +1858,80 @@ export class ThinNativeEngine extends ThinEngine {
|
|
|
1854
1858
|
rtWrapper.setTextures(texture);
|
|
1855
1859
|
return rtWrapper;
|
|
1856
1860
|
}
|
|
1861
|
+
createRenderTargetCubeTexture(size, options) {
|
|
1862
|
+
const rtWrapper = this._createHardwareRenderTargetWrapper(false, true, size);
|
|
1863
|
+
let generateDepthBuffer = true;
|
|
1864
|
+
let generateStencilBuffer = false;
|
|
1865
|
+
let generateMipMaps = false;
|
|
1866
|
+
let type = 0;
|
|
1867
|
+
let samplingMode = 3;
|
|
1868
|
+
let format = 5;
|
|
1869
|
+
let samples = 1;
|
|
1870
|
+
let label;
|
|
1871
|
+
if (options !== undefined && typeof options === "object") {
|
|
1872
|
+
generateDepthBuffer = options.generateDepthBuffer ?? true;
|
|
1873
|
+
generateStencilBuffer = !!options.generateStencilBuffer;
|
|
1874
|
+
generateMipMaps = !!options.generateMipMaps;
|
|
1875
|
+
type = options.type ?? 0;
|
|
1876
|
+
samplingMode = options.samplingMode ?? 3;
|
|
1877
|
+
format = options.format ?? 5;
|
|
1878
|
+
samples = options.samples ?? 1;
|
|
1879
|
+
label = options.label;
|
|
1880
|
+
}
|
|
1881
|
+
// Match _createInternalTexture: float/half-float RTTs that the platform can't linearly filter fall
|
|
1882
|
+
// back to NEAREST so the cube RTT never carries an unsupported sampling mode.
|
|
1883
|
+
if (type === 1 && !this._caps.textureFloatLinearFiltering) {
|
|
1884
|
+
samplingMode = 1;
|
|
1885
|
+
}
|
|
1886
|
+
else if (type === 2 && !this._caps.textureHalfFloatLinearFiltering) {
|
|
1887
|
+
samplingMode = 1;
|
|
1888
|
+
}
|
|
1889
|
+
if (type === 1 && !this._caps.textureFloat) {
|
|
1890
|
+
type = 0;
|
|
1891
|
+
Logger.Warn("Float textures are not supported. Type forced to TEXTURETYPE_UNSIGNED_BYTE");
|
|
1892
|
+
}
|
|
1893
|
+
const texture = new InternalTexture(this, 5 /* InternalTextureSource.RenderTarget */);
|
|
1894
|
+
texture.isCube = true;
|
|
1895
|
+
texture.baseWidth = size;
|
|
1896
|
+
texture.baseHeight = size;
|
|
1897
|
+
texture.width = size;
|
|
1898
|
+
texture.height = size;
|
|
1899
|
+
texture.isReady = true;
|
|
1900
|
+
texture.samples = samples;
|
|
1901
|
+
texture.generateMipMaps = generateMipMaps;
|
|
1902
|
+
texture.samplingMode = samplingMode;
|
|
1903
|
+
texture.type = type;
|
|
1904
|
+
texture.format = format;
|
|
1905
|
+
texture.label = label;
|
|
1906
|
+
const nativeTexture = texture._hardwareTexture.underlyingResource;
|
|
1907
|
+
const nativeTextureFormat = getNativeTextureFormat(format, type);
|
|
1908
|
+
// See the createRenderTargetTexture MSAA/mips note: avoid the mips + samples combo on bgfx.
|
|
1909
|
+
const hasMips = samples > 1 ? false : generateMipMaps;
|
|
1910
|
+
this._engine.initializeTexture(nativeTexture, size, size, hasMips, nativeTextureFormat, /*renderTarget*/ true, /*srgb*/ false, samples, /*isCube*/ true);
|
|
1911
|
+
this._setTextureSampling(nativeTexture, getNativeSamplingMode(samplingMode));
|
|
1912
|
+
// The native engine cannot render to all six faces through one framebuffer, so create one
|
|
1913
|
+
// framebuffer per face (the C++ side binds the matching cube layer); bindFramebuffer(faceIndex)
|
|
1914
|
+
// then selects the right one.
|
|
1915
|
+
const framebuffers = [];
|
|
1916
|
+
for (let face = 0; face < 6; face++) {
|
|
1917
|
+
framebuffers.push(this._engine.createFrameBuffer(nativeTexture, size, size, generateStencilBuffer, generateDepthBuffer, samples, face));
|
|
1918
|
+
}
|
|
1919
|
+
rtWrapper._framebuffers = framebuffers;
|
|
1920
|
+
rtWrapper._generateDepthBuffer = generateDepthBuffer;
|
|
1921
|
+
rtWrapper._generateStencilBuffer = generateStencilBuffer;
|
|
1922
|
+
rtWrapper._samples = samples;
|
|
1923
|
+
rtWrapper.setTextures(texture);
|
|
1924
|
+
// Track the hand-built cube RTT texture the same way _createInternalTexture tracks 2D textures so it
|
|
1925
|
+
// participates in engine-wide lifecycle management (dispose iteration, context rebuild, stats).
|
|
1926
|
+
this._internalTexturesCache.push(texture);
|
|
1927
|
+
return rtWrapper;
|
|
1928
|
+
}
|
|
1929
|
+
generateMipMapsForCubemap(_texture, _unbind = true) {
|
|
1930
|
+
// The WebGL path rebinds gl.TEXTURE_CUBE_MAP and calls gl.generateMipmap; both deref _gl, which is
|
|
1931
|
+
// null on Native. bgfx auto-generates the mip chain when a render target texture created with mips is
|
|
1932
|
+
// resolved (the same way 2D RTTs get their mips here -- unBindFramebuffer issues no explicit mipgen),
|
|
1933
|
+
// so this is a no-op on Native.
|
|
1934
|
+
}
|
|
1857
1935
|
updateRenderTargetTextureSampleCount(rtWrapper, samples) {
|
|
1858
1936
|
if (rtWrapper.samples === samples) {
|
|
1859
1937
|
return samples;
|
|
@@ -1893,10 +1971,24 @@ export class ThinNativeEngine extends ThinEngine {
|
|
|
1893
1971
|
// underlying bgfx resource has 1 mip level. Remove this guard once a fixed bgfx is in stable BN npm.
|
|
1894
1972
|
const hasMips = samples > 1 ? false : texture.generateMipMaps;
|
|
1895
1973
|
const nativeTextureFormat = getNativeTextureFormat(texture.format, texture.type);
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1974
|
+
const isCube = texture.isCube;
|
|
1975
|
+
this._engine.initializeTexture(nativeTexture, texture.baseWidth, texture.baseHeight, hasMips, nativeTextureFormat,
|
|
1976
|
+
/*renderTarget*/ true, texture._useSRGBBuffer, samples, isCube);
|
|
1977
|
+
if (isCube) {
|
|
1978
|
+
// Cube RTTs render through one framebuffer per face (see createRenderTargetCubeTexture). The
|
|
1979
|
+
// underlying bgfx handle was just rotated, so recreate all six attachments; the _framebuffers
|
|
1980
|
+
// setter releases the stale ones and keeps _framebuffer aliased to face 0 for single-target paths.
|
|
1981
|
+
const framebuffers = [];
|
|
1982
|
+
for (let face = 0; face < 6; face++) {
|
|
1983
|
+
framebuffers.push(this._engine.createFrameBuffer(nativeTexture, texture.baseWidth, texture.baseHeight, rtWrapper._generateStencilBuffer, rtWrapper._generateDepthBuffer, samples, face));
|
|
1984
|
+
}
|
|
1985
|
+
nativeRTWrapper._framebuffers = framebuffers;
|
|
1986
|
+
}
|
|
1987
|
+
else {
|
|
1988
|
+
// NativeRenderTargetWrapper._framebuffer setter releases the old framebuffer before assigning,
|
|
1989
|
+
// so no manual _releaseFramebufferObjects call is needed (and would double-delete the handle).
|
|
1990
|
+
nativeRTWrapper._framebuffer = this._engine.createFrameBuffer(nativeTexture, texture.baseWidth, texture.baseHeight, rtWrapper._generateStencilBuffer, rtWrapper._generateDepthBuffer, samples);
|
|
1991
|
+
}
|
|
1900
1992
|
rtWrapper._samples = samples;
|
|
1901
1993
|
texture.samples = samples;
|
|
1902
1994
|
return samples;
|
|
@@ -1914,13 +2006,17 @@ export class ThinNativeEngine extends ThinEngine {
|
|
|
1914
2006
|
this.unBindFramebuffer(this._currentRenderTarget);
|
|
1915
2007
|
}
|
|
1916
2008
|
this._currentRenderTarget = texture;
|
|
1917
|
-
if (faceIndex) {
|
|
1918
|
-
throw new Error("Cuboid frame buffers are not yet supported in NativeEngine.");
|
|
1919
|
-
}
|
|
1920
2009
|
if (requiredWidth || requiredHeight) {
|
|
1921
2010
|
throw new Error("Required width/height for frame buffers not yet supported in NativeEngine.");
|
|
1922
2011
|
}
|
|
1923
|
-
if (nativeRTWrapper.
|
|
2012
|
+
if (nativeRTWrapper._framebuffers) {
|
|
2013
|
+
// Cube render target: bind the framebuffer for the requested face.
|
|
2014
|
+
this._bindUnboundFramebuffer(nativeRTWrapper._framebuffers[faceIndex ?? 0]);
|
|
2015
|
+
}
|
|
2016
|
+
else if (faceIndex) {
|
|
2017
|
+
throw new Error("Cuboid frame buffers are not yet supported in NativeEngine.");
|
|
2018
|
+
}
|
|
2019
|
+
else if (nativeRTWrapper._framebufferDepthStencil) {
|
|
1924
2020
|
this._bindUnboundFramebuffer(nativeRTWrapper._framebufferDepthStencil);
|
|
1925
2021
|
}
|
|
1926
2022
|
else {
|
|
@@ -2137,7 +2233,17 @@ export class ThinNativeEngine extends ThinEngine {
|
|
|
2137
2233
|
* @param generateMipMaps defines whether to generate mipmaps or not
|
|
2138
2234
|
*/
|
|
2139
2235
|
updateTextureData(texture, imageData, xOffset, yOffset, width, height, faceIndex = 0, lod = 0, generateMipMaps = false) {
|
|
2140
|
-
|
|
2236
|
+
if (!texture._hardwareTexture) {
|
|
2237
|
+
return;
|
|
2238
|
+
}
|
|
2239
|
+
if (!this._engine.updateTextureData) {
|
|
2240
|
+
throw new Error("updateTextureData not implemented.");
|
|
2241
|
+
}
|
|
2242
|
+
// bgfx updates the requested sub-rectangle of the existing texture (faceIndex selects the cube
|
|
2243
|
+
// face / array layer, lod selects the mip level). invertY is forwarded so the native side can match
|
|
2244
|
+
// the vertical orientation the base texture upload uses. Mip regeneration after a partial update is
|
|
2245
|
+
// not supported on Native, so generateMipMaps is ignored (consistent with the other raw-texture paths).
|
|
2246
|
+
this._engine.updateTextureData(texture._hardwareTexture.underlyingResource, imageData, xOffset, yOffset, width, height, faceIndex, lod, texture.invertY);
|
|
2141
2247
|
}
|
|
2142
2248
|
/**
|
|
2143
2249
|
* @internal
|