vg_tex2d tex_tile_data = { .path = "textures/tileset.qoi" };
vg_tex2d tex_tile_detail = { .path = "textures/tile_overlays.qoi" };
vg_tex2d tex_wood = { .path = "textures/wood.qoi" };
-vg_tex2d tex_ball = { .path = "textures/ball.qoi", .flags = VG_TEXTURE_CLAMP };
vg_tex2d tex_background = { .path = "textures/background.qoi" };
+vg_tex2d tex_ball_noise = { .path = "textures/bnoise.qoi" };
-vg_tex2d *texture_list[] = { &tex_tile_detail, &tex_tile_data, &tex_wood, &tex_ball, &tex_background };
+vg_tex2d *texture_list[] = { &tex_tile_detail, &tex_tile_data, &tex_wood, &tex_background, &tex_ball_noise };
// AUDIO
// ===========================================================================================================
"uniform vec2 uOffset;"
"uniform mat3 uPv;"
""
- "out vec2 aTexCoords;"
+ "out vec4 aTexCoords;"
""
"void main()"
"{"
- // Create texture coords
- "aTexCoords = a_co;"
-
// Vertex transform
"vec3 worldpos = vec3( a_co * 0.5 - 0.25 + uOffset, 1.0 );"
"gl_Position = vec4( uPv * worldpos, 1.0 );"
+
+ // Create texture coords
+ "aTexCoords = vec4( a_co, worldpos.xy );"
"}",
// FRAGMENT
""
"uniform sampler2D uTexMain;"
"uniform vec3 uColour;"
+ "uniform vec2 uTexOffset;"
""
- "in vec2 aTexCoords;"
+ "in vec4 aTexCoords;"
""
"void main()"
"{"
- "vec4 glyph = texture( uTexMain, aTexCoords );"
- "FragColor = vec4( uColour + glyph.rgb * 0.2, glyph.a );"
+ "vec2 center_coords = aTexCoords.xy - 0.5;"
+ "vec2 center_coords_sqr = center_coords*center_coords;"
+ "float circle_factor = smoothstep( 0.07, 0.0625, center_coords_sqr.x+center_coords_sqr.y );"
+
+ "float bulge_amt = center_coords_sqr.x+center_coords_sqr.y;"
+ "vec2 warped_coords = aTexCoords.zw+uTexOffset - center_coords;"
+ "vec4 noise_sample = texture( uTexMain, warped_coords );"
+
+ "float rim_light = (center_coords_sqr.x+center_coords_sqr.y)*15.0;"
+
+ "vec2 shadow_coords = center_coords + vec2(0.02,0.07);"
+ "vec2 shadow_coords_sqr = shadow_coords*shadow_coords;"
+ "float shadow = exp(-((shadow_coords_sqr.x+shadow_coords_sqr.y)-0.0125)*15.0);"
+
+ "vec3 marble_comp = uColour*0.9 + (noise_sample.x*0.7+pow(rim_light,3.0)*2.0) * 0.1;"
+ "vec4 colour_comp = mix( vec4(0.74,0.53,0.34,shadow), vec4(marble_comp,1.0), circle_factor );"
+
+ "FragColor = colour_comp;"
"}"
,
- UNIFORMS({ "uTexMain", "uColour", "uOffset", "uPv" })
+ UNIFORMS({ "uTexMain", "uColour", "uOffset", "uPv", "uTexOffset" })
)
SHADER_DEFINE( shader_tile_main,
UNIFORMS({ "uPv", "uOffset", "uTexMain", "uVariance", "uSamplerNoise" })
)
+SHADER_DEFINE( shader_wire,
+ // VERTEX
+ "layout (location=0) in vec2 a_co;"
+ "uniform vec3 uStart;"
+ "uniform vec3 uEnd;"
+ "uniform mat3 uPv;"
+ "uniform float uCurve;"
+ ""
+ "out vec2 aTexCoords;"
+ ""
+ "vec3 sample_curve_time( float t )"
+ "{"
+ "vec3 line_coord = mix( uStart, uEnd, t );"
+
+ "float curve_amt = 1.0-(pow((t*2.0-1.0),2.0));"
+ "return vec3( line_coord.x, line_coord.y - curve_amt*uCurve, line_coord.z );"
+ "}"
+ ""
+ "void main()"
+ "{"
+ // Vertex transform
+ "vec3 p0 = sample_curve_time( a_co.x );"
+ "vec3 p1 = sample_curve_time( a_co.x + 0.025 );"
+
+ "vec2 line_tangent = normalize(p1.xy-p0.xy);"
+ "vec2 line_normal = vec2( -line_tangent.y, line_tangent.x );"
+
+ "vec2 worldfinal = p0.xy + line_normal*a_co.y*p0.z;"
+
+ "gl_Position = vec4( uPv * vec3(worldfinal, 1.0), 1.0 );"
+
+ // Create texture coords (todo: include stretch adjusted coords?)
+ "aTexCoords = vec2( a_co.x, a_co.y + 0.5 );"
+ "}",
+
+ // FRAGMENT
+ "out vec4 FragColor;"
+ ""
+ "uniform sampler2D uTexMain;"
+ "uniform vec4 uColour;"
+ ""
+ "in vec2 aTexCoords;"
+ ""
+ "void main()"
+ "{"
+ "FragColor = uColour;"
+ "}"
+ ,
+ UNIFORMS({ "uPv", "uColour", "uTexMain", "uStart", "uEnd", "uCurve" })
+)
+
+
void vg_register(void)
{
SHADER_INIT( shader_tile_colour );
SHADER_INIT( shader_tile_main );
SHADER_INIT( shader_ball );
SHADER_INIT( shader_background );
+ SHADER_INIT( shader_wire );
}
/*