Skip to content

Commit 8face3b

Browse files
committed
Merge branch 'main' into dev/1.3
2 parents e97305b + 7eb70be commit 8face3b

File tree

19 files changed

+136
-131
lines changed

19 files changed

+136
-131
lines changed

packages/core/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@galacean/engine-core",
3-
"version": "1.2.0-beta.5",
3+
"version": "1.2.0-beta.6",
44
"publishConfig": {
55
"access": "public",
66
"registry": "https://registry.npmjs.org"

packages/core/src/BasicResources.ts

+95
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Engine } from "./Engine";
2+
import { ContentRestorer } from "./asset/ContentRestorer";
23
import { Buffer } from "./graphic/Buffer";
34
import { VertexElement } from "./graphic/VertexElement";
45
import { BufferBindFlag } from "./graphic/enums/BufferBindFlag";
@@ -8,6 +9,9 @@ import { VertexElementFormat } from "./graphic/enums/VertexElementFormat";
89
import { Material } from "./material";
910
import { ModelMesh } from "./mesh";
1011
import { Shader } from "./shader/Shader";
12+
import { Texture, Texture2D, TextureCube, TextureCubeFace } from "./texture";
13+
import { Texture2DArray } from "./texture/Texture2DArray";
14+
import { TextureFormat } from "./texture/enums/TextureFormat";
1115

1216
/**
1317
* @internal
@@ -17,6 +21,11 @@ export class BasicResources {
1721
readonly flipYBlitMesh: ModelMesh;
1822
readonly blitMaterial: Material;
1923

24+
readonly whiteTexture2D: Texture2D;
25+
readonly whiteTextureCube: TextureCube;
26+
readonly whiteTexture2DArray: Texture2DArray;
27+
readonly uintWhiteTexture2D: Texture2D;
28+
2029
constructor(engine: Engine) {
2130
// prettier-ignore
2231
const vertices = new Float32Array([
@@ -40,6 +49,30 @@ export class BasicResources {
4049
this.blitMesh = this._createBlitMesh(engine, vertices);
4150
this.flipYBlitMesh = this._createBlitMesh(engine, flipYVertices);
4251
this.blitMaterial = blitMaterial;
52+
53+
// Create white and magenta textures
54+
const whitePixel = new Uint8Array([255, 255, 255, 255]);
55+
56+
this.whiteTexture2D = this._create1x1Texture(engine, TextureType.Texture2D, TextureFormat.R8G8B8A8, whitePixel);
57+
this.whiteTextureCube = this._create1x1Texture(engine, TextureType.TextureCube, TextureFormat.R8G8B8A8, whitePixel);
58+
59+
const isWebGL2 = engine._hardwareRenderer.isWebGL2;
60+
if (isWebGL2) {
61+
this.whiteTexture2DArray = this._create1x1Texture(
62+
engine,
63+
TextureType.Texture2DArray,
64+
TextureFormat.R8G8B8A8,
65+
whitePixel
66+
);
67+
68+
const whitePixel32 = new Uint32Array([255, 255, 255, 255]);
69+
this.uintWhiteTexture2D = this._create1x1Texture(
70+
engine,
71+
TextureType.Texture2D,
72+
TextureFormat.R32G32B32A32_UInt,
73+
whitePixel32
74+
);
75+
}
4376
}
4477

4578
private _createBlitMesh(engine: Engine, vertices: Float32Array): ModelMesh {
@@ -50,4 +83,66 @@ export class BasicResources {
5083
mesh.addSubMesh(0, 4, MeshTopology.TriangleStrip);
5184
return mesh;
5285
}
86+
87+
private _create1x1Texture<T extends Texture>(
88+
engine: Engine,
89+
type: TextureType,
90+
format: TextureFormat,
91+
pixel: Uint8Array | Uint32Array
92+
): T {
93+
let texture: Texture;
94+
95+
switch (type) {
96+
case TextureType.Texture2D:
97+
const texture2D = new Texture2D(engine, 1, 1, format, false);
98+
texture2D.setPixelBuffer(pixel);
99+
texture = texture2D;
100+
break;
101+
case TextureType.Texture2DArray:
102+
const texture2DArray = new Texture2DArray(engine, 1, 1, 1, format, false);
103+
texture2DArray.setPixelBuffer(0, pixel);
104+
texture = texture2DArray;
105+
break;
106+
case TextureType.TextureCube:
107+
const textureCube = new TextureCube(engine, 1, format, false);
108+
for (let i = 0; i < 6; i++) {
109+
textureCube.setPixelBuffer(TextureCubeFace.PositiveX + i, pixel);
110+
}
111+
texture = textureCube;
112+
break;
113+
default:
114+
throw "Invalid texture type";
115+
}
116+
117+
texture.isGCIgnored = true;
118+
engine.resourceManager.addContentRestorer(
119+
new (class extends ContentRestorer<Texture> {
120+
constructor() {
121+
super(texture);
122+
}
123+
restoreContent() {
124+
switch (type) {
125+
case TextureType.Texture2D:
126+
(<Texture2D>this.resource).setPixelBuffer(pixel);
127+
break;
128+
case TextureType.Texture2DArray:
129+
(<Texture2DArray>this.resource).setPixelBuffer(0, pixel);
130+
break;
131+
case TextureType.TextureCube:
132+
for (let i = 0; i < 6; i++) {
133+
(<TextureCube>this.resource).setPixelBuffer(TextureCubeFace.PositiveX + i, pixel);
134+
}
135+
break;
136+
}
137+
}
138+
})()
139+
);
140+
return texture as T;
141+
}
142+
}
143+
144+
enum TextureType {
145+
Texture2D,
146+
TextureCube,
147+
Texture2DArray
53148
}

packages/core/src/Engine.ts

+1-99
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import { RenderElement } from "./RenderPipeline/RenderElement";
2121
import { SubRenderElement } from "./RenderPipeline/SubRenderElement";
2222
import { Scene } from "./Scene";
2323
import { SceneManager } from "./SceneManager";
24-
import { ContentRestorer } from "./asset/ContentRestorer";
2524
import { ResourceManager } from "./asset/ResourceManager";
2625
import { EventDispatcher, Logger, Time } from "./base";
2726
import { GLCapabilityType } from "./base/Constant";
@@ -44,9 +43,7 @@ import { ColorWriteMask } from "./shader/enums/ColorWriteMask";
4443
import { CullMode } from "./shader/enums/CullMode";
4544
import { RenderQueueType } from "./shader/enums/RenderQueueType";
4645
import { RenderState } from "./shader/state/RenderState";
47-
import { Texture2D, Texture2DArray, TextureCube, TextureCubeFace, TextureFormat } from "./texture";
48-
import { ClearableObjectPool } from "./utils/ClearableObjectPool";
49-
import { ReturnableObjectPool } from "./utils/ReturnableObjectPool";
46+
import { Texture2D, TextureFormat } from "./texture";
5047
import { XRManager } from "./xr/XRManager";
5148

5249
ShaderPool.init();
@@ -106,16 +103,6 @@ export class Engine extends EventDispatcher {
106103
/* @internal */
107104
_renderContext: RenderContext = new RenderContext();
108105

109-
/* @internal */
110-
_whiteTexture2D: Texture2D;
111-
/* @internal */
112-
_magentaTexture2D: Texture2D;
113-
/* @internal */
114-
_uintMagentaTexture2D: Texture2D;
115-
/* @internal */
116-
_magentaTextureCube: TextureCube;
117-
/* @internal */
118-
_magentaTexture2DArray: Texture2DArray;
119106
/* @internal */
120107
_meshMagentaMaterial: Material;
121108
/* @internal */
@@ -276,8 +263,6 @@ export class Engine extends EventDispatcher {
276263
this.xrManager._initialize(this, xrDevice);
277264
}
278265

279-
this._initMagentaTextures(hardwareRenderer);
280-
281266
if (!hardwareRenderer.canIUse(GLCapabilityType.depthTexture)) {
282267
this._macroCollection.enable(Engine._noDepthTextureMacro);
283268
} else {
@@ -555,89 +540,6 @@ export class Engine extends EventDispatcher {
555540
}
556541
}
557542

558-
/**
559-
* @internal
560-
*/
561-
_initMagentaTextures(hardwareRenderer: IHardwareRenderer) {
562-
const whitePixel = new Uint8Array([255, 255, 255, 255]);
563-
const whiteTexture2D = new Texture2D(this, 1, 1, TextureFormat.R8G8B8A8, false);
564-
whiteTexture2D.setPixelBuffer(whitePixel);
565-
whiteTexture2D.isGCIgnored = true;
566-
567-
const magentaPixel = new Uint8Array([255, 0, 255, 255]);
568-
const magentaTexture2D = new Texture2D(this, 1, 1, TextureFormat.R8G8B8A8, false);
569-
magentaTexture2D.setPixelBuffer(magentaPixel);
570-
magentaTexture2D.isGCIgnored = true;
571-
572-
this.resourceManager.addContentRestorer(
573-
new (class extends ContentRestorer<Texture2D> {
574-
constructor() {
575-
super(magentaTexture2D);
576-
}
577-
restoreContent() {
578-
this.resource.setPixelBuffer(magentaPixel);
579-
}
580-
})()
581-
);
582-
583-
const magentaTextureCube = new TextureCube(this, 1, TextureFormat.R8G8B8A8, false);
584-
for (let i = 0; i < 6; i++) {
585-
magentaTextureCube.setPixelBuffer(TextureCubeFace.PositiveX + i, magentaPixel);
586-
}
587-
magentaTextureCube.isGCIgnored = true;
588-
589-
this.resourceManager.addContentRestorer(
590-
new (class extends ContentRestorer<TextureCube> {
591-
constructor() {
592-
super(magentaTextureCube);
593-
}
594-
restoreContent() {
595-
for (let i = 0; i < 6; i++) {
596-
this.resource.setPixelBuffer(TextureCubeFace.PositiveX + i, magentaPixel);
597-
}
598-
}
599-
})()
600-
);
601-
602-
this._whiteTexture2D = whiteTexture2D;
603-
this._magentaTexture2D = magentaTexture2D;
604-
this._magentaTextureCube = magentaTextureCube;
605-
606-
if (hardwareRenderer.isWebGL2) {
607-
const magentaPixel32 = new Uint32Array([255, 0, 255, 255]);
608-
const uintMagentaTexture2D = new Texture2D(this, 1, 1, TextureFormat.R32G32B32A32_UInt, false);
609-
uintMagentaTexture2D.setPixelBuffer(magentaPixel32);
610-
uintMagentaTexture2D.isGCIgnored = true;
611-
this.resourceManager.addContentRestorer(
612-
new (class extends ContentRestorer<Texture2D> {
613-
constructor() {
614-
super(uintMagentaTexture2D);
615-
}
616-
restoreContent() {
617-
this.resource.setPixelBuffer(magentaPixel32);
618-
}
619-
})()
620-
);
621-
622-
const magentaTexture2DArray = new Texture2DArray(this, 1, 1, 1, TextureFormat.R8G8B8A8, false);
623-
magentaTexture2DArray.setPixelBuffer(0, magentaPixel);
624-
magentaTexture2DArray.isGCIgnored = true;
625-
this.resourceManager.addContentRestorer(
626-
new (class extends ContentRestorer<Texture2DArray> {
627-
constructor() {
628-
super(magentaTexture2DArray);
629-
}
630-
restoreContent() {
631-
this.resource.setPixelBuffer(0, magentaPixel);
632-
}
633-
})()
634-
);
635-
636-
this._uintMagentaTexture2D = uintMagentaTexture2D;
637-
this._magentaTexture2DArray = magentaTexture2DArray;
638-
}
639-
}
640-
641543
/**
642544
* @internal
643545
*/

packages/core/src/Entity.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ export class Entity extends EngineObject {
420420
* @returns Cloned entity
421421
*/
422422
clone(): Entity {
423-
const cloneEntity = this._createCloneEntity(this);
423+
const cloneEntity = this._createCloneEntity();
424424
this._parseCloneEntity(this, cloneEntity, this, cloneEntity, new Map<Object, Object>());
425425
return cloneEntity;
426426
}
@@ -433,26 +433,26 @@ export class Entity extends EngineObject {
433433
this._templateResource = templateResource;
434434
}
435435

436-
private _createCloneEntity(srcEntity: Entity): Entity {
437-
const cloneEntity = new Entity(srcEntity._engine, srcEntity.name);
436+
private _createCloneEntity(): Entity {
437+
const cloneEntity = new Entity(this._engine, this.name);
438438

439439
const templateResource = this._templateResource;
440440
if (templateResource) {
441441
cloneEntity._templateResource = templateResource;
442442
templateResource._addReferCount(1);
443443
}
444444

445-
cloneEntity.layer = srcEntity.layer;
446-
cloneEntity._isActive = srcEntity._isActive;
445+
cloneEntity.layer = this.layer;
446+
cloneEntity._isActive = this._isActive;
447447
const { transform: cloneTransform } = cloneEntity;
448-
const { transform: srcTransform } = srcEntity;
448+
const { transform: srcTransform } = this;
449449
cloneTransform.position = srcTransform.position;
450450
cloneTransform.rotation = srcTransform.rotation;
451451
cloneTransform.scale = srcTransform.scale;
452452

453-
const children = srcEntity._children;
454-
for (let i = 0, n = srcEntity._children.length; i < n; i++) {
455-
cloneEntity.addChild(this._createCloneEntity(children[i]));
453+
const srcChildren = this._children;
454+
for (let i = 0, n = srcChildren.length; i < n; i++) {
455+
cloneEntity.addChild(srcChildren[i]._createCloneEntity());
456456
}
457457
return cloneEntity;
458458
}

packages/core/src/RenderPipeline/BasicRenderPipeline.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export class BasicRenderPipeline {
9696
depthOnlyPass.onRender(context, cullingResults);
9797
context.rendererUpdateFlag = ContextRendererUpdateFlag.None;
9898
} else {
99-
camera.shaderData.setTexture(Camera._cameraDepthTextureProperty, engine._whiteTexture2D);
99+
camera.shaderData.setTexture(Camera._cameraDepthTextureProperty, engine._basicResources.whiteTexture2D);
100100
}
101101

102102
// Check if need to create internal color texture

packages/core/src/shader/ShaderProgram.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ export class ShaderProgram {
314314
const program = this._glProgram;
315315
const uniformInfos = this._getUniformInfos();
316316
const attributeInfos = this._getAttributeInfos();
317+
const basicResources = this._engine._basicResources;
317318

318319
uniformInfos.forEach(({ name, size, type }) => {
319320
const shaderUniform = new ShaderUniform(this._engine);
@@ -410,16 +411,16 @@ export class ShaderProgram {
410411
let defaultTexture: Texture;
411412
switch (type) {
412413
case gl.SAMPLER_2D:
413-
defaultTexture = this._engine._magentaTexture2D;
414+
defaultTexture = basicResources.whiteTexture2D;
414415
break;
415416
case gl.SAMPLER_CUBE:
416-
defaultTexture = this._engine._magentaTextureCube;
417+
defaultTexture = basicResources.whiteTextureCube;
417418
break;
418419
case (<WebGL2RenderingContext>gl).UNSIGNED_INT_SAMPLER_2D:
419-
defaultTexture = this._engine._uintMagentaTexture2D;
420+
defaultTexture = basicResources.uintWhiteTexture2D;
420421
break;
421422
case (<WebGL2RenderingContext>gl).SAMPLER_2D_ARRAY:
422-
defaultTexture = this._engine._magentaTexture2DArray;
423+
defaultTexture = basicResources.whiteTexture2DArray;
423424
break;
424425
case (<WebGL2RenderingContext>gl).SAMPLER_2D_SHADOW:
425426
defaultTexture = this._engine._depthTexture2D;

packages/design/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@galacean/engine-design",
3-
"version": "1.2.0-beta.5",
3+
"version": "1.2.0-beta.6",
44
"publishConfig": {
55
"access": "public",
66
"registry": "https://registry.npmjs.org"

packages/galacean/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@galacean/engine",
3-
"version": "1.2.0-beta.5",
3+
"version": "1.2.0-beta.6",
44
"publishConfig": {
55
"access": "public",
66
"registry": "https://registry.npmjs.org"

packages/loader/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@galacean/engine-loader",
3-
"version": "1.2.0-beta.5",
3+
"version": "1.2.0-beta.6",
44
"publishConfig": {
55
"access": "public",
66
"registry": "https://registry.npmjs.org"

packages/math/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@galacean/engine-math",
3-
"version": "1.2.0-beta.5",
3+
"version": "1.2.0-beta.6",
44
"publishConfig": {
55
"access": "public",
66
"registry": "https://registry.npmjs.org"

packages/physics-lite/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@galacean/engine-physics-lite",
3-
"version": "1.2.0-beta.5",
3+
"version": "1.2.0-beta.6",
44
"publishConfig": {
55
"access": "public",
66
"registry": "https://registry.npmjs.org"

packages/physics-physx/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@galacean/engine-physics-physx",
3-
"version": "1.2.0-beta.5",
3+
"version": "1.2.0-beta.6",
44
"publishConfig": {
55
"access": "public",
66
"registry": "https://registry.npmjs.org"

0 commit comments

Comments
 (0)