Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //shader dotmatrix2_vertex
- #version 440 core
- layout(location = 0) in vec3 aPos;
- layout(location = 1) in vec2 aUV;
- out VS_OUT {
- vec2 uv;
- } vs_out;
- uniform mat4 transform;
- void main() {
- gl_Position = transform * vec4(aPos, 1);
- vs_out.uv = aUV;
- }
- //shader dotmatrix2_fragment
- #version 440 core
- out vec4 FragColor;
- in vec2 uv2;
- in vec2 dots2;
- flat in uvec2 dots3;
- layout(shared, binding = 2) uniform DotMatrix {
- uvec2 dots;
- float k1;
- float k2;
- float k3;
- float max;
- };
- float fc(float x) { return (x+1)/2; }
- float fd(float x) { return (2*x-1); }
- float ntsf(float x,float k) {
- x = clamp(x,-1.0,1.0);
- return (x-x*k)/(k - abs(x) * 2.0 * k + 1.0);
- }
- float ntsf3(float x,float k1,float k2,float k3) {
- return fd(ntsf(fc(ntsf(fd(ntsf(fc(x),k1)),k2)),k3));
- }
- float ntsf3s(float x,float k1,float k2,float k3) {
- return sign(x) * ntsf3(2*abs(x)-1,k1,k2,k3)/2+0.5;
- }
- void main() {
- // unsigned int c2 = int(dots2.x*4096);
- //unsigned int c1 = int(dots2.y*4096);
- unsigned int c2 = dots3.x;
- unsigned int c1 = dots3.y;
- //c1=0xaaaaaaaa;
- //c2=0x55555555;
- #if 1
- float s = 1.0/8.0;
- unsigned int i=0;
- float v=0;
- for(float y=0;y<1;y+=s) {
- for(float x=0;x<1;x+=s) {
- vec2 p = (uv2-1.0/16.0);
- if((((i<32?c1:c2)>>(31-(i&31))) & 1) != 0) {
- float e = distance(vec2(x,y),p);
- if(e<max) {
- v += clamp(ntsf3s(1-e,k1,k2,k3),0,1)*1.5;
- }
- }
- i++;
- }
- }
- #endif
- FragColor = vec4(vec3(0,1,0),v*0.5);
- //FragColor = vec4(vec3(1,0,0),1);
- }
- //shader dotmatrix2_geometry
- #version 440 core
- layout (triangles) in;
- layout (triangle_strip, max_vertices = 100) out;
- layout(shared, binding = 3) uniform DotMatrixFont {
- int px;
- int py;
- float size;
- uvec2 patterns[256];
- };
- layout(shared, binding = 4) uniform String {
- int string[256];
- };
- in VS_OUT {
- vec2 uv;
- } gs_in[];
- out vec2 uv2;
- out vec2 dots2;
- flat out uvec2 dots3;
- void main() {
- int i;
- int count=0;
- for(int ci=0;;ci++) {
- int ch4 = string[ci];
- for(int bi=0;bi<4;bi++,ch4>>=8) {
- int ch = ch4 & 0xff;
- if(ch==0) {
- return;
- }
- dots3 = patterns[ch];
- for(i = 0; i < 3; i++) {
- uv2 = gs_in[i].uv;
- gl_Position = gl_in[i].gl_Position + vec4(count*size*6.0/8,0,0,0);
- EmitVertex();
- }
- EndPrimitive();
- count++;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement