/
ViewNode.re
59 lines (49 loc) · 1.47 KB
/
ViewNode.re
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
open Revery_Core;
module Shaders = Revery_Shaders;
module Geometry = Revery_Geometry;
module Layout = Layout;
module LayoutTypes = Layout.LayoutTypes;
/* open Reglm; */
open Node;
open RenderPass;
class viewNode (()) = {
as _this;
val solidShader = Assets.solidShader();
inherit (class node(renderPass))() as _super;
pub! draw = (pass: renderPass, parentContext: NodeDrawContext.t) => {
switch (pass) {
| AlphaPass(m) =>
let dimensions = _this#measurements();
let width = float_of_int(dimensions.width);
let height = float_of_int(dimensions.height);
let quad =
Assets.quad(~minX=0., ~minY=0., ~maxX=width, ~maxY=height, ());
let style = _super#getStyle();
let opacity = style.opacity *. parentContext.opacity;
let c = Color.multiplyAlpha(opacity, style.backgroundColor);
/* Only render if _not_ transparent */
if (c.a > 0.001) {
let world = _this#getWorldTransform();
Shaders.CompiledShader.use(solidShader);
Shaders.CompiledShader.setUniformMatrix4fv(
solidShader,
"uProjection",
m,
);
Shaders.CompiledShader.setUniformMatrix4fv(
solidShader,
"uWorld",
world,
);
Shaders.CompiledShader.setUniform4fv(
solidShader,
"uColor",
Color.toVec4(c),
);
Geometry.draw(quad, solidShader);
};
| _ => ()
};
_super#draw(pass, parentContext);
};
};