typedef v2f line_co;
#endif
-SHADER_DEFINE( vg_line_shader,
+static struct vg_shader _shader_lines =
+{
+ .name = "[vg] lines",
+ .link = NULL,
+ .vs =
+ {
+ .orig_file = NULL,
+ .static_src =
+
#ifdef VG_3D
"uniform mat4 uPv;"
"layout (location=0) in vec3 a_co;"
#endif
" s_colour = a_colour;"
" gl_Position = vert_pos;"
- "}",
-
- // FRAGMENT
+ "}"
+ },
+ .fs =
+ {
+ .orig_file = NULL,
+ .static_src =
+
"out vec4 FragColor;"
""
"in vec4 s_colour;"
"{"
" FragColor = s_colour;"
"}"
- ,
- UNIFORMS({ "uPv" })
-)
+ }
+};
struct
{
.opt_i32 = { .min=0, .max=1, .clamp=1 },
.persistent = 1
});
-
- SHADER_INIT( vg_line_shader );
+
+ vg_shader_register( &_shader_lines );
glGenVertexArrays( 1, &vg_lines.vao );
glGenBuffers( 1, &vg_lines.vbo );
static void vg_lines_drawall( float* projection )
{
- SHADER_USE( vg_line_shader );
+ glUseProgram( _shader_lines.id );
#ifdef VG_3D
glUniformMatrix4fv
#else
glUniformMatrix3fv
#endif
- ( SHADER_UNIFORM( vg_line_shader, "uPv" ), 1, GL_FALSE, projection );
+ ( glGetUniformLocation( _shader_lines.id, "uPv" ), 1, GL_FALSE, projection );
glBindVertexArray( vg_lines.vao );
glBindBuffer( GL_ARRAY_BUFFER, vg_lines.vbo );
vg_line( p111, p011, colour );
}
+static void vg_line_boxf_transformed( m4x3f m, boxf box, u32 colour )
+{
+ v3f p000, p001, p010, p011, p100, p101, p110, p111;
+
+ p000[0]=box[0][0];p000[1]=box[0][1];p000[2]=box[0][2];
+ p001[0]=box[0][0];p001[1]=box[0][1];p001[2]=box[1][2];
+ p010[0]=box[0][0];p010[1]=box[1][1];p010[2]=box[0][2];
+ p011[0]=box[0][0];p011[1]=box[1][1];p011[2]=box[1][2];
+
+ p100[0]=box[1][0];p100[1]=box[0][1];p100[2]=box[0][2];
+ p101[0]=box[1][0];p101[1]=box[0][1];p101[2]=box[1][2];
+ p110[0]=box[1][0];p110[1]=box[1][1];p110[2]=box[0][2];
+ p111[0]=box[1][0];p111[1]=box[1][1];p111[2]=box[1][2];
+
+ m4x3_mulv( m, p000, p000 );
+ m4x3_mulv( m, p001, p001 );
+ m4x3_mulv( m, p010, p010 );
+ m4x3_mulv( m, p011, p011 );
+ m4x3_mulv( m, p100, p100 );
+ m4x3_mulv( m, p101, p101 );
+ m4x3_mulv( m, p110, p110 );
+ m4x3_mulv( m, p111, p111 );
+
+ vg_line( p000, p001, colour );
+ vg_line( p001, p011, colour );
+ vg_line( p011, p010, colour );
+ vg_line( p010, p000, colour );
+
+ vg_line( p100, p101, colour );
+ vg_line( p101, p111, colour );
+ vg_line( p111, p110, colour );
+ vg_line( p110, p100, colour );
+
+ vg_line( p100, p000, colour );
+ vg_line( p101, p001, colour );
+ vg_line( p110, p010, colour );
+ vg_line( p111, p011, colour );
+
+ vg_line( p000, p110, colour );
+ vg_line( p100, p010, colour );
+}
+
static void vg_line_pt3( v3f pt, float size, u32 colour )
{
boxf box =