CHGICKEN
[carveJwlIkooP6JGAAIwe30JlM.git] / character.h
index f161f7d210214fabe0e07befa0aec976518477c7..6a3a26b0764ef4e06babb3e6ca0ca84ca280858e 100644 (file)
@@ -1,57 +1,15 @@
 #ifndef CHARACTER_H
 #define CHARACTER_H
 
+/* TODO: -> Common.h */
+#define VG_3D
 #include "vg/vg.h"
+
 #include "model.h"
 #include "scene.h"
 #include "ik.h"
 #include "rigidbody.h"
-
-SHADER_DEFINE( shader_player,
-
-   /*Include*/ VERTEX_STANDARD_ATTRIBUTES
-
-       "uniform mat4 uPv;"
-   "uniform mat4x3 uMdl;"
-   "uniform float uOpacity;"
-   ""
-   "out vec4 aColour;"
-   "out vec2 aUv;"
-   "out vec3 aNorm;"
-   "out vec3 aCo;"
-   "out float aOpacity;"
-   ""
-       "void main()"
-       "{"
-      "vec3 world_pos = uMdl * vec4(a_co,1.0);"
-               "gl_Position = uPv * vec4(world_pos,1.0);"
-
-      "aColour = a_colour;"
-      "aUv = a_uv;"
-      "aNorm = mat3(uMdl) * a_norm;"
-      "aCo = a_co;"
-      "aOpacity = 1.0-(gl_Position.y+0.5)*uOpacity;"
-       "}",
-   /* Fragment */
-       "out vec4 FragColor;"
-       ""
-   "uniform sampler2D uTexMain;"
-   "uniform vec4 uColour;"
-   ""
-   "in vec4 aColour;"
-   "in vec2 aUv;"
-   "in vec3 aNorm;"
-   "in vec3 aCo;"
-   "in float aOpacity;"
-   ""
-       "void main()"
-       "{"
-      "vec3 diffuse = texture( uTexMain, aUv ).rgb;"
-      "FragColor = vec4(pow(diffuse,vec3(1.0)),aOpacity);"
-       "}"
-       ,
-       UNIFORMS({ "uTexMain", "uPv", "uMdl", "uOpacity" })
-)
+#include "shaders/character.h"
 
 #define FOREACH_PART(FN) \
    FN( foot_l ) \
@@ -544,14 +502,11 @@ static void character_testpose( struct character *ch, float t )
 
 static void character_draw( struct character *ch, float temp )
 {
-   SHADER_USE(shader_player);
-       glUniformMatrix4fv( SHADER_UNIFORM( shader_player, "uPv" ), 
-         1, GL_FALSE, (float *)vg_pv );
-
-   glUniform1i( SHADER_UNIFORM( shader_player, "uTexMain" ), 0 );
-   glUniform1f( SHADER_UNIFORM( shader_player, "uOpacity" ), temp );
+   shader_character_use();
 
-   GLint kuMdl = SHADER_UNIFORM( shader_player, "uMdl" );
+   shader_character_uPv( vg_pv );
+   shader_character_uTexMain( 0 );
+   shader_character_uOpacity( temp );
    
    glEnable( GL_CULL_FACE );
    glCullFace( GL_BACK );
@@ -560,7 +515,7 @@ static void character_draw( struct character *ch, float temp )
 
    for( int i=4; i<PART_COUNT; i++ )
    {
-      glUniformMatrix4x3fv( kuMdl, 1, GL_FALSE, (float *)ch->matrices[i] );
+      shader_character_uMdl( ch->matrices[i] );
       submodel_draw( &ch->parts[i] );
    }
 
@@ -568,22 +523,22 @@ static void character_draw( struct character *ch, float temp )
    {
       if( ch->shoes[i] )
       {
-         glUniformMatrix4x3fv( kuMdl, 1, GL_FALSE, (float *)ch->matrices[i] );
+         shader_character_uMdl( ch->matrices[i] );
          submodel_draw( &ch->parts[i] );
       }
       else
       {
-         glUniformMatrix4x3fv( kuMdl, 1, GL_FALSE, (float *)ch->matrices[i+2] );
+         shader_character_uMdl( ch->matrices[i+2] );
          submodel_draw( &ch->parts[i] );
-         glUniformMatrix4x3fv( kuMdl, 1, GL_FALSE, (float *)ch->matrices[i] );
+         shader_character_uMdl( ch->matrices[i] );
          submodel_draw( &ch->parts[i+2] );
       }
    }
 }
 
-static void character_shader_register(void)
+static void character_register(void)
 {
-   SHADER_INIT(shader_player);
+   shader_character_register();
 }
 
 
@@ -868,12 +823,10 @@ static void character_debug_ragdoll( struct character *ch )
    rb_debug( &ch->ragdoll[k_chpart_foot_r], 0xff00a5ff );
 }
 
-static void character_ragdoll_iter( struct character *ch, scene *sc )
+static void character_ragdoll_iter( struct character *ch )
 {
    for( int i=0; i<PART_COUNT; i++ )
-   {
-      rb_build_manifold( &ch->ragdoll[i], sc );
-   }
+      rb_build_manifold( &ch->ragdoll[i] );
 
    v3f rv;