/
GUIRenderer.ts
76 lines (66 loc) · 2.59 KB
/
GUIRenderer.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import { GeometryBase } from "../../..";
import { View3D } from "../../../core/View3D";
import { ClusterLightingBuffer } from "../../../gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer";
import { RendererMask } from "../../../gfx/renderJob/passRenderer/state/RendererMask";
import { RendererPassState } from "../../../gfx/renderJob/passRenderer/state/RendererPassState";
import { PassType } from "../../../gfx/renderJob/passRenderer/state/RendererType";
import { MeshRenderer } from "../../renderer/MeshRenderer";
import { GUIGeometry } from "./GUIGeometry";
/**
* GUI Renderer
* Used to update Geometry and Buffer.
* @group GPU GUI
*/
export class GUIRenderer extends MeshRenderer {
protected _guiGeometry: GUIGeometry;
/**
* init renderer
* @returns
*/
init(param?: any) {
super.init();
this.addRendererMask(RendererMask.UI);
this.removeRendererMask(RendererMask.Default);
this.castGI = false;
this.castShadow = false;
this.alwaysRender = true;
this._ignoreEnvMap = this._ignorePrefilterMap = true;
}
public get geometry(): GeometryBase {
return super.geometry;
}
public set geometry(value: GeometryBase) {
super.geometry = value;
this._guiGeometry = value as GUIGeometry;
}
/**
* @internal
* @param view
* @param rendererType
* @param renderPassState
* @param clusterLightingBuffer
*/
public nodeUpdate(view: View3D, rendererType: PassType, renderPassState: RendererPassState, clusterLightingBuffer: ClusterLightingBuffer) {
for (let i = 0; i < this.materials.length; i++) {
const material = this.materials[i];
let passes = material.getPass(rendererType);
let vPosition = this._guiGeometry.getPositionBuffer();
let vSprite = this._guiGeometry.getSpriteBuffer();
let vColor = this._guiGeometry.getColorBuffer();
if (passes) {
for (let j = 0; j < passes.length; j++) {
const renderShader = passes[j];
if (!renderShader.pipeline) {
renderShader.setStorageBuffer('vPositionBuffer', vPosition);
renderShader.setStorageBuffer('vSpriteBuffer', vSprite);
renderShader.setStorageBuffer('vColorBuffer', vColor);
}
}
}
}
super.nodeUpdate(view, rendererType, renderPassState, clusterLightingBuffer);
}
public onUpdate(view?: View3D) {
// this.transform.updateWorldMatrix();
}
}