@codexo/exojs 0.9.0 → 0.10.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/CHANGELOG.md +44 -0
- package/README.md +14 -14
- package/dist/esm/core/Application.d.ts +25 -6
- package/dist/esm/core/Application.js +42 -8
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/Perf.d.ts +23 -0
- package/dist/esm/core/Perf.js +49 -0
- package/dist/esm/core/Perf.js.map +1 -0
- package/dist/esm/core/Scene.d.ts +8 -8
- package/dist/esm/core/Scene.js +7 -7
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.js +2 -2
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +0 -3
- package/dist/esm/core/SceneNode.js +0 -9
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/capabilities.d.ts +2 -0
- package/dist/esm/core/capabilities.js +15 -0
- package/dist/esm/core/capabilities.js.map +1 -1
- package/dist/esm/core/index.d.ts +1 -0
- package/dist/esm/core/types.d.ts +1 -1
- package/dist/esm/core/utils.d.ts +12 -0
- package/dist/esm/core/utils.js +18 -1
- package/dist/esm/core/utils.js.map +1 -1
- package/dist/esm/index.js +14 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/particles/ParticleSystem.d.ts +8 -5
- package/dist/esm/particles/ParticleSystem.js +9 -5
- package/dist/esm/particles/ParticleSystem.js.map +1 -1
- package/dist/esm/particles/distributions/{Gradient.d.ts → ColorGradient.d.ts} +5 -5
- package/dist/esm/particles/distributions/{Gradient.js → ColorGradient.js} +5 -5
- package/dist/esm/particles/distributions/ColorGradient.js.map +1 -0
- package/dist/esm/particles/distributions/Distribution.d.ts +2 -2
- package/dist/esm/particles/distributions/index.d.ts +2 -2
- package/dist/esm/particles/gpu/ParticleGpuState.js +1 -1
- package/dist/esm/particles/modules/ColorOverLifetime.d.ts +3 -3
- package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -1
- package/dist/esm/particles/modules/ColorOverSpeed.d.ts +3 -3
- package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -1
- package/dist/esm/particles/modules/UpdateModule.d.ts +2 -2
- package/dist/esm/particles/modules/UpdateModule.js +1 -1
- package/dist/esm/particles/modules/WgslContribution.d.ts +2 -2
- package/dist/esm/rendering/Camera.d.ts +33 -0
- package/dist/esm/rendering/Camera.js +38 -0
- package/dist/esm/rendering/Camera.js.map +1 -0
- package/dist/esm/rendering/Container.d.ts +5 -24
- package/dist/esm/rendering/Container.js +8 -71
- package/dist/esm/rendering/Container.js.map +1 -1
- package/dist/esm/rendering/Drawable.d.ts +8 -10
- package/dist/esm/rendering/Drawable.js +12 -20
- package/dist/esm/rendering/Drawable.js.map +1 -1
- package/dist/esm/rendering/RenderBackend.d.ts +18 -0
- package/dist/esm/rendering/RenderNode.d.ts +81 -8
- package/dist/esm/rendering/RenderNode.js +121 -144
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderTarget.d.ts +13 -0
- package/dist/esm/rendering/RenderTarget.js +13 -0
- package/dist/esm/rendering/RenderTarget.js.map +1 -1
- package/dist/esm/rendering/RenderTargetPass.js +17 -0
- package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
- package/dist/esm/rendering/RenderingContext.d.ts +87 -0
- package/dist/esm/rendering/RenderingContext.js +157 -0
- package/dist/esm/rendering/RenderingContext.js.map +1 -0
- package/dist/esm/rendering/TransformBuffer.d.ts +38 -0
- package/dist/esm/rendering/TransformBuffer.js +116 -0
- package/dist/esm/rendering/TransformBuffer.js.map +1 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +5 -12
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
- package/dist/esm/rendering/geometry/Geometry.d.ts +40 -0
- package/dist/esm/rendering/geometry/Geometry.js +228 -0
- package/dist/esm/rendering/geometry/Geometry.js.map +1 -0
- package/dist/esm/rendering/geometry/GeometryAttribute.d.ts +32 -0
- package/dist/esm/rendering/geometry/QuadGeometry.d.ts +5 -0
- package/dist/esm/rendering/gradient/Gradient.d.ts +34 -0
- package/dist/esm/rendering/gradient/Gradient.js +114 -0
- package/dist/esm/rendering/gradient/Gradient.js.map +1 -0
- package/dist/esm/rendering/gradient/LinearGradient.d.ts +10 -0
- package/dist/esm/rendering/gradient/LinearGradient.js +26 -0
- package/dist/esm/rendering/gradient/LinearGradient.js.map +1 -0
- package/dist/esm/rendering/gradient/RadialGradient.d.ts +10 -0
- package/dist/esm/rendering/gradient/RadialGradient.js +25 -0
- package/dist/esm/rendering/gradient/RadialGradient.js.map +1 -0
- package/dist/esm/rendering/index.d.ts +16 -2
- package/dist/esm/rendering/material/Material.d.ts +114 -0
- package/dist/esm/rendering/material/Material.js +111 -0
- package/dist/esm/rendering/material/Material.js.map +1 -0
- package/dist/esm/rendering/material/MaterialKey.d.ts +18 -0
- package/dist/esm/rendering/material/MaterialKey.js +82 -0
- package/dist/esm/rendering/material/MaterialKey.js.map +1 -0
- package/dist/esm/rendering/material/MeshMaterial.d.ts +16 -0
- package/dist/esm/rendering/material/MeshMaterial.js +21 -0
- package/dist/esm/rendering/material/MeshMaterial.js.map +1 -0
- package/dist/esm/rendering/{mesh/MeshShader.d.ts → material/ShaderSource.d.ts} +29 -62
- package/dist/esm/rendering/{mesh/MeshShader.js → material/ShaderSource.js} +35 -62
- package/dist/esm/rendering/material/ShaderSource.js.map +1 -0
- package/dist/esm/rendering/material/SpriteMaterial.d.ts +15 -0
- package/dist/esm/rendering/material/SpriteMaterial.js +20 -0
- package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -0
- package/dist/esm/rendering/mesh/Mesh.d.ts +29 -12
- package/dist/esm/rendering/mesh/Mesh.js +122 -3
- package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
- package/dist/esm/rendering/pass/RenderPassCoordinator.d.ts +63 -0
- package/dist/esm/rendering/pass/RenderPassDescriptor.d.ts +48 -0
- package/dist/esm/rendering/pass/RenderPassDescriptor.js +16 -0
- package/dist/esm/rendering/pass/RenderPassDescriptor.js.map +1 -0
- package/dist/esm/rendering/plan/RenderCommand.d.ts +67 -0
- package/dist/esm/rendering/plan/RenderCommand.js +94 -0
- package/dist/esm/rendering/plan/RenderCommand.js.map +1 -0
- package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts +10 -0
- package/dist/esm/rendering/plan/RenderEffectExecutor.js +159 -0
- package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -0
- package/dist/esm/rendering/plan/RenderPlan.d.ts +23 -0
- package/dist/esm/rendering/plan/RenderPlan.js +12 -0
- package/dist/esm/rendering/plan/RenderPlan.js.map +1 -0
- package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts +31 -0
- package/dist/esm/rendering/plan/RenderPlanBuilder.js +242 -0
- package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -0
- package/dist/esm/rendering/plan/RenderPlanOptimizer.d.ts +10 -0
- package/dist/esm/rendering/plan/RenderPlanOptimizer.js +180 -0
- package/dist/esm/rendering/plan/RenderPlanOptimizer.js.map +1 -0
- package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts +9 -0
- package/dist/esm/rendering/plan/RenderPlanPlayer.js +56 -0
- package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -0
- package/dist/esm/rendering/plan/RenderScope.d.ts +70 -0
- package/dist/esm/rendering/plan/RenderScope.js +16 -0
- package/dist/esm/rendering/plan/RenderScope.js.map +1 -0
- package/dist/esm/rendering/plan/playRenderTree.d.ts +4 -0
- package/dist/esm/rendering/plan/playRenderTree.js +19 -0
- package/dist/esm/rendering/plan/playRenderTree.js.map +1 -0
- package/dist/esm/rendering/sprite/Sprite.d.ts +22 -1
- package/dist/esm/rendering/sprite/Sprite.js +33 -2
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/sprite/spriteMaterialSources.d.ts +36 -0
- package/dist/esm/rendering/sprite/spriteMaterialSources.js +128 -0
- package/dist/esm/rendering/sprite/spriteMaterialSources.js.map +1 -0
- package/dist/esm/rendering/text/TextStyle.d.ts +1 -1
- package/dist/esm/rendering/texture/DataTexture.d.ts +5 -0
- package/dist/esm/rendering/texture/DataTexture.js +7 -0
- package/dist/esm/rendering/texture/DataTexture.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +3 -7
- package/dist/esm/rendering/video/Video.js +3 -8
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +40 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +303 -22
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +22 -2
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +404 -112
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.d.ts +57 -0
- package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js +79 -0
- package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +12 -0
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +214 -58
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.d.ts +34 -0
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js +169 -0
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +4 -0
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/glsl/mesh.frag.js +1 -1
- package/dist/esm/rendering/webgl2/glsl/mesh.vert.js +1 -1
- package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +50 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +135 -19
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +22 -17
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +24 -0
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +488 -74
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +13 -17
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +141 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +270 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +16 -0
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +335 -26
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +57 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +257 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilState.d.ts +14 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilState.js +36 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilState.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +14 -12
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +16 -0
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +57 -0
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -0
- package/dist/esm/resources/JsonStore.d.ts +18 -0
- package/dist/esm/resources/JsonStore.js +62 -0
- package/dist/esm/resources/JsonStore.js.map +1 -0
- package/dist/esm/resources/factories/ImageFactory.d.ts +14 -8
- package/dist/esm/resources/factories/ImageFactory.js +13 -6
- package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextureFactory.d.ts +4 -4
- package/dist/esm/resources/factories/TextureFactory.js +8 -4
- package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
- package/dist/esm/resources/index.d.ts +1 -0
- package/dist/exo.esm.js +5424 -2205
- package/dist/exo.esm.js.map +1 -1
- package/package.json +30 -24
- package/dist/esm/particles/distributions/Gradient.js.map +0 -1
- package/dist/esm/rendering/mesh/MeshShader.js.map +0 -1
- package/dist/esm/vendor/webgl-debug.js +0 -1160
- package/dist/esm/vendor/webgl-debug.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderPlanBuilder.js","sources":["../../../../../src/rendering/plan/RenderPlanBuilder.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RenderPlan } from './RenderPlan';
|
|
2
|
+
/** @internal */
|
|
3
|
+
export declare class RenderPlanOptimizer {
|
|
4
|
+
static optimize(plan: RenderPlan): void;
|
|
5
|
+
private static _optimizeGroup;
|
|
6
|
+
private static _applyMaterialGrouping;
|
|
7
|
+
private static _assignGroupIndices;
|
|
8
|
+
private static _materialGroupSegment;
|
|
9
|
+
private static _overlapAwareGroup;
|
|
10
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { RenderEntryKind } from './RenderCommand.js';
|
|
2
|
+
|
|
3
|
+
const groupKey = (material) => `${material.pipelineKey}:${material.bindKey}`;
|
|
4
|
+
const aabbOverlap = (a, b) => a.minX < b.maxX && a.maxX > b.minX && a.minY < b.maxY && a.maxY > b.minY;
|
|
5
|
+
/** @internal */
|
|
6
|
+
class RenderPlanOptimizer {
|
|
7
|
+
static optimize(plan) {
|
|
8
|
+
for (const pass of plan.passes) {
|
|
9
|
+
this._optimizeGroup(pass.root);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
static _optimizeGroup(scope) {
|
|
13
|
+
if (scope.hasMixedZ) {
|
|
14
|
+
const indexed = scope.entries.map((entry, index) => ({ entry, index }));
|
|
15
|
+
indexed.sort((left, right) => {
|
|
16
|
+
return left.entry.zIndex - right.entry.zIndex || left.entry.seq - right.entry.seq || left.index - right.index;
|
|
17
|
+
});
|
|
18
|
+
for (let i = 0; i < indexed.length; i++) {
|
|
19
|
+
scope.entries[i] = indexed[i].entry;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
this._applyMaterialGrouping(scope);
|
|
23
|
+
for (const entry of scope.entries) {
|
|
24
|
+
if (entry.kind === RenderEntryKind.Group) {
|
|
25
|
+
this._optimizeGroup(entry.scope);
|
|
26
|
+
}
|
|
27
|
+
else if (entry.kind === RenderEntryKind.Barrier && entry.scope.childPlan !== null) {
|
|
28
|
+
this._optimizeGroup(entry.scope.childPlan);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
static _applyMaterialGrouping(scope) {
|
|
33
|
+
const entries = scope.entries;
|
|
34
|
+
const n = entries.length;
|
|
35
|
+
if (n === 0) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
let segStart = 0;
|
|
39
|
+
for (let i = 0; i <= n; i++) {
|
|
40
|
+
const entry = i < n ? entries[i] : null;
|
|
41
|
+
const isBoundary = entry === null || entry.kind === RenderEntryKind.Group || entry.kind === RenderEntryKind.Barrier;
|
|
42
|
+
if (isBoundary && i > segStart) {
|
|
43
|
+
const segEnd = i;
|
|
44
|
+
const segLen = segEnd - segStart;
|
|
45
|
+
if (segLen >= 1) {
|
|
46
|
+
this._materialGroupSegment(entries, segStart, segEnd, scope.preserveDrawOrder);
|
|
47
|
+
}
|
|
48
|
+
segStart = i + 1;
|
|
49
|
+
}
|
|
50
|
+
else if (isBoundary) {
|
|
51
|
+
segStart = i + 1;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
this._assignGroupIndices(scope);
|
|
55
|
+
}
|
|
56
|
+
static _assignGroupIndices(scope) {
|
|
57
|
+
let nextGroupIndex = 1;
|
|
58
|
+
let prevKey = null;
|
|
59
|
+
let prevZ = null;
|
|
60
|
+
for (const entry of scope.entries) {
|
|
61
|
+
if (entry.kind !== RenderEntryKind.Draw) {
|
|
62
|
+
prevKey = null;
|
|
63
|
+
prevZ = null;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const key = groupKey(entry.command.material);
|
|
67
|
+
const z = entry.zIndex;
|
|
68
|
+
if (prevKey === null || prevZ === null || key !== prevKey || z !== prevZ) {
|
|
69
|
+
nextGroupIndex++;
|
|
70
|
+
prevKey = key;
|
|
71
|
+
prevZ = z;
|
|
72
|
+
}
|
|
73
|
+
entry.command.groupIndex = nextGroupIndex;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
static _materialGroupSegment(entries, start, end, preserveDrawOrder) {
|
|
77
|
+
const len = end - start;
|
|
78
|
+
if (len <= 1) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const draws = [];
|
|
82
|
+
for (let i = start; i < end; i++) {
|
|
83
|
+
const entry = entries[i];
|
|
84
|
+
if (entry.kind === RenderEntryKind.Draw) {
|
|
85
|
+
draws.push({ entry, origIdx: i });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (draws.length <= 1) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (!preserveDrawOrder) {
|
|
92
|
+
const zGroups = new Map();
|
|
93
|
+
for (const d of draws) {
|
|
94
|
+
const z = d.entry.zIndex;
|
|
95
|
+
const list = zGroups.get(z) ?? [];
|
|
96
|
+
list.push(d);
|
|
97
|
+
zGroups.set(z, list);
|
|
98
|
+
}
|
|
99
|
+
for (const zGroup of zGroups.values()) {
|
|
100
|
+
if (zGroup.length > 1) {
|
|
101
|
+
this._overlapAwareGroup(zGroup, entries, start, end);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
static _overlapAwareGroup(zGroup, entries, segStart, segEnd) {
|
|
107
|
+
const keyGroups = new Map();
|
|
108
|
+
for (const d of zGroup) {
|
|
109
|
+
const key = groupKey(d.entry.command.material);
|
|
110
|
+
const list = keyGroups.get(key) ?? [];
|
|
111
|
+
list.push(d);
|
|
112
|
+
keyGroups.set(key, list);
|
|
113
|
+
}
|
|
114
|
+
if (keyGroups.size <= 1) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
for (const group of keyGroups.values()) {
|
|
118
|
+
if (group.length <= 1) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const positions = [];
|
|
122
|
+
for (const g of group) {
|
|
123
|
+
const pos = entries.indexOf(g.entry, segStart);
|
|
124
|
+
if (pos >= segStart && pos < segEnd) {
|
|
125
|
+
positions.push(pos);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
positions.sort((a, b) => a - b);
|
|
129
|
+
const first = positions[0];
|
|
130
|
+
const last = positions[positions.length - 1];
|
|
131
|
+
if (last - first + 1 === positions.length) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
let blocked = false;
|
|
135
|
+
for (let p = first + 1; p < last && !blocked; p++) {
|
|
136
|
+
const mid = entries[p];
|
|
137
|
+
if (mid.kind !== RenderEntryKind.Draw) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const midKey = groupKey(mid.command.material);
|
|
141
|
+
if (midKey === groupKey(group[0].entry.command.material)) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
for (const g of group) {
|
|
145
|
+
if (aabbOverlap(g.entry.command, mid.command)) {
|
|
146
|
+
blocked = true;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (blocked) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const beforeFirst = [];
|
|
155
|
+
for (let p = segStart; p < first; p++) {
|
|
156
|
+
beforeFirst.push(entries[p]);
|
|
157
|
+
}
|
|
158
|
+
const afterLast = [];
|
|
159
|
+
for (let p = last + 1; p < segEnd; p++) {
|
|
160
|
+
afterLast.push(entries[p]);
|
|
161
|
+
}
|
|
162
|
+
const groupSet = new Set(group.map(g => g.entry));
|
|
163
|
+
const betweenNonGroup = [];
|
|
164
|
+
for (let p = first; p <= last; p++) {
|
|
165
|
+
if (!groupSet.has(entries[p])) {
|
|
166
|
+
betweenNonGroup.push(entries[p]);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
const groupEntries = group.map(g => g.entry);
|
|
170
|
+
const reordered = [...beforeFirst, ...groupEntries, ...betweenNonGroup, ...afterLast];
|
|
171
|
+
for (let p = segStart; p < segEnd; p++) {
|
|
172
|
+
entries[p] = reordered[p - segStart];
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export { RenderPlanOptimizer };
|
|
180
|
+
//# sourceMappingURL=RenderPlanOptimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderPlanOptimizer.js","sources":["../../../../../src/rendering/plan/RenderPlanOptimizer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
2
|
+
import type { RenderPlan } from './RenderPlan';
|
|
3
|
+
import type { RenderScope } from './RenderScope';
|
|
4
|
+
/** @internal */
|
|
5
|
+
export declare class RenderPlanPlayer {
|
|
6
|
+
static play(plan: RenderPlan, backend: RenderBackend): void;
|
|
7
|
+
static playScope(scope: RenderScope, backend: RenderBackend): void;
|
|
8
|
+
private static _playGroup;
|
|
9
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { RenderEntryKind } from './RenderCommand.js';
|
|
2
|
+
import { RenderEffectExecutor } from './RenderEffectExecutor.js';
|
|
3
|
+
|
|
4
|
+
/** @internal */
|
|
5
|
+
class RenderPlanPlayer {
|
|
6
|
+
static play(plan, backend) {
|
|
7
|
+
const hooks = backend;
|
|
8
|
+
hooks._beginDrawPlan?.(plan.nodeCount);
|
|
9
|
+
try {
|
|
10
|
+
for (const pass of plan.passes) {
|
|
11
|
+
if (pass.target !== null && backend.renderTarget !== pass.target) {
|
|
12
|
+
backend.setRenderTarget(pass.target);
|
|
13
|
+
}
|
|
14
|
+
if (backend.view !== pass.view) {
|
|
15
|
+
backend.setView(pass.view);
|
|
16
|
+
}
|
|
17
|
+
if (pass.clearColor !== null) {
|
|
18
|
+
backend.clear(pass.clearColor);
|
|
19
|
+
}
|
|
20
|
+
this.playScope(pass.root, backend);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
hooks._endDrawPlan?.();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
static playScope(scope, backend) {
|
|
28
|
+
if (scope.kind === RenderEntryKind.Barrier) {
|
|
29
|
+
RenderEffectExecutor.play(scope, backend, childScope => {
|
|
30
|
+
this.playScope(childScope, backend);
|
|
31
|
+
});
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
this._playGroup(scope, backend);
|
|
35
|
+
}
|
|
36
|
+
static _playGroup(scope, backend) {
|
|
37
|
+
const hooks = backend;
|
|
38
|
+
for (const entry of scope.entries) {
|
|
39
|
+
if (entry.kind === RenderEntryKind.Draw) {
|
|
40
|
+
hooks._prepareDrawCommand?.(entry.command);
|
|
41
|
+
backend.draw(entry.command.drawable);
|
|
42
|
+
}
|
|
43
|
+
else if (entry.kind === RenderEntryKind.Group) {
|
|
44
|
+
this._playGroup(entry.scope, backend);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
RenderEffectExecutor.play(entry.scope, backend, childScope => {
|
|
48
|
+
this.playScope(childScope, backend);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { RenderPlanPlayer };
|
|
56
|
+
//# sourceMappingURL=RenderPlanPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderPlanPlayer.js","sources":["../../../../../src/rendering/plan/RenderPlanPlayer.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAcA;MACa,gBAAgB,CAAA;AACpB,IAAA,OAAO,IAAI,CAAC,IAAgB,EAAE,OAAsB,EAAA;QACzD,MAAM,KAAK,GAAG,OAAkD;QAEhE,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;AAEtC,QAAA,IAAI;AACF,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AAC9B,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,MAAM,EAAE;AAChE,oBAAA,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;gBACtC;gBAEA,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;AAC9B,oBAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5B;AAEA,gBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AAC5B,oBAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;gBAChC;gBAEA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;YACpC;QACF;gBAAU;AACR,YAAA,KAAK,CAAC,YAAY,IAAI;QACxB;IACF;AAEO,IAAA,OAAO,SAAS,CAAC,KAAkB,EAAE,OAAsB,EAAA;QAChE,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,OAAO,EAAE;YAC1C,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,IAAG;AACrD,gBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;AACrC,YAAA,CAAC,CAAC;YAEF;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC;IACjC;AAEQ,IAAA,OAAO,UAAU,CAAC,KAAiB,EAAE,OAAsB,EAAA;QACjE,MAAM,KAAK,GAAG,OAAkD;AAEhE,QAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,EAAE;gBACvC,KAAK,CAAC,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YACtC;iBAAO,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,KAAK,EAAE;gBAC/C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;YACvC;iBAAO;gBACL,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,IAAG;AAC3D,oBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;AACrC,gBAAA,CAAC,CAAC;YACJ;QACF;IACF;AACD;;;;"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { Rectangle } from '@/math/Rectangle';
|
|
2
|
+
import type { Filter } from '@/rendering/filters/Filter';
|
|
3
|
+
import type { Geometry } from '@/rendering/geometry/Geometry';
|
|
4
|
+
import type { MaskSource, RenderNode } from '@/rendering/RenderNode';
|
|
5
|
+
import type { BlendModes } from '@/rendering/types';
|
|
6
|
+
import type { DrawCommand, RenderEntryKind } from './RenderCommand';
|
|
7
|
+
/**
|
|
8
|
+
* Geometric clip kind for a {@link RenderNode}'s `clip`/`clipShape`. Distinct
|
|
9
|
+
* from `maskSource` (alpha/visibility masking): `Rect` uses the GPU scissor
|
|
10
|
+
* fast path, `Stencil` writes a {@link Geometry} silhouette into the stencil
|
|
11
|
+
* buffer. `maskSource` continues to drive the separate alpha-mask machinery.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare const enum ClipKind {
|
|
15
|
+
None = 0,
|
|
16
|
+
Rect = 1,
|
|
17
|
+
Stencil = 2
|
|
18
|
+
}
|
|
19
|
+
/** @internal */
|
|
20
|
+
export interface EffectDescriptor {
|
|
21
|
+
readonly filters: readonly Filter[];
|
|
22
|
+
readonly clip: ClipKind;
|
|
23
|
+
readonly clipShape: Rectangle | Geometry | null;
|
|
24
|
+
readonly maskSource: MaskSource;
|
|
25
|
+
readonly cacheAsBitmap: boolean;
|
|
26
|
+
readonly blendMode: BlendModes;
|
|
27
|
+
}
|
|
28
|
+
/** @internal */
|
|
29
|
+
export interface DrawScopeEntry {
|
|
30
|
+
readonly kind: RenderEntryKind.Draw;
|
|
31
|
+
readonly seq: number;
|
|
32
|
+
readonly zIndex: number;
|
|
33
|
+
readonly command: DrawCommand;
|
|
34
|
+
}
|
|
35
|
+
/** @internal */
|
|
36
|
+
export interface GroupScopeEntry {
|
|
37
|
+
readonly kind: RenderEntryKind.Group;
|
|
38
|
+
readonly seq: number;
|
|
39
|
+
readonly zIndex: number;
|
|
40
|
+
readonly scope: GroupScope;
|
|
41
|
+
}
|
|
42
|
+
/** @internal */
|
|
43
|
+
export interface BarrierScopeEntry {
|
|
44
|
+
readonly kind: RenderEntryKind.Barrier;
|
|
45
|
+
readonly seq: number;
|
|
46
|
+
readonly zIndex: number;
|
|
47
|
+
readonly scope: BarrierScope;
|
|
48
|
+
}
|
|
49
|
+
/** @internal */
|
|
50
|
+
export type ScopeEntry = DrawScopeEntry | GroupScopeEntry | BarrierScopeEntry;
|
|
51
|
+
/** @internal */
|
|
52
|
+
export interface GroupScope {
|
|
53
|
+
readonly kind: RenderEntryKind.Group;
|
|
54
|
+
entries: ScopeEntry[];
|
|
55
|
+
hasMixedZ: boolean;
|
|
56
|
+
preserveDrawOrder: boolean;
|
|
57
|
+
}
|
|
58
|
+
/** @internal */
|
|
59
|
+
export interface BarrierScope {
|
|
60
|
+
readonly kind: RenderEntryKind.Barrier;
|
|
61
|
+
readonly node: RenderNode;
|
|
62
|
+
readonly effect: EffectDescriptor;
|
|
63
|
+
childPlan: GroupScope | null;
|
|
64
|
+
left: number;
|
|
65
|
+
top: number;
|
|
66
|
+
width: number;
|
|
67
|
+
height: number;
|
|
68
|
+
}
|
|
69
|
+
/** @internal */
|
|
70
|
+
export type RenderScope = GroupScope | BarrierScope;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Geometric clip kind for a {@link RenderNode}'s `clip`/`clipShape`. Distinct
|
|
3
|
+
* from `maskSource` (alpha/visibility masking): `Rect` uses the GPU scissor
|
|
4
|
+
* fast path, `Stencil` writes a {@link Geometry} silhouette into the stencil
|
|
5
|
+
* buffer. `maskSource` continues to drive the separate alpha-mask machinery.
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
var ClipKind;
|
|
9
|
+
(function (ClipKind) {
|
|
10
|
+
ClipKind[ClipKind["None"] = 0] = "None";
|
|
11
|
+
ClipKind[ClipKind["Rect"] = 1] = "Rect";
|
|
12
|
+
ClipKind[ClipKind["Stencil"] = 2] = "Stencil";
|
|
13
|
+
})(ClipKind || (ClipKind = {}));
|
|
14
|
+
|
|
15
|
+
export { ClipKind };
|
|
16
|
+
//# sourceMappingURL=RenderScope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderScope.js","sources":["../../../../../src/rendering/plan/RenderScope.ts"],"sourcesContent":[null],"names":[],"mappings":"AAQA;;;;;;AAMG;IACe;AAAlB,CAAA,UAAkB,QAAQ,EAAA;AACxB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACT,CAAC,EAJiB,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
2
|
+
import type { RenderNode } from '@/rendering/RenderNode';
|
|
3
|
+
/** @internal — single source of truth for plan build→optimize→play. */
|
|
4
|
+
export declare function playRenderTree(node: RenderNode, backend: RenderBackend): void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { RenderPlanBuilder } from './RenderPlanBuilder.js';
|
|
2
|
+
import { RenderPlanOptimizer } from './RenderPlanOptimizer.js';
|
|
3
|
+
import { RenderPlanPlayer } from './RenderPlanPlayer.js';
|
|
4
|
+
|
|
5
|
+
/** @internal — single source of truth for plan build→optimize→play. */
|
|
6
|
+
function playRenderTree(node, backend) {
|
|
7
|
+
const builder = RenderPlanBuilder.acquire();
|
|
8
|
+
try {
|
|
9
|
+
const plan = builder.build(node, backend);
|
|
10
|
+
RenderPlanOptimizer.optimize(plan);
|
|
11
|
+
RenderPlanPlayer.play(plan, backend);
|
|
12
|
+
}
|
|
13
|
+
finally {
|
|
14
|
+
RenderPlanBuilder.release(builder);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { playRenderTree };
|
|
19
|
+
//# sourceMappingURL=playRenderTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playRenderTree.js","sources":["../../../../../src/rendering/plan/playRenderTree.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAOA;AACM,SAAU,cAAc,CAAC,IAAgB,EAAE,OAAsB,EAAA;AACrE,IAAA,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE;AAE3C,IAAA,IAAI;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;AAEzC,QAAA,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC;AAClC,QAAA,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;IACtC;YAAU;AACR,QAAA,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC;IACpC;AACF;;;;"}
|
|
@@ -2,6 +2,7 @@ import { Interval } from '@/math/Interval';
|
|
|
2
2
|
import { Rectangle } from '@/math/Rectangle';
|
|
3
3
|
import { Vector } from '@/math/Vector';
|
|
4
4
|
import { Drawable } from '@/rendering/Drawable';
|
|
5
|
+
import type { SpriteMaterial } from '@/rendering/material/SpriteMaterial';
|
|
5
6
|
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
6
7
|
import type { Texture } from '@/rendering/texture/Texture';
|
|
7
8
|
/**
|
|
@@ -42,6 +43,7 @@ export declare enum SpriteFlags {
|
|
|
42
43
|
export declare class Sprite extends Drawable {
|
|
43
44
|
private _texture;
|
|
44
45
|
private _textureFrame;
|
|
46
|
+
private _material;
|
|
45
47
|
private _vertices;
|
|
46
48
|
private _texCoords;
|
|
47
49
|
private readonly _normals;
|
|
@@ -50,6 +52,16 @@ export declare class Sprite extends Drawable {
|
|
|
50
52
|
set texture(texture: Texture | RenderTexture | null);
|
|
51
53
|
get textureFrame(): Rectangle;
|
|
52
54
|
set textureFrame(frame: Rectangle);
|
|
55
|
+
/**
|
|
56
|
+
* Custom material giving this sprite its own fragment program, uniforms, and
|
|
57
|
+
* extra texture bindings, or `null` for the default multi-texture sprite path.
|
|
58
|
+
*
|
|
59
|
+
* Sprites that share the same material instance and base texture still batch
|
|
60
|
+
* into a single instanced draw call; the base texture stays on the sprite and
|
|
61
|
+
* is bound per batch. Assigning a non-sprite material throws.
|
|
62
|
+
*/
|
|
63
|
+
get material(): SpriteMaterial | null;
|
|
64
|
+
set material(material: SpriteMaterial | null);
|
|
53
65
|
get width(): number;
|
|
54
66
|
set width(value: number);
|
|
55
67
|
get height(): number;
|
|
@@ -67,7 +79,16 @@ export declare class Sprite extends Drawable {
|
|
|
67
79
|
* texture is assigned.
|
|
68
80
|
*/
|
|
69
81
|
get texCoords(): Uint32Array;
|
|
70
|
-
/**
|
|
82
|
+
/**
|
|
83
|
+
* Assign a new texture, refreshing the texture frame to the full texture dimensions.
|
|
84
|
+
*
|
|
85
|
+
* Does **not** bump the texture's version. That signal means "the source data
|
|
86
|
+
* has been mutated"; replacing the sprite's texture reference is not that.
|
|
87
|
+
* Bumping it here would force the backend to re-allocate the GPU texture on
|
|
88
|
+
* the next bind — destroying any FBO content already rendered into a
|
|
89
|
+
* {@link RenderTexture} (the cacheAsBitmap and filter capture pipelines).
|
|
90
|
+
* Call {@link updateTexture} explicitly when you mutate the source.
|
|
91
|
+
*/
|
|
71
92
|
setTexture(texture: Texture | RenderTexture | null): this;
|
|
72
93
|
/** Signal the GPU backend that the underlying texture source has changed and reset the frame to full dimensions. */
|
|
73
94
|
updateTexture(): this;
|
|
@@ -43,6 +43,7 @@ var SpriteFlags;
|
|
|
43
43
|
class Sprite extends Drawable {
|
|
44
44
|
_texture = null;
|
|
45
45
|
_textureFrame = new Rectangle();
|
|
46
|
+
_material = null;
|
|
46
47
|
_vertices = new Float32Array(8);
|
|
47
48
|
_texCoords = new Uint32Array(4);
|
|
48
49
|
_normals = [new Vector(), new Vector(), new Vector(), new Vector()];
|
|
@@ -66,6 +67,24 @@ class Sprite extends Drawable {
|
|
|
66
67
|
set textureFrame(frame) {
|
|
67
68
|
this.setTextureFrame(frame);
|
|
68
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Custom material giving this sprite its own fragment program, uniforms, and
|
|
72
|
+
* extra texture bindings, or `null` for the default multi-texture sprite path.
|
|
73
|
+
*
|
|
74
|
+
* Sprites that share the same material instance and base texture still batch
|
|
75
|
+
* into a single instanced draw call; the base texture stays on the sprite and
|
|
76
|
+
* is bound per batch. Assigning a non-sprite material throws.
|
|
77
|
+
*/
|
|
78
|
+
get material() {
|
|
79
|
+
return this._material;
|
|
80
|
+
}
|
|
81
|
+
set material(material) {
|
|
82
|
+
if (material !== null && material.target !== 'sprite') {
|
|
83
|
+
throw new Error(`Sprite requires a SpriteMaterial (got a ${material.target} material).`);
|
|
84
|
+
}
|
|
85
|
+
this._material = material;
|
|
86
|
+
this.invalidateCache();
|
|
87
|
+
}
|
|
69
88
|
get width() {
|
|
70
89
|
return Math.abs(this.scale.x) * this._textureFrame.width;
|
|
71
90
|
}
|
|
@@ -131,11 +150,22 @@ class Sprite extends Drawable {
|
|
|
131
150
|
}
|
|
132
151
|
return this._texCoords;
|
|
133
152
|
}
|
|
134
|
-
/**
|
|
153
|
+
/**
|
|
154
|
+
* Assign a new texture, refreshing the texture frame to the full texture dimensions.
|
|
155
|
+
*
|
|
156
|
+
* Does **not** bump the texture's version. That signal means "the source data
|
|
157
|
+
* has been mutated"; replacing the sprite's texture reference is not that.
|
|
158
|
+
* Bumping it here would force the backend to re-allocate the GPU texture on
|
|
159
|
+
* the next bind — destroying any FBO content already rendered into a
|
|
160
|
+
* {@link RenderTexture} (the cacheAsBitmap and filter capture pipelines).
|
|
161
|
+
* Call {@link updateTexture} explicitly when you mutate the source.
|
|
162
|
+
*/
|
|
135
163
|
setTexture(texture) {
|
|
136
164
|
if (this._texture !== texture) {
|
|
137
165
|
this._texture = texture;
|
|
138
|
-
|
|
166
|
+
if (texture !== null) {
|
|
167
|
+
this.resetTextureFrame();
|
|
168
|
+
}
|
|
139
169
|
this.invalidateCache();
|
|
140
170
|
}
|
|
141
171
|
return this;
|
|
@@ -257,6 +287,7 @@ class Sprite extends Drawable {
|
|
|
257
287
|
}
|
|
258
288
|
this._textureFrame.destroy();
|
|
259
289
|
this._texture = null;
|
|
290
|
+
this._material = null;
|
|
260
291
|
}
|
|
261
292
|
}
|
|
262
293
|
RenderNode.setInternalSpriteFactory(() => new Sprite(null));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sprite.js","sources":["../../../../../src/rendering/sprite/Sprite.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"Sprite.js","sources":["../../../../../src/rendering/sprite/Sprite.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical engine vertex stage for the custom {@link SpriteMaterial} path.
|
|
3
|
+
*
|
|
4
|
+
* @internal — not part of the public package surface. A custom `SpriteMaterial`
|
|
5
|
+
* customizes the **fragment** stage only; the vertex stage (quad-corner
|
|
6
|
+
* expansion, affine transform, UV unpacking) is owned by the renderer and stays
|
|
7
|
+
* instancing-critical. The sprite renderers consume these constants directly:
|
|
8
|
+
* `WebGl2SpriteRenderer` pairs {@link spriteVertexGlsl} with the material's
|
|
9
|
+
* fragment (ignoring any author-supplied `glsl.vertex`), and
|
|
10
|
+
* `WebGpuSpriteRenderer` prepends {@link spriteVertexWgsl} to the material's
|
|
11
|
+
* fragment WGSL. Both pin the per-instance attribute locations 0–5 and the
|
|
12
|
+
* projection binding exactly as the default sprite path does, so a custom
|
|
13
|
+
* material keeps the single `drawArraysInstanced` / `drawIndexed` batch.
|
|
14
|
+
*
|
|
15
|
+
* A custom fragment receives the interpolated `v_texcoord` and premultiplied
|
|
16
|
+
* `v_color`, plus the per-batch base texture bound as `u_texture` (WebGL2 unit 0
|
|
17
|
+
* / WGSL group(1) binding 0). Material uniforms and additional textures bind on
|
|
18
|
+
* top (WebGL2 units 1..N / WGSL group(2)).
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* GLSL ES 3.00 vertex shader for the custom sprite-material path. Identical
|
|
22
|
+
* corner expansion and attribute contract to the default sprite vertex shader.
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export declare const spriteVertexGlsl = "#version 300 es\nprecision highp float;\nprecision highp int;\n\n// Per-instance attributes (divisor = 1). Each Sprite contributes one entry\n// to the per-instance buffer; gl_VertexID 0..3 selects which corner of the\n// quad this invocation is computing.\nlayout(location = 0) in vec4 a_localBounds; // left, top, right, bottom (local space)\nlayout(location = 1) in vec3 a_transformAB; // a, b, x \u2014 first row of 2D affine\nlayout(location = 2) in vec3 a_transformCD; // c, d, y \u2014 second row\nlayout(location = 3) in vec4 a_uvBounds; // uMin, vMin, uMax, vMax (normalised, already flipY-swapped)\nlayout(location = 4) in vec4 a_color; // RGBA tint\nlayout(location = 5) in uint a_textureSlot;\n\nuniform mat3 u_projection;\n\nout vec2 v_texcoord;\nout vec4 v_color;\nflat out uint v_textureSlot;\n\nvoid main(void) {\n // gl_VertexID 0..3 \u2192 corner: 0=TL, 1=TR, 2=BL, 3=BR (TRIANGLE_STRIP order)\n int vid = gl_VertexID;\n int cornerX = vid & 1;\n int cornerY = (vid >> 1) & 1;\n\n float localX = (cornerX == 0) ? a_localBounds.x : a_localBounds.z;\n float localY = (cornerY == 0) ? a_localBounds.y : a_localBounds.w;\n\n float worldX = (a_transformAB.x * localX) + (a_transformAB.y * localY) + a_transformAB.z;\n float worldY = (a_transformCD.x * localX) + (a_transformCD.y * localY) + a_transformCD.z;\n\n gl_Position = vec4((u_projection * vec3(worldX, worldY, 1.0)).xy, 0.0, 1.0);\n\n float u = (cornerX == 0) ? a_uvBounds.x : a_uvBounds.z;\n float v = (cornerY == 0) ? a_uvBounds.y : a_uvBounds.w;\n v_texcoord = vec2(u, v);\n\n v_color = vec4(a_color.rgb * a_color.a, a_color.a);\n v_textureSlot = a_textureSlot;\n}\n";
|
|
26
|
+
/**
|
|
27
|
+
* WGSL vertex stage + shared bindings for the custom sprite-material path.
|
|
28
|
+
* Prepend to a material's fragment WGSL: it declares the per-instance
|
|
29
|
+
* `VertexInput` (locations 0–5), the `VertexOutput` a custom `@fragment`
|
|
30
|
+
* consumes, the group(0) projection uniform, the group(1) base texture and
|
|
31
|
+
* sampler (`u_texture` / `u_sampler`), and the `vertexMain` entry point. The
|
|
32
|
+
* fragment author adds their group(2) bindings and a `fragmentMain` reading
|
|
33
|
+
* `VertexOutput`.
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
export declare const spriteVertexWgsl = "\nstruct ProjectionUniforms {\n matrix: mat4x4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> projection: ProjectionUniforms;\n\n@group(1) @binding(0) var u_texture: texture_2d<f32>;\n@group(1) @binding(1) var u_sampler: sampler;\n\nstruct VertexInput {\n @location(0) localBounds: vec4<f32>,\n @location(1) transformAB: vec3<f32>,\n @location(2) transformCD: vec3<f32>,\n @location(3) uvBounds: vec4<f32>,\n @location(4) color: vec4<f32>,\n @location(5) textureSlot: u32,\n};\n\nstruct VertexOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) texcoord: vec2<f32>,\n @location(1) color: vec4<f32>,\n};\n\n@vertex\nfn vertexMain(input: VertexInput, @builtin(vertex_index) vid: u32) -> VertexOutput {\n var output: VertexOutput;\n\n let cornerX = ((vid + 1u) >> 1u) & 1u;\n let cornerY = vid >> 1u;\n\n let localX = select(input.localBounds.x, input.localBounds.z, cornerX == 1u);\n let localY = select(input.localBounds.y, input.localBounds.w, cornerY == 1u);\n\n let worldX = input.transformAB.x * localX + input.transformAB.y * localY + input.transformAB.z;\n let worldY = input.transformCD.x * localX + input.transformCD.y * localY + input.transformCD.z;\n\n output.position = projection.matrix * vec4<f32>(worldX, worldY, 0.0, 1.0);\n\n let u = select(input.uvBounds.x, input.uvBounds.z, cornerX == 1u);\n let v = select(input.uvBounds.y, input.uvBounds.w, cornerY == 1u);\n output.texcoord = vec2<f32>(u, v);\n\n output.color = vec4<f32>(input.color.rgb * input.color.a, input.color.a);\n\n return output;\n}\n";
|