its ot'
[vg.git] / src / vg / vg_lines.h
index 704d9bde796b28ae16da8005e6d95d20fb376ddc..e14d3381d3e4bf65942601afcb79a53ee052bb45 100644 (file)
@@ -8,7 +8,15 @@ static int debug_lines_enable = 1;
  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;"
@@ -29,9 +37,13 @@ SHADER_DEFINE( vg_line_shader,
 #endif
        "  s_colour = a_colour;"
        "       gl_Position = vert_pos;"
-       "}",
-       
-       // FRAGMENT
+       "}"
+   },
+   .fs = 
+   {
+      .orig_file = NULL,
+      .static_src = 
+
        "out vec4 FragColor;"
        ""
        "in vec4 s_colour;"
@@ -40,9 +52,8 @@ SHADER_DEFINE( vg_line_shader,
        "{"
        "       FragColor = s_colour;"
        "}"
-       ,
-       UNIFORMS({ "uPv" })
-)
+   }
+};
 
 struct
 {
@@ -72,8 +83,8 @@ static void vg_lines_init(void)
       .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 );
@@ -119,14 +130,14 @@ static void vg_lines_free(void)
 
 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 );
@@ -210,6 +221,48 @@ static void vg_line_boxf( boxf box, u32 colour )
    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 =