Skip to content

Commit

Permalink
FloatTexture version Blendshape (#737)
Browse files Browse the repository at this point in the history
* feat: add texture-2d-array and rename TextureCubeMap to TextureCube

* feat: opt blendshape animation and improve attribute version
  • Loading branch information
GuoLei1990 authored Apr 20, 2022
1 parent 18e7bc7 commit a2f0584
Show file tree
Hide file tree
Showing 54 changed files with 1,222 additions and 412 deletions.
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"npmClient": "npm",
"version": "0.6.7",
"version": "0.7.0-beta.0",
"bootstrap": {
"hoist": true
},
Expand Down
4 changes: 2 additions & 2 deletions packages/controls/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/controls",
"version": "0.6.7",
"version": "0.7.0-beta.0",
"license": "MIT",
"scripts": {
"b:types": "tsc",
Expand All @@ -15,6 +15,6 @@
"types/**/*"
],
"dependencies": {
"oasis-engine": "0.6.7"
"oasis-engine": "0.7.0-beta.0"
}
}
6 changes: 3 additions & 3 deletions packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/core",
"version": "0.6.7",
"version": "0.7.0-beta.0",
"license": "MIT",
"main": "dist/main.js",
"module": "dist/module.js",
Expand All @@ -14,9 +14,9 @@
"types/**/*"
],
"dependencies": {
"@oasis-engine/math": "0.6.7"
"@oasis-engine/math": "0.7.0-beta.0"
},
"devDependencies": {
"@oasis-engine/design": "0.6.7"
"@oasis-engine/design": "0.7.0-beta.0"
}
}
10 changes: 5 additions & 5 deletions packages/core/src/2d/sprite/Sprite.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { BoundingBox, MathUtil, Rect, Vector2, Vector4 } from "@oasis-engine/math";
import { RefObject } from "../../asset/RefObject";
import { BoolUpdateFlag } from "../../BoolUpdateFlag";
import { Engine } from "../../Engine";
import { Texture2D } from "../../texture/Texture2D";
import { UpdateFlag } from "../../UpdateFlag";
import { UpdateFlagManager } from "../../UpdateFlagManager";

/**
Expand Down Expand Up @@ -182,7 +182,7 @@ export class Sprite extends RefObject {
* Clone.
* @returns Cloned sprite
*/
clone(): Sprite {
clone(): Sprite {
const cloneSprite = new Sprite(
this._engine,
this._texture,
Expand All @@ -201,8 +201,8 @@ export class Sprite extends RefObject {
/**
* @internal
*/
_registerUpdateFlag(): UpdateFlag {
return this._updateFlagManager.register();
_registerUpdateFlag(): BoolUpdateFlag {
return this._updateFlagManager.createFlag(BoolUpdateFlag);
}

/**
Expand Down Expand Up @@ -363,7 +363,7 @@ export class Sprite extends RefObject {

private _setDirtyFlagTrue(type: number): void {
this._dirtyFlag |= type;
this._updateFlagManager.distribute();
this._updateFlagManager.dispatch();
}

private _setDirtyFlagFalse(type: number): void {
Expand Down
5 changes: 3 additions & 2 deletions packages/core/src/2d/sprite/SpriteMask.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Vector3 } from "@oasis-engine/math";
import { BoolUpdateFlag } from "../../BoolUpdateFlag";
import { Camera } from "../../Camera";
import { assignmentClone, deepClone, ignoreClone } from "../../clone/CloneManager";
import { ICustomClone } from "../../clone/ComponentCloner";
Expand Down Expand Up @@ -28,13 +29,13 @@ export class SpriteMask extends Renderer implements ICustomClone {
@deepClone
private _positions: Vector3[] = [new Vector3(), new Vector3(), new Vector3(), new Vector3()];
@ignoreClone
private _worldMatrixDirtyFlag: UpdateFlag;
private _worldMatrixDirtyFlag: BoolUpdateFlag;
@ignoreClone
private _sprite: Sprite = null;
@assignmentClone
private _alphaCutoff: number = 0.5;
@ignoreClone
private _spriteDirty: UpdateFlag;
private _spriteDirty: BoolUpdateFlag;

/** The mask layers the sprite mask influence to. */
@assignmentClone
Expand Down
5 changes: 3 additions & 2 deletions packages/core/src/2d/sprite/SpriteRenderer.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { BoundingBox, Color, Vector3 } from "@oasis-engine/math";
import { BoolUpdateFlag } from "../../BoolUpdateFlag";
import { Camera } from "../../Camera";
import { assignmentClone, deepClone, ignoreClone } from "../../clone/CloneManager";
import { ICustomClone } from "../../clone/ComponentCloner";
Expand Down Expand Up @@ -45,9 +46,9 @@ export class SpriteRenderer extends Renderer implements ICustomClone {
@ignoreClone
private _dirtyFlag: number = 0;
@ignoreClone
private _isWorldMatrixDirty: UpdateFlag;
private _isWorldMatrixDirty: BoolUpdateFlag;
@ignoreClone
private _spriteDirty: UpdateFlag;
private _spriteDirty: BoolUpdateFlag;
@assignmentClone
private _maskInteraction: SpriteMaskInteraction = SpriteMaskInteraction.None;
@assignmentClone
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/2d/text/TextRenderer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { BoundingBox, Color, Vector3 } from "@oasis-engine/math";
import { Sprite, SpriteMaskInteraction, SpriteMaskLayer, SpriteRenderer } from "..";
import { CompareFunction, Renderer, UpdateFlag } from "../..";
import { BoolUpdateFlag } from "../../BoolUpdateFlag";
import { Camera } from "../../Camera";
import { assignmentClone, deepClone, ignoreClone } from "../../clone/CloneManager";
import { Entity } from "../../Entity";
Expand Down Expand Up @@ -55,7 +56,7 @@ export class TextRenderer extends Renderer {
@ignoreClone
private _dirtyFlag: number = DirtyFlag.Property;
@ignoreClone
private _isWorldMatrixDirty: UpdateFlag;
private _isWorldMatrixDirty: BoolUpdateFlag;
@assignmentClone
private _maskInteraction: SpriteMaskInteraction = SpriteMaskInteraction.None;
@assignmentClone
Expand Down
16 changes: 16 additions & 0 deletions packages/core/src/BoolUpdateFlag.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { UpdateFlag } from "./UpdateFlag";

/**
* Used to update tags.
*/
export class BoolUpdateFlag extends UpdateFlag {
/** Flag. */
flag = true;

/**
* @inheritdoc
*/
dispatch(): void {
this.flag = true;
}
}
7 changes: 4 additions & 3 deletions packages/core/src/Camera.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { BoundingFrustum, MathUtil, Matrix, Quaternion, Ray, Vector2, Vector3, Vector4 } from "@oasis-engine/math";
import { Logger } from "./base";
import { BoolUpdateFlag } from "./BoolUpdateFlag";
import { deepClone, ignoreClone } from "./clone/CloneManager";
import { Component } from "./Component";
import { dependencies } from "./ComponentsDependencies";
Expand Down Expand Up @@ -124,13 +125,13 @@ export class Camera extends Component {
private _renderTarget: RenderTarget = null;

@ignoreClone
private _frustumViewChangeFlag: UpdateFlag;
private _frustumViewChangeFlag: BoolUpdateFlag;
@ignoreClone
private _transform: Transform;
@ignoreClone
private _isViewMatrixDirty: UpdateFlag;
private _isViewMatrixDirty: BoolUpdateFlag;
@ignoreClone
private _isInvViewProjDirty: UpdateFlag;
private _isInvViewProjDirty: BoolUpdateFlag;
@deepClone
private _projectionMatrix: Matrix = new Matrix();
@deepClone
Expand Down
11 changes: 10 additions & 1 deletion packages/core/src/Engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import { ShaderMacroCollection } from "./shader/ShaderMacroCollection";
import { ShaderPool } from "./shader/ShaderPool";
import { ShaderProgramPool } from "./shader/ShaderProgramPool";
import { RenderState } from "./shader/state/RenderState";
import { Texture2D, TextureCube, TextureCubeFace, TextureFormat } from "./texture";
import { Texture2D, Texture2DArray, TextureCube, TextureCubeFace, TextureFormat } from "./texture";

/** TODO: delete */
const engineFeatureManager = new FeatureManager<EngineFeature>();
Expand Down Expand Up @@ -64,6 +64,8 @@ export class Engine extends EventDispatcher {
/* @internal */
_whiteTextureCube: TextureCube;
/* @internal */
_whiteTexture2DArray: Texture2DArray;
/* @internal */
_backgroundTextureMaterial: Material;
/* @internal */
_renderCount: number = 0;
Expand Down Expand Up @@ -214,6 +216,13 @@ export class Engine extends EventDispatcher {
this._whiteTexture2D = whiteTexture2D;
this._whiteTextureCube = whiteTextureCube;

if (hardwareRenderer.isWebGL2) {
const whiteTexture2DArray = new Texture2DArray(this, 1, 1, 1, TextureFormat.R8G8B8A8, false);
whiteTexture2DArray.setPixelBuffer(0, whitePixel);
whiteTexture2DArray.isGCIgnored = true;
this._whiteTexture2DArray = whiteTexture2DArray;
}

this._backgroundTextureMaterial = new Material(this, Shader.find("background-texture"));
this._backgroundTextureMaterial.isGCIgnored = true;
this._backgroundTextureMaterial.renderState.depthState.compareFunction = CompareFunction.LessEqual;
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/Entity.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Matrix } from "@oasis-engine/math";
import { EngineObject } from "./base";
import { BoolUpdateFlag } from "./BoolUpdateFlag";
import { ComponentCloner } from "./clone/ComponentCloner";
import { Component } from "./Component";
import { ComponentsDependencies } from "./ComponentsDependencies";
Expand Down Expand Up @@ -484,7 +485,7 @@ export class Entity extends EngineObject {

//--------------------------------------------------------------deprecated----------------------------------------------------------------
private _invModelMatrix: Matrix = new Matrix();
private _inverseWorldMatFlag: UpdateFlag;
private _inverseWorldMatFlag: BoolUpdateFlag;

/**
* @deprecated
Expand Down
16 changes: 16 additions & 0 deletions packages/core/src/ListenerUpdateFlag.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { UpdateFlag } from "./UpdateFlag";

/**
* Used to update tags.
*/
export class ListenerUpdateFlag extends UpdateFlag {
/** Listener. */
listener: Function;

/**
* @inheritdoc
*/
dispatch(param?: Object): void {
this.listener && this.listener(param);
}
}
3 changes: 2 additions & 1 deletion packages/core/src/Renderer.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { BoundingBox, Matrix, Vector3 } from "@oasis-engine/math";
import { BoolUpdateFlag } from "./BoolUpdateFlag";
import { Camera } from "./Camera";
import { deepClone, ignoreClone, shallowClone } from "./clone/CloneManager";
import { Component } from "./Component";
Expand Down Expand Up @@ -52,7 +53,7 @@ export abstract class Renderer extends Component {
protected _materials: Material[] = [];

@ignoreClone
private _transformChangeFlag: UpdateFlag;
private _transformChangeFlag: BoolUpdateFlag;
@deepClone
private _bounds: BoundingBox = new BoundingBox(new Vector3(), new Vector3());
@ignoreClone
Expand Down
7 changes: 4 additions & 3 deletions packages/core/src/Transform.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { MathUtil, Matrix, Matrix3x3, Quaternion, Vector3 } from "@oasis-engine/math";
import { BoolUpdateFlag } from "./BoolUpdateFlag";
import { deepClone, ignoreClone } from "./clone/CloneManager";
import { Component } from "./Component";
import { Entity } from "./Entity";
Expand Down Expand Up @@ -539,8 +540,8 @@ export class Transform extends Component {
* Register world transform change flag.
* @returns Change flag
*/
registerWorldChangeFlag(): UpdateFlag {
return this._updateFlagManager.register();
registerWorldChangeFlag(): BoolUpdateFlag {
return this._updateFlagManager.createFlag(BoolUpdateFlag);
}

/**
Expand Down Expand Up @@ -706,7 +707,7 @@ export class Transform extends Component {

private _worldAssociatedChange(type: number): void {
this._dirtyFlag |= type;
this._updateFlagManager.distribute();
this._updateFlagManager.dispatch();
}

private _rotateByQuat(rotateQuat: Quaternion, relativeToLocal: boolean) {
Expand Down
33 changes: 25 additions & 8 deletions packages/core/src/UpdateFlag.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,39 @@
import { removeFromArray } from "./base/Util";
import { UpdateFlagManager } from "./UpdateFlagManager";

/**
* Used to update tags.
*/
export class UpdateFlag {
/** Flag. */
flag = true;
export abstract class UpdateFlag {
/** @internal */
_flagManagers: UpdateFlagManager[] = [];

constructor(private _flags: UpdateFlag[] = []) {
this._flags.push(this);
/**
* Dispatch.
* @param param - Parameter
*/
abstract dispatch(param?: Object): void;

/**
* Clear.
*/
clearFromManagers(): void {
this._removeFromManagers();
this._flagManagers.length = 0;
}

/**
* Destroy.
*/
destroy(): void {
const flags = this._flags;
removeFromArray(flags, this);
this._flags = null;
this._removeFromManagers();
this._flagManagers = null;
}

private _removeFromManagers(): void {
const flagManagers = this._flagManagers;
for (let i = 0, n = flagManagers.length; i < n; i++) {
removeFromArray(flagManagers[i]._updateFlags, this);
}
}
}
29 changes: 24 additions & 5 deletions packages/core/src/UpdateFlagManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,35 @@ import { UpdateFlag } from "./UpdateFlag";
* @internal
*/
export class UpdateFlagManager {
private _updateFlags: UpdateFlag[] = [];
/** @internal */
_updateFlags: UpdateFlag[] = [];

register(): UpdateFlag {
return new UpdateFlag(this._updateFlags);
/**
* Create a UpdateFlag.
* @returns - The UpdateFlag.
*/
createFlag<T extends UpdateFlag>(type: new () => T): T {
const flag = new type();
this.addFlag(flag);
return flag;
}

distribute(): void {
/**
* Add a UpdateFlag.
* @param flag - The UpdateFlag.
*/
addFlag(flag: UpdateFlag): void {
this._updateFlags.push(flag);
flag._flagManagers.push(this);
}

/**
* Dispatch.
*/
dispatch(param?: Object): void {
const updateFlags = this._updateFlags;
for (let i = updateFlags.length - 1; i >= 0; i--) {
updateFlags[i].flag = true;
updateFlags[i].dispatch(param);
}
}
}
3 changes: 2 additions & 1 deletion packages/core/src/animation/Animator.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Quaternion, Vector3 } from "@oasis-engine/math";
import { BoolUpdateFlag } from "../BoolUpdateFlag";
import { assignmentClone, ignoreClone } from "../clone/CloneManager";
import { Component } from "../Component";
import { Entity } from "../Entity";
Expand Down Expand Up @@ -36,7 +37,7 @@ export class Animator extends Component {
@assignmentClone
protected _speed: number = 1.0;
@ignoreClone
protected _controllerUpdateFlag: UpdateFlag;
protected _controllerUpdateFlag: BoolUpdateFlag;

@ignoreClone
private _animatorLayersData: AnimatorLayerData[] = [];
Expand Down
Loading

0 comments on commit a2f0584

Please sign in to comment.