#version 460

out vec4 frag_colour;

uniform vec3 diffuse;

uniform vec2 position;

uniform sampler2DArray samplerArray;


in vec2 vertex_textureCoordinates;

in float vertex_meshIndex;

in vec3 vertex_color;


layout( std430, binding = 0 )  buffer inputBlock {

	int characters[ 100 ];

};

layout( std430, binding = 1 )  buffer fontData {

	vec2 fontOffsets[ 240 ];

	vec2 fontSizes[ 240 ];

};






struct quadDetails{

	int textLength;
	
	float text[];

};




float roundedFrame( vec2 pos, vec2 size, float radius, float thickness )
{
	float d = length(max(abs(vertex_textureCoordinates - pos),size) - size) - radius;
	return smoothstep(0.55, 0.45, abs(d / thickness) * 5.0);
}

void main() {

	int charactersPerLine	= 10;

	vec2 grid 	= vec2( floor( vertex_textureCoordinates.x * charactersPerLine ), floor( vertex_textureCoordinates.y * charactersPerLine ) );


	int index	= int( grid.x + ( grid.y * charactersPerLine ) ); 

	vec2 newCoordinates	= vertex_textureCoordinates * charactersPerLine;


	newCoordinates = vec2( mod( newCoordinates.x, 1) , mod( newCoordinates.y, 1) );


	vec2 fontSize			= fontSizes[ index ];

	vec2 offset				= fontOffsets[ index ];

	int characterIndex 		= characters[ index ];



	vec2 correction			= fontSize;



	newCoordinates.xy 			+= (offset / fontSize) / 128;

	//newCoordinates.xy 			*= fontSize / 128;


	if( characterIndex > 0 ) {

		vec3 coordinate	= vec3( newCoordinates, characterIndex );

		float inverse = ( ( texture( samplerArray, coordinate ).r * -1. ) + 1. );
	
		frag_colour = vec4( 1.0, 1.0, 1.0,  inverse );	

	} else {

		frag_colour = vec4(  1.0 );	

	}

}