}
};
+static struct vg_shader _shader_ui_image =
+{
+ .name = "[vg] ui_image",
+ .link = NULL,
+ .vs =
+ {
+ .orig_file = NULL,
+ .static_src =
+ "layout (location=0) in vec2 a_co;"
+ "layout (location=1) in vec2 a_uv;"
+ "layout (location=2) in vec4 a_colour;"
+ "layout (location=3) in vec4 a_clip;"
+ "uniform mat3 uPv;"
+ ""
+ "out vec2 aTexCoords;"
+ "out vec4 aColour;"
+ "out vec2 aWsp;"
+ "out vec4 aClip;"
+ ""
+ "void main()"
+ "{"
+ "gl_Position = vec4( uPv * vec3( a_co, 1.0 ), 1.0 );"
+ "aTexCoords = a_uv * 0.0078125;"
+ "aColour = a_colour;"
+
+ "aWsp = a_co;"
+ "aClip = a_clip;"
+ "}",
+ },
+ .fs =
+ {
+ .orig_file = NULL,
+ .static_src =
+ "uniform sampler2D uTexImage;"
+ "out vec4 FragColor;"
+ ""
+ "in vec2 aTexCoords;"
+ "in vec4 aColour;"
+ ""
+ "in vec2 aWsp;"
+ "in vec4 aClip;"
+
+ "void main()"
+ "{"
+ "float clip_blend = step( aWsp.x, aClip.z ) *"
+ "step( aWsp.y, aClip.w ) *"
+ "step( aClip.x, aWsp.x ) *"
+ "step( aClip.y, aWsp.y ); "
+
+ "vec4 colour = texture( uTexImage, aTexCoords );"
+ "float value = dot(vec4(1.0),colour)*0.25;"
+
+ "vec3 col = vec3(pow(cos(value*3.14159265*2.0)*0.5+0.5,0.5))"
+ "* vec3(step(value,0.5),0.3,step(1.0-value,0.5));"
+
+ "FragColor = vec4( col*4.0, clip_blend );"
+ "}"
+ }
+};
+
typedef i16 ui_px;
typedef u32 ui_colour;
typedef ui_px ui_rect[4];
}
static vg_uictx;
-#define UI_GLYPH_SPACING_X 9
+#define UI_GLYPH_SPACING_X 8
static GLuint ui_glyph_texture = 0;
static ui_colourset ui_default_colours = {
VG_STATIC void _vg_ui_init(void)
{
- if( !vg_shader_compile( &_shader_ui ) )
+ if( !vg_shader_compile( &_shader_ui ) ||
+ !vg_shader_compile( &_shader_ui_image ) )
vg_fatal_exit_loop( "Failed to compile ui shader" );
/*
/* Load default font */
u32 compressed[] = {
- #include "vg/vg_pxfont.h"
+ #include "vg/vg_pxfont_thin.h"
};
u32 pixels = 0, total = 256*256, data = 0;
glDrawElements( GL_TRIANGLES, num_indices_normal,
GL_UNSIGNED_SHORT, (void*)(0) );
+
+
+ /* images */
+ glUseProgram( _shader_ui_image.id );
+ glUniformMatrix3fv( glGetUniformLocation( _shader_ui_image.id, "uPv" ), 1,
+ GL_FALSE, (float *)view_override );
+
+ glActiveTexture( GL_TEXTURE1 );
+ glUniform1i( glGetUniformLocation( _shader_ui_image.id, "uTexImage" ), 1 );
/* Draw image elements */
for( int i = 0; i < vg_uictx.image_count; i ++ )