Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.2.5",
"version": "0.2.6",
"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.2.5",
"version": "0.2.6",
"license": "MIT",
"scripts": {
"b:types": "tsc",
Expand All @@ -15,6 +15,6 @@
"types/**/*"
],
"dependencies": {
"oasis-engine": "0.2.5"
"oasis-engine": "0.2.6"
}
}
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.2.5",
"version": "0.2.6",
"license": "MIT",
"main": "dist/main.js",
"module": "dist/module.js",
Expand All @@ -13,9 +13,9 @@
"types/**/*"
],
"dependencies": {
"@oasis-engine/math": "0.2.5"
"@oasis-engine/math": "0.2.6"
},
"devDependencies": {
"@oasis-engine/design": "0.2.5"
"@oasis-engine/design": "0.2.6"
}
}
3 changes: 2 additions & 1 deletion packages/core/src/Camera.ts
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,8 @@ export class Camera extends Component {
*/
render(cubeFace?: TextureCubeFace): void {
// compute cull frustm.
const context = RenderContext._getRenderContext(this);
const context = this.engine._renderContext;
context._setContext(this);
if (this.enableFrustumCulling && (this._frustumViewChangeFlag.flag || this._isFrustumProjectDirty)) {
this._frustum.calculateFromMatrix(context._viewProjectMatrix);
this._frustumViewChangeFlag.flag = false;
Expand Down
6 changes: 5 additions & 1 deletion packages/core/src/Engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import { EngineFeature } from "./EngineFeature";
import { Entity } from "./Entity";
import { FeatureManager } from "./FeatureManager";
import { HardwareRenderer } from "./HardwareRenderer";
import { ClassPool } from "./RenderPipeline/ClassPool";
import { RenderContext } from "./RenderPipeline/RenderContext";
import { RenderElement } from "./RenderPipeline/RenderElement";
import { Scene } from "./Scene";
import { SceneManager } from "./SceneManager";
Expand All @@ -25,6 +27,8 @@ export class Engine extends EventDispatcher {
_componentsManager: ComponentsManager = new ComponentsManager();
_hardwareRenderer: HardwareRenderer;
_lastRenderState: RenderState = new RenderState();
_renderElementPool: ClassPool<RenderElement> = new ClassPool(RenderElement);
_renderContext: RenderContext = new RenderContext();

/* @internal */
_renderCount: number = 0;
Expand Down Expand Up @@ -183,7 +187,7 @@ export class Engine extends EventDispatcher {
const deltaTime = time.deltaTime;

time.tick();
RenderElement._restPool();
this._renderElementPool.restPool();

engineFeatureManager.callFeatureMethod(this, "preTick", [this, this._sceneManager._activeScene]);

Expand Down
34 changes: 34 additions & 0 deletions packages/core/src/RenderPipeline/ClassPool.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/**
* Class pool utils.
*/
export class ClassPool<T> {
private _elementPoolIndex: number = 0;
private _elementPool: T[] = [];
private _type: new () => T;

constructor(type: new () => T) {
this._type = type;
}

/**
* Get element from pool.
*/
getFromPool(): T {
const { _elementPoolIndex: index, _elementPool: pool } = this;
this._elementPoolIndex++;
if (pool.length === index) {
const element = new this._type();
pool.push(element);
return element;
} else {
return pool[index];
}
}

/**
* Reset pool.
*/
restPool(): void {
this._elementPoolIndex = 0;
}
}
18 changes: 7 additions & 11 deletions packages/core/src/RenderPipeline/RenderContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,16 @@ import { Camera } from "../Camera";
* Rendering context.
*/
export class RenderContext {
private static _renderContext: RenderContext = new RenderContext();
/** @internal */
_camera: Camera;
/** @internal */
_viewProjectMatrix: Matrix = new Matrix();

/**
* @internal
*/
static _getRenderContext(camera: Camera): RenderContext {
const context = RenderContext._renderContext;
context._camera = camera;
Matrix.multiply(camera.projectionMatrix, camera.viewMatrix, context._viewProjectMatrix);
return context;
_setContext(camera: Camera): void {
this._camera = camera;
Matrix.multiply(camera.projectionMatrix, camera.viewMatrix, this._viewProjectMatrix);
}

/** @internal */
_camera: Camera;
/** @internal */
_viewProjectMatrix: Matrix = new Matrix();
}
28 changes: 1 addition & 27 deletions packages/core/src/RenderPipeline/RenderElement.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Primitive } from "../graphic";
import { Primitive } from "../graphic/Primitive";
import { SubPrimitive } from "../graphic/SubPrimitive";
import { Material } from "../material/Material";
import { Renderer } from "../Renderer";
Expand All @@ -7,32 +7,6 @@ import { Renderer } from "../Renderer";
* Render element.
*/
export class RenderElement {
private static _elementPoolIndex: number = 0;
private static _elementPool: RenderElement[] = [];

/**
* Get render element from pool.
* @remark The return value is only valid for the current frame, and the next frame will be automatically recycled for reuse.
*/
static getFromPool(): RenderElement {
const { _elementPoolIndex: index, _elementPool: pool } = RenderElement;
RenderElement._elementPoolIndex++;
if (pool.length === index) {
const element = new RenderElement();
pool.push(element);
return element;
} else {
return pool[index];
}
}

/**
* @internal
*/
static _restPool() {
RenderElement._elementPoolIndex = 0;
}

/** Render component. */
component: Renderer;
/** Primitive. */
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/geometry/GeometryRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,10 @@ export class GeometryRenderer extends Renderer {
const subGeometries = geometry.subGeometries;
const renderPipeline = camera._renderPipeline;
const material = this._material;
const renderElementPool = this._engine._renderElementPool;
for (let i = 0, n = subGeometries.length; i < n; i++) {
if (material) {
const element = RenderElement.getFromPool();
const element = renderElementPool.getFromPool();
element.setValue(this, geometry._primitive, subGeometries[i], material); // CM: need to support multi material
renderPipeline.pushPrimitive(element);
}
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/mesh/MeshRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,13 +108,14 @@ export class MeshRenderer extends Renderer {

const renderPipeline = camera._renderPipeline;
const { primitives, groups } = mesh;
const renderElementPool = this._engine._renderElementPool;

//-- render every primitive
for (let i = 0, len = primitives.length; i < len; i++) {
const primitive = primitives[i];
const material = this._instanceMaterials[i] || this._sharedMaterials[i];
if (material) {
const element = RenderElement.getFromPool();
const element = renderElementPool.getFromPool();
element.setValue(this, primitive, groups[i], material);
renderPipeline.pushPrimitive(element);
} else {
Expand Down
2 changes: 1 addition & 1 deletion packages/design/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/design",
"version": "0.2.5",
"version": "0.2.6",
"license": "MIT",
"main": "dist/main.js",
"module": "dist/module.js",
Expand Down
4 changes: 2 additions & 2 deletions packages/draco/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/draco",
"version": "0.2.5",
"version": "0.2.6",
"license": "MIT",
"scripts": {
"b:types": "tsc"
Expand All @@ -13,6 +13,6 @@
"types/**/*"
],
"dependencies": {
"@oasis-engine/core": "0.2.5"
"@oasis-engine/core": "0.2.6"
}
}
4 changes: 2 additions & 2 deletions packages/framebuffer-picker/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/framebuffer-picker",
"version": "0.2.5",
"version": "0.2.6",
"license": "MIT",
"main": "dist/main.js",
"module": "dist/module.js",
Expand All @@ -14,6 +14,6 @@
"types/**/*"
],
"dependencies": {
"oasis-engine": "0.2.5"
"oasis-engine": "0.2.6"
}
}
10 changes: 5 additions & 5 deletions packages/loader/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/loader",
"version": "0.2.5",
"version": "0.2.6",
"license": "MIT",
"types": "types/index.d.ts",
"scripts": {
Expand All @@ -13,9 +13,9 @@
"types/**/*"
],
"dependencies": {
"@oasis-engine/core": "0.2.5",
"@oasis-engine/draco": "0.2.5",
"@oasis-engine/math": "0.2.5",
"@oasis-engine/rhi-webgl": "0.2.5"
"@oasis-engine/core": "0.2.6",
"@oasis-engine/draco": "0.2.6",
"@oasis-engine/math": "0.2.6",
"@oasis-engine/rhi-webgl": "0.2.6"
}
}
4 changes: 2 additions & 2 deletions packages/math/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/math",
"version": "0.2.5",
"version": "0.2.6",
"license": "MIT",
"main": "dist/main.js",
"module": "dist/module.js",
Expand All @@ -13,6 +13,6 @@
"types/**/*"
],
"devDependencies": {
"@oasis-engine/design": "0.2.5"
"@oasis-engine/design": "0.2.6"
}
}
10 changes: 5 additions & 5 deletions packages/oasis-engine/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "oasis-engine",
"version": "0.2.5",
"version": "0.2.6",
"license": "MIT",
"scripts": {
"b:types": "tsc"
Expand All @@ -14,9 +14,9 @@
"types/**/*"
],
"dependencies": {
"@oasis-engine/core": "0.2.5",
"@oasis-engine/loader": "0.2.5",
"@oasis-engine/math": "0.2.5",
"@oasis-engine/rhi-webgl": "0.2.5"
"@oasis-engine/core": "0.2.6",
"@oasis-engine/loader": "0.2.6",
"@oasis-engine/math": "0.2.6",
"@oasis-engine/rhi-webgl": "0.2.6"
}
}
8 changes: 4 additions & 4 deletions packages/rhi-webgl/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/rhi-webgl",
"version": "0.2.5",
"version": "0.2.6",
"license": "MIT",
"main": "dist/main.js",
"module": "dist/module.js",
Expand All @@ -13,10 +13,10 @@
"types/**/*"
],
"dependencies": {
"@oasis-engine/core": "0.2.5",
"@oasis-engine/math": "0.2.5"
"@oasis-engine/core": "0.2.6",
"@oasis-engine/math": "0.2.6"
},
"devDependencies": {
"@oasis-engine/design": "0.2.5"
"@oasis-engine/design": "0.2.6"
}
}
4 changes: 2 additions & 2 deletions packages/stats/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/stats",
"version": "0.2.5",
"version": "0.2.6",
"license": "MIT",
"scripts": {
"b:types": "tsc"
Expand All @@ -14,6 +14,6 @@
"types/**/*"
],
"dependencies": {
"oasis-engine": "0.2.5"
"oasis-engine": "0.2.6"
}
}
4 changes: 2 additions & 2 deletions packages/tween/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/tween",
"version": "0.2.5",
"version": "0.2.6",
"license": "MIT",
"main": "dist/main.js",
"module": "dist/module.js",
Expand All @@ -14,6 +14,6 @@
},
"types": "types/index.d.ts",
"dependencies": {
"oasis-engine": "0.2.5"
"oasis-engine": "0.2.6"
}
}