#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 quad_color; in vec2 quad_position; in vec2 quad_size; flat in float quad_opacity; flat in int quad_useTexture; flat in int quad_textureIndex; layout ( packed, binding = 0 ) uniform events { vec2 mouse; vec2 window; }; void main() { vec2 grid = vec2( floor( vertex_textureCoordinates.x * 10.0 ), floor( vertex_textureCoordinates.y * 10.0 ) ); int index = int( grid.x + ( grid.y * 10.0 ) ); vec2 newCoordinates = vertex_textureCoordinates; newCoordinates = vec2( mod( newCoordinates.x, 1) , mod( newCoordinates.y, 1) ); vec4 diffuseColor = vec4( 1.0 ); if( quad_useTexture == 1 ) { diffuseColor = texture( samplerArray, vec3( newCoordinates, quad_textureIndex ) ); } else { vec2 size = quad_size; vec2 halfSize = size / 2.0; vec2 fragCoord = vertex_textureCoordinates * size; float radius = 100.; float borderSmoothing = 2.0; vec2 centerPosition = fragCoord - halfSize; float a = length( abs( centerPosition ) + size + radius ) - radius; //float b = max( a, length( halfSize / 2. ) ); //float c = length( a ); diffuseColor.rgb = quad_color * (1.0 - a);//( 1.0 - smoothstep( radius, radius + borderSmoothing, b ) ); } diffuseColor.w *= quad_opacity; frag_colour = diffuseColor; }