WIP
This commit is contained in:
parent
34ac200437
commit
39b0160064
136 changed files with 7144 additions and 1965 deletions
99
src/game-loop/simulation-frame.ts
Normal file
99
src/game-loop/simulation-frame.ts
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
import { AgentPipeline } from '../pipelines/agents/agent-pipeline';
|
||||
import { BrushPipeline } from '../pipelines/brush/brush-pipeline';
|
||||
import { CopyPipeline } from '../pipelines/copy/copy-pipeline';
|
||||
import { DiffusionPipeline } from '../pipelines/diffusion/diffusion-pipeline';
|
||||
import { EraserAgentPipeline } from '../pipelines/eraser/eraser-agent-pipeline';
|
||||
import { EraserTexturePipeline } from '../pipelines/eraser/eraser-texture-pipeline';
|
||||
import { RenderPipeline } from '../pipelines/render/render-pipeline';
|
||||
import { SimulationTextures } from './simulation-textures';
|
||||
|
||||
export interface SimulationFramePipelines {
|
||||
copyPipeline: CopyPipeline;
|
||||
agentPipeline: AgentPipeline;
|
||||
brushPipeline: BrushPipeline;
|
||||
eraserAgentPipeline: EraserAgentPipeline;
|
||||
eraserTexturePipeline: EraserTexturePipeline;
|
||||
diffusionPipeline: DiffusionPipeline;
|
||||
brushEffectDiffusionPipeline: DiffusionPipeline;
|
||||
renderPipeline: RenderPipeline;
|
||||
}
|
||||
|
||||
export class SimulationFrameRenderer {
|
||||
public constructor(
|
||||
private readonly device: GPUDevice,
|
||||
private readonly textures: SimulationTextures,
|
||||
private readonly pipelines: SimulationFramePipelines
|
||||
) {}
|
||||
|
||||
public execute(renderSpeed: number, isErasing: boolean): void {
|
||||
for (let i = 0; i < renderSpeed; i++) {
|
||||
const commandEncoder = this.device.createCommandEncoder();
|
||||
|
||||
this.pipelines.copyPipeline.execute(
|
||||
commandEncoder,
|
||||
this.textures.trailMapA.getTextureView(),
|
||||
this.textures.trailMapB.getTextureView()
|
||||
);
|
||||
if (isErasing) {
|
||||
this.pipelines.eraserTexturePipeline.execute(
|
||||
commandEncoder,
|
||||
this.textures.sourceMapA.getTextureView()
|
||||
);
|
||||
this.pipelines.eraserTexturePipeline.execute(
|
||||
commandEncoder,
|
||||
this.textures.influenceMapA.getTextureView()
|
||||
);
|
||||
this.pipelines.eraserTexturePipeline.execute(
|
||||
commandEncoder,
|
||||
this.textures.trailMapB.getTextureView()
|
||||
);
|
||||
this.pipelines.eraserAgentPipeline.execute(commandEncoder);
|
||||
} else {
|
||||
this.pipelines.brushPipeline.execute(
|
||||
commandEncoder,
|
||||
this.textures.sourceMapA.getTextureView()
|
||||
);
|
||||
this.pipelines.brushPipeline.execute(
|
||||
commandEncoder,
|
||||
this.textures.influenceMapA.getTextureView()
|
||||
);
|
||||
}
|
||||
this.pipelines.agentPipeline.execute(
|
||||
commandEncoder,
|
||||
this.textures.trailMapA.getTextureView(),
|
||||
this.textures.trailMapB.getTextureView(),
|
||||
this.textures.influenceMapA.getTextureView()
|
||||
);
|
||||
this.pipelines.diffusionPipeline.execute(
|
||||
commandEncoder,
|
||||
this.textures.trailMapB.getTextureView(),
|
||||
this.textures.trailMapA.getTextureView()
|
||||
);
|
||||
this.pipelines.renderPipeline.execute(
|
||||
commandEncoder,
|
||||
this.textures.trailMapA.getTextureView(),
|
||||
this.textures.sourceMapA.getTextureView()
|
||||
);
|
||||
this.pipelines.diffusionPipeline.execute(
|
||||
commandEncoder,
|
||||
this.textures.sourceMapA.getTextureView(),
|
||||
this.textures.sourceMapB.getTextureView()
|
||||
);
|
||||
this.pipelines.brushEffectDiffusionPipeline.execute(
|
||||
commandEncoder,
|
||||
this.textures.influenceMapA.getTextureView(),
|
||||
this.textures.influenceMapB.getTextureView()
|
||||
);
|
||||
|
||||
this.device.queue.submit([commandEncoder.finish()]);
|
||||
this.textures.swapSourceMaps();
|
||||
this.textures.swapInfluenceMaps();
|
||||
}
|
||||
}
|
||||
|
||||
public clearSwipes(): void {
|
||||
this.pipelines.brushPipeline.clearSwipes();
|
||||
this.pipelines.eraserAgentPipeline.clearSwipes();
|
||||
this.pipelines.eraserTexturePipeline.clearSwipes();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue