diff --git a/source/GLRender/Axis.ts b/source/GLRender/Axis.ts index 4ad5672..fe291cc 100644 --- a/source/GLRender/Axis.ts +++ b/source/GLRender/Axis.ts @@ -1,7 +1,7 @@ import { BasicsShader } from "./BasicShader"; -import { GLContextObject } from "./GLContext"; +import { DisplayObject } from "./DisplayObject"; -class Axis extends GLContextObject{ +class Axis extends DisplayObject{ /** * 坐标轴数据 diff --git a/source/GLRender/BasicCube.ts b/source/GLRender/BasicCube.ts index 070d83b..d47318b 100644 --- a/source/GLRender/BasicCube.ts +++ b/source/GLRender/BasicCube.ts @@ -1,7 +1,7 @@ -import { GLContextObject } from "./GLContext"; +import { DisplayObject } from "./DisplayObject"; import { BasicsShader } from "./BasicShader"; -class BaseCube extends GLContextObject{ +class BaseCube extends DisplayObject{ /** * 立方体数据 diff --git a/source/GLRender/BasicGroup.ts b/source/GLRender/BasicGroup.ts index 01731a0..e974196 100644 --- a/source/GLRender/BasicGroup.ts +++ b/source/GLRender/BasicGroup.ts @@ -1,8 +1,8 @@ -import { GLContextObject } from "./GLContext"; +import { DisplayObject } from "./DisplayObject"; import { GroupShader } from "./GroupShader"; import { ObjectData } from "@Model/Renderer"; -class BasicGroup extends GLContextObject{ +class BasicGroup extends DisplayObject{ private pointVertexBuffer: WebGLBuffer | null = null; private pointVecMaxCount: number = 100 * 3; diff --git a/source/GLRender/ClassicRenderer.ts b/source/GLRender/ClassicRenderer.ts index 22f4895..4c51d80 100644 --- a/source/GLRender/ClassicRenderer.ts +++ b/source/GLRender/ClassicRenderer.ts @@ -12,9 +12,7 @@ class ClassicRenderer extends BasicRenderer<{}, IClassicRendererParams> { private basicShader: BasicsShader = undefined as any; private axisObject: Axis = undefined as any; - private cubeObject: BaseCube = undefined as any; private groupShader: GroupShader = undefined as any; - private basicGroup: BasicGroup = undefined as any; /** * 是否完成缩放 @@ -23,19 +21,36 @@ class ClassicRenderer extends BasicRenderer<{}, IClassicRendererParams> { private readonly cubeRadius = 2**.5; private readonly farFogLine = 2.5; + /** + * 点存储池数组 + */ + private groupPool = new Map(); + + /** + * 立方体储池数组 + */ + private cubePool = new Map(); + public onLoad(): void { // 自动调节分辨率 this.autoResize(); this.basicShader = new BasicsShader().bindRenderer(this); - this.axisObject = new Axis().bindRenderer(this); - this.cubeObject = new BaseCube().bindRenderer(this); this.groupShader = new GroupShader().bindRenderer(this); - this.basicGroup = new BasicGroup().bindRenderer(this); + this.axisObject = new Axis().bindRenderer(this); + + // 测试渲染器 + if (true) { + let cubeObject = new BaseCube().bindRenderer(this); + let basicGroup = new BasicGroup().bindRenderer(this); - // 生成随机数据测试 - this.basicGroup.upLoadData(new Array(1000 * 3).fill(0).map(() => (Math.random() - .5) * 2)); + // 生成随机数据测试 + basicGroup.upLoadData(new Array(1000 * 3).fill(0).map(() => (Math.random() - .5) * 2)); + + this.cubePool.set("1", cubeObject); + this.groupPool.set("1", basicGroup); + } this.canvas.on("mousemove", () => { @@ -84,8 +99,17 @@ class ClassicRenderer extends BasicRenderer<{}, IClassicRendererParams> { this.cleanCanvas(); - this.cubeObject.draw(this.basicShader); - this.basicGroup.draw(this.groupShader); + // 绘制全部立方体 + this.cubePool.forEach((cube) => { + if (cube.isDraw) cube.draw(this.basicShader); + else cube.drawEmptyFrame ++; + }); + + // 绘制全部点 + this.groupPool.forEach((group) => { + if (group.isDraw) group.draw(this.groupShader); + else group.drawEmptyFrame ++; + }); // 右上角绘制坐标轴 const position = 120; diff --git a/source/GLRender/DisplayObject.ts b/source/GLRender/DisplayObject.ts new file mode 100644 index 0000000..e2d8cac --- /dev/null +++ b/source/GLRender/DisplayObject.ts @@ -0,0 +1,20 @@ +import { EventType } from "@Model/Emitter"; +import { GLContextObject } from "./GLContext"; + +abstract class DisplayObject< + E extends Record = {} +> extends GLContextObject { + + /** + * 是否开启绘制 + */ + public isDraw: boolean = true; + + /** + * 绘制帧数 + */ + public drawEmptyFrame: number = 0; +} + +export { DisplayObject } +export default DisplayObject; \ No newline at end of file