From ea76b6988ccafaa6a4d4ed90f2489d0e49e1f180 Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Sat, 5 Sep 2015 09:32:30 -0400 Subject: Imported Upstream version 0.40.24 --- data/shader.vs | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 data/shader.vs (limited to 'data/shader.vs') diff --git a/data/shader.vs b/data/shader.vs new file mode 100755 index 0000000..8ce286e --- /dev/null +++ b/data/shader.vs @@ -0,0 +1,69 @@ +#version 140 // -*- mode: C -*- +// Defines emitted by gridrectst::init_gl at load: +// dimx, dimy: Grid size of the screen array +// dispx, dispy: Grid-cell (font) size +// vec4 colors[16]: Color palette; first non-bold, then bold +#ifdef GRAPHICS +// offset_texpos, offset_addcolor, offset_grayscale, offset_cf, offset_cbr: +// offsets of the corresponding graphicst arrays in data +#endif + +uniform usamplerBuffer data; +uniform samplerBuffer coords; +uniform isamplerBuffer fontmap; + +uniform uint frame; // Counts up from 0 + +in vec4 gl_Vertex; +in int gl_VertexID; + +flat out vec4 frontColor; +flat out vec4 backColor; +smooth out vec2 texCoords; + +void main() { + int tile = gl_VertexID / 6; + int offset_tile = tile * 4; + + int ch = int(texelFetch(data, offset_tile).a); + int fg = int(texelFetch(data, offset_tile+1).a); + int bg = int(texelFetch(data, offset_tile+2).a); + int bold = clamp(int(texelFetch(data, offset_tile+3).a), 0, 1); + +#ifdef GRAPHICS + uint texpos = texelFetch(data, offset_texpos + offset_tile).a; + texpos += texelFetch(data, offset_texpos + offset_tile + 1).a * 256u; + texpos += texelFetch(data, offset_texpos + offset_tile + 2).a * 65536u; + texpos += texelFetch(data, offset_texpos + offset_tile + 3).a * 16777216u; + uint addcolor = texelFetch(data, offset_addcolor + offset_tile).a; + uint grayscale = texelFetch(data, offset_grayscale + offset_tile).a; + uint cf = texelFetch(data, offset_cf + offset_tile).a; + uint cbr = texelFetch(data, offset_cbr + offset_tile).a; + + + vec4 tex_square; + if (texpos != 0u && ch != 0) { + tex_square = texelFetch(coords, int(texpos)); + if (grayscale != 0u) { + frontColor = colors[int(cf + cbr * 8u)]; + } else if (addcolor != 0u) { + frontColor = colors[fg + bold * 8]; + } else { + frontColor = vec4(1); + } + } else { + tex_square = texelFetch(coords, texelFetch(fontmap, ch).a); + frontColor = colors[fg + bold * 8]; + } +#else + vec4 tex_square = texelFetch(coords, texelFetch(fontmap, ch).a); + frontColor = colors[fg + bold * 8]; +#endif + + vec2 coords[6] = vec2[](tex_square.sq, tex_square.tq, tex_square.tp, + tex_square.sq, tex_square.tp, tex_square.sp); + texCoords = coords[gl_VertexID % 6]; + + gl_Position = gl_Vertex; + backColor = colors[bg]; +} -- cgit v1.2.3