diff options
author | Joe Wilm <joe@jwilm.com> | 2016-06-06 16:54:15 -0700 |
---|---|---|
committer | Joe Wilm <joe@jwilm.com> | 2016-06-06 16:54:15 -0700 |
commit | cdea958e71fd59c8d2051feb4631badd6891e751 (patch) | |
tree | dc18120cb739e16a0c1a62eaaf42ff61091b3a7a /res | |
parent | 6636cf6b9fa03a711f8c3aa2d6ca43248fecfc0f (diff) | |
download | alacritty-cdea958e71fd59c8d2051feb4631badd6891e751.tar.gz alacritty-cdea958e71fd59c8d2051feb4631badd6891e751.zip |
Add support for drawing background colors
Diffstat (limited to 'res')
-rw-r--r-- | res/text.f.glsl | 12 | ||||
-rw-r--r-- | res/text.v.glsl | 31 |
2 files changed, 33 insertions, 10 deletions
diff --git a/res/text.f.glsl b/res/text.f.glsl index d2defb39..5ba7255d 100644 --- a/res/text.f.glsl +++ b/res/text.f.glsl @@ -1,6 +1,8 @@ #version 330 core in vec2 TexCoords; in vec3 fg; +in vec3 bg; +flat in int background; layout(location = 0, index = 0) out vec4 color; layout(location = 0, index = 1) out vec4 alphaMask; @@ -9,6 +11,12 @@ uniform sampler2D mask; void main() { - alphaMask = vec4(texture(mask, TexCoords).rgb, 1.0); - color = vec4(fg, 1.0); + if (background != 0) { + alphaMask = vec4(1.0, 1.0, 1.0, 1.0); + color = vec4(bg, 1.0); + } else { + alphaMask = vec4(texture(mask, TexCoords).rgb, 1.0); + color = vec4(fg, 1.0); + } + } diff --git a/res/text.v.glsl b/res/text.v.glsl index 276b1dc3..0432babd 100644 --- a/res/text.v.glsl +++ b/res/text.v.glsl @@ -12,23 +12,28 @@ layout (location = 3) in vec4 uv; // text fg color layout (location = 4) in vec3 textColor; +// Background color +layout (location = 5) in vec3 backgroundColor; out vec2 TexCoords; out vec3 fg; +out vec3 bg; // Terminal properties uniform vec2 termDim; uniform vec2 cellDim; uniform vec2 cellSep; +uniform int backgroundPass; + // Orthographic projection uniform mat4 projection; +flat out int background; void main() { vec2 glyphOffset = glyph.xy; vec2 glyphSize = glyph.zw; - vec2 uvOffset = uv.xy; vec2 uvSize = uv.zw; @@ -38,14 +43,24 @@ void main() // Invert Y since framebuffer origin is bottom-left cellPosition.y = termDim.y - cellPosition.y - cellDim.y; - // Glyphs are offset within their cell; account for y-flip - vec2 cellOffset = vec2(glyphOffset.x, - glyphOffset.y - glyphSize.y); + if (backgroundPass != 0) { + cellPosition.y = cellPosition.y - 3; + vec2 finalPosition = (cellDim + cellSep) * position + cellPosition; + gl_Position = projection * vec4(finalPosition.xy, 0.0, 1.0); + TexCoords = vec2(0, 0); + } else { + + // Glyphs are offset within their cell; account for y-flip + vec2 cellOffset = vec2(glyphOffset.x, glyphOffset.y - glyphSize.y); + + // position coordinates are normalized on [0, 1] + vec2 finalPosition = glyphSize * position + cellPosition + cellOffset; - // position coordinates are normalized on [0, 1] - vec2 finalPosition = glyphSize * position + cellPosition + cellOffset; + gl_Position = projection * vec4(finalPosition.xy, 0.0, 1.0); + TexCoords = uvOffset + vec2(position.x, 1 - position.y) * uvSize; + } - gl_Position = projection * vec4(finalPosition.xy, 0.0, 1.0); - TexCoords = uvOffset + vec2(position.x, 1 - position.y) * uvSize; + background = backgroundPass; + bg = backgroundColor / vec3(255.0, 255.0, 255.0); fg = textColor / vec3(255.0, 255.0, 255.0); } |