Skip to content

Commit

Permalink
Optimization texture structure (#715)
Browse files Browse the repository at this point in the history
* feat: opt texture struct
  • Loading branch information
GuoLei1990 committed Mar 31, 2022
1 parent 948fe27 commit 21d0031
Show file tree
Hide file tree
Showing 38 changed files with 237 additions and 794 deletions.
4 changes: 3 additions & 1 deletion packages/core/src/2d/sprite/SpriteRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ import { Sprite } from "./Sprite";
* Renders a Sprite for 2D graphics.
*/
export class SpriteRenderer extends Renderer implements ICustomClone {
private static _textureProperty: ShaderProperty = Shader.getPropertyByName("u_spriteTexture");
/** @internal */
static _textureProperty: ShaderProperty = Shader.getPropertyByName("u_spriteTexture");

private static _tempVec3: Vector3 = new Vector3();

/** @internal temp solution. */
Expand Down
10 changes: 4 additions & 6 deletions packages/core/src/2d/text/TextRenderer.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { BoundingBox, Color, Vector3 } from "@oasis-engine/math";
import { Sprite, SpriteMaskInteraction, SpriteMaskLayer } from "..";
import { CompareFunction, Renderer, Shader, UpdateFlag } from "../..";
import { Sprite, SpriteMaskInteraction, SpriteMaskLayer, SpriteRenderer } from "..";
import { CompareFunction, Renderer, UpdateFlag } from "../..";
import { Camera } from "../../Camera";
import { assignmentClone, deepClone, ignoreClone } from "../../clone/CloneManager";
import { Entity } from "../../Entity";
import { ShaderProperty } from "../../shader/ShaderProperty";
import { Texture2D } from "../../texture";
import { FontStyle } from "../enums/FontStyle";
import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment";
Expand All @@ -16,7 +15,6 @@ import { TextUtils } from "./TextUtils";
* Renders a text for 2D graphics.
*/
export class TextRenderer extends Renderer {
private static _textureProperty: ShaderProperty = Shader.getPropertyByName("u_spriteTexture");
private static _tempVec3: Vector3 = new Vector3();

/** @internal temp solution. */
Expand Down Expand Up @@ -295,7 +293,7 @@ export class TextRenderer extends Renderer {
this._setDirtyFlagFalse(DirtyFlag.MaskInteraction);
}

this.shaderData.setTexture(TextRenderer._textureProperty, sprite.texture);
this.shaderData.setTexture(SpriteRenderer._textureProperty, sprite.texture);
const spriteElementPool = this._engine._spriteElementPool;
const spriteElement = spriteElementPool.getFromPool();
spriteElement.setValue(
Expand Down Expand Up @@ -432,7 +430,7 @@ export class TextRenderer extends Renderer {
const { _sprite } = this;
// Remove sprite from dynamic atlas.
this.engine._dynamicTextAtlasManager.removeSprite(_sprite);
this.shaderData.setTexture(TextRenderer._textureProperty, null);
this.shaderData.setTexture(SpriteRenderer._textureProperty, null);
_sprite.atlasRegion = _sprite.region;
}
}
Expand Down
6 changes: 3 additions & 3 deletions packages/core/src/Engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import { ShaderMacroCollection } from "./shader/ShaderMacroCollection";
import { ShaderPool } from "./shader/ShaderPool";
import { ShaderProgramPool } from "./shader/ShaderProgramPool";
import { RenderState } from "./shader/state/RenderState";
import { Texture2D, TextureCubeFace, TextureCubeMap, TextureFormat } from "./texture";
import { Texture2D, TextureCubeFace, TextureCube, TextureFormat } from "./texture";

/** TODO: delete */
const engineFeatureManager = new FeatureManager<EngineFeature>();
Expand Down Expand Up @@ -63,7 +63,7 @@ export class Engine extends EventDispatcher {
/* @internal */
_whiteTexture2D: Texture2D;
/* @internal */
_whiteTextureCube: TextureCubeMap;
_whiteTextureCube: TextureCube;
/* @internal */
_backgroundTextureMaterial: Material;
/* @internal */
Expand Down Expand Up @@ -205,7 +205,7 @@ export class Engine extends EventDispatcher {
whiteTexture2D.setPixelBuffer(whitePixel);
whiteTexture2D.isGCIgnored = true;

const whiteTextureCube = new TextureCubeMap(this, 1, TextureFormat.R8G8B8A8, false);
const whiteTextureCube = new TextureCube(this, 1, TextureFormat.R8G8B8A8, false);
whiteTextureCube.setPixelBuffer(TextureCubeFace.PositiveX, whitePixel);
whiteTextureCube.setPixelBuffer(TextureCubeFace.NegativeX, whitePixel);
whiteTextureCube.setPixelBuffer(TextureCubeFace.PositiveY, whitePixel);
Expand Down
15 changes: 7 additions & 8 deletions packages/core/src/env-probe/Probe.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { Camera } from "../Camera";
import { Layer } from "../Layer";
import { Script } from "../Script";
import { RenderBufferDepthFormat } from "../texture/enums/RenderBufferDepthFormat";
import { RenderColorTexture } from "../texture/RenderColorTexture";
import { Texture, Texture2D, TextureCube, TextureFormat } from "../texture";
import { RenderTarget } from "../texture/RenderTarget";

/**
Expand Down Expand Up @@ -49,15 +48,15 @@ export abstract class Probe extends Script {
private _camera: Camera;
private _oriCameraCullingMask: Layer;

private get _texture(): RenderColorTexture {
private get _texture(): Texture {
return this._activeRenderTarget?.getColorTexture();
}

/**
* Provide hooks for users to exchange Texture.
* @remarks Prevent issue: Feedback Loops Between Textures and the Framebuffer.
*/
onTextureChange(renderColorTexture: RenderColorTexture) {}
onTextureChange(renderColorTexture: Texture) {}

/**
* @override
Expand All @@ -77,17 +76,17 @@ export abstract class Probe extends Script {
this.engine,
this.width,
this.height,
new RenderColorTexture(this.engine, this.width, this.height, undefined, undefined, this._isCube),
RenderBufferDepthFormat.Depth,
this._isCube ? new TextureCube(this.engine, this.width) : new Texture2D(this.engine, this.width, this.height),
TextureFormat.Depth,
this.antiAliasing
);

this._renderTargetSwap = new RenderTarget(
this.engine,
this.width,
this.height,
new RenderColorTexture(this.engine, this.width, this.height, undefined, undefined, this._isCube),
RenderBufferDepthFormat.Depth,
this._isCube ? new TextureCube(this.engine, this.width) : new Texture2D(this.engine, this.width, this.height),
TextureFormat.Depth,
this.antiAliasing
);

Expand Down
8 changes: 4 additions & 4 deletions packages/core/src/lighting/AmbientLight.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Scene } from "../Scene";
import { Shader } from "../shader";
import { ShaderMacro } from "../shader/ShaderMacro";
import { ShaderProperty } from "../shader/ShaderProperty";
import { TextureCubeMap } from "../texture";
import { TextureCube } from "../texture";
import { DiffuseMode } from "./enums/DiffuseMode";

/**
Expand All @@ -26,7 +26,7 @@ export class AmbientLight {
private _diffuseSphericalHarmonics: SphericalHarmonics3;
private _diffuseSolidColor: Color = new Color(0.212, 0.227, 0.259);
private _diffuseIntensity: number = 1.0;
private _specularReflection: TextureCubeMap;
private _specularReflection: TextureCube;
private _specularIntensity: number = 1.0;
private _diffuseMode: DiffuseMode = DiffuseMode.SolidColor;
private _shArray: Float32Array = new Float32Array(27);
Expand Down Expand Up @@ -118,11 +118,11 @@ export class AmbientLight {
* Specular reflection texture.
* @remarks This texture must be baked from @oasis-engine/baker
*/
get specularTexture(): TextureCubeMap {
get specularTexture(): TextureCube {
return this._specularReflection;
}

set specularTexture(value: TextureCubeMap) {
set specularTexture(value: TextureCube) {
this._specularReflection = value;
if (!this._scene) return;

Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { IPlatformTexture } from "./IPlatformTexture";
/**
* Cube texture interface specification.
*/
export interface IPlatformTextureCubeMap extends IPlatformTexture {
export interface IPlatformTextureCube extends IPlatformTexture {
/**
* Setting pixels data through cube face,color buffer data, designated area and texture mipmapping level,it's also applicable to compressed formats.
* @remarks When compressed texture is in WebGL1, the texture must be filled first before writing the sub-region
Expand Down
4 changes: 1 addition & 3 deletions packages/core/src/renderingHardwareInterface/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
export type { IHardwareRenderer } from "./IHardwareRenderer";
export type { IPlatformRenderColorTexture } from "./IPlatformRenderColorTexture";
export type { IPlatformRenderDepthTexture } from "./IPlatformRenderDepthTexture";
export type { IPlatformRenderTarget } from "./IPlatformRenderTarget";
export type { IPlatformTexture } from "./IPlatformTexture";
export type { IPlatformTexture2D } from "./IPlatformTexture2D";
export type { IPlatformTextureCubeMap } from "./IPlatformTextureCubeMap";
export type { IPlatformTextureCube } from "./IPlatformTextureCube";
8 changes: 4 additions & 4 deletions packages/core/src/shadow/LightShadow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { PointLight } from "../lighting/PointLight";
import { SpotLight } from "../lighting/SpotLight";
import { Shader } from "../shader/Shader";
import { ShaderData } from "../shader/ShaderData";
import { RenderColorTexture } from "../texture/RenderColorTexture";
import { Texture2D } from "../texture";
import { RenderTarget } from "../texture/RenderTarget";

/**
Expand Down Expand Up @@ -87,7 +87,7 @@ export class LightShadow {
const { engine, width, height } = props;

this._mapSize = new Vector2(width, height);
this._renderTarget = new RenderTarget(engine, width, height, new RenderColorTexture(engine, width, height));
this._renderTarget = new RenderTarget(engine, width, height, new Texture2D(engine, width, height));
}

/**
Expand All @@ -100,8 +100,8 @@ export class LightShadow {
/**
* Shadow map's color render texture.
*/
get map(): RenderColorTexture {
return this._renderTarget.getColorTexture();
get map(): Texture2D {
return <Texture2D>this._renderTarget.getColorTexture();
}

/**
Expand Down
8 changes: 4 additions & 4 deletions packages/core/src/sky/SkyBoxMaterial.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Material } from "../material/Material";
import { CompareFunction } from "../shader/enums/CompareFunction";
import { CullMode } from "../shader/enums/CullMode";
import { Shader } from "../shader/Shader";
import { TextureCubeMap } from "../texture";
import { TextureCube } from "../texture";

/**
* SkyboxMaterial
Expand Down Expand Up @@ -37,11 +37,11 @@ export class SkyBoxMaterial extends Material {
/**
* Texture cube map of the sky box material.
*/
get textureCubeMap(): TextureCubeMap {
return this.shaderData.getTexture("u_cube") as TextureCubeMap;
get textureCubeMap(): TextureCube {
return this.shaderData.getTexture("u_cube") as TextureCube;
}

set textureCubeMap(v: TextureCubeMap) {
set textureCubeMap(v: TextureCube) {
this.shaderData.setTexture("u_cube", v);
}

Expand Down
95 changes: 0 additions & 95 deletions packages/core/src/texture/RenderColorTexture.ts

This file was deleted.

Loading

0 comments on commit 21d0031

Please sign in to comment.