/
ui.dei
57 lines (49 loc) · 2 KB
/
ui.dei
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
ui {
# Shader for UI widgets.
shader guiwidget.batch {
vertex = "
uniform highp mat4 uMvpMatrix;
uniform highp vec4 uColor[DENG_MAX_BATCH_UNIFORMS];
uniform highp float uSaturation[DENG_MAX_BATCH_UNIFORMS];
uniform highp vec4 uScissorRect[DENG_MAX_BATCH_UNIFORMS];
DENG_ATTRIB highp vec4 aVertex;
DENG_ATTRIB highp vec2 aUV;
DENG_ATTRIB highp vec4 aColor;
DENG_ATTRIB highp float aIndex; // uColor
DENG_VAR highp vec2 vUV;
DENG_VAR highp vec4 vColor;
DENG_VAR highp vec4 vScissor;
DENG_VAR highp float vSaturation;
void main(void) {
gl_Position = uMvpMatrix * aVertex;
vUV = aUV;
int index = int(aIndex);
vColor = aColor * uColor[index];
vScissor = uScissorRect[index];
vSaturation = uSaturation[index];
}"
include.fragment <hsv.glsl>
fragment = "
uniform sampler2D uTex;
DENG_VAR highp vec2 vUV;
DENG_VAR highp vec4 vColor;
DENG_VAR highp vec4 vScissor;
DENG_VAR highp float vSaturation;
void main(void) {
// Check the scissor first.
if (gl_FragCoord.x < vScissor.x || gl_FragCoord.x > vScissor.z ||
gl_FragCoord.y < vScissor.y || gl_FragCoord.y > vScissor.w) {
discard;
}
out_FragColor = texture(uTex, vUV);
// Optionally adjust color saturation.
if (vSaturation < 1.0) {
highp vec4 hsv = rgbToHsv(out_FragColor);
hsv.y *= vSaturation;
out_FragColor = hsvToRgb(hsv);
}
// Final vertex color.
out_FragColor *= vColor;
}"
}
}