aboutsummaryrefslogtreecommitdiff
path: root/alacritty/res/graphics.v.glsl
blob: 56998e9dea3cfb5c300096c47994503f0d8dd53f (plain) (blame)
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
77
78
79
#version 330 core

// ------
// INPUTS

// Texture associated to the graphic.
layout(location = 0) in int textureId;

// Sides where the vertex is located.
//
// Bit 0 (LSB) is 0 for top and 1 for bottom.
// Bit 1 is 0 for left and 1 for right.
layout(location = 1) in int sides;

// Column number in the grid where the left vertex is set.
layout(location = 2) in float column;

// Line number in the grid where the left vertex is set.
layout(location = 3) in float line;

// Height in pixels of the texture.
layout(location = 4) in float height;

// Width in pixels of the texture.
layout(location = 5) in float width;

// Offset in the X direction.
layout(location = 6) in float offsetX;

// Offset in the Y direction.
layout(location = 7) in float offsetY;

// Height in pixels of a single cell when the graphic was added.
layout(location = 8) in float baseCellHeight;

// -------
// OUTPUTS

// Texture sent to the fragment shader.
flat out int texId;

// Coordinates sent to the fragment shader.
out vec2 texCoords;

// --------
// UNIFORMS

// Width and height of a single cell.
uniform vec2 cellDimensions;

// Width and height of the view.
uniform vec2 viewDimensions;


#define IS_RIGHT_SIDE ((sides & 1) == 1)
#define IS_BOTTOM_SIDE ((sides & 2) == 2)

void main() {
    float scale = cellDimensions.y / baseCellHeight;
    float x = (column * cellDimensions.x - offsetX * scale) / (viewDimensions.x / 2) - 1;
    float y = -(line * cellDimensions.y - offsetY * scale) / (viewDimensions.y / 2) + 1;

    vec4 position = vec4(x, y, 0, 1);
    vec2 coords = vec2(0, 0);

    if(IS_RIGHT_SIDE) {
        position.x += scale * width / (viewDimensions.x / 2);
        coords.x = 1;
    }

    if(IS_BOTTOM_SIDE) {
        position.y += -scale * height / (viewDimensions.y / 2);
        coords.y = 1;
    }

    gl_Position = position;
    texCoords = coords;
    texId = textureId;
}