cell shade character
[carveJwlIkooP6JGAAIwe30JlM.git] / world_render.c
index 281a6e7a69cb8f75857d4ac16f49aa5a4ba8ff8a..096de9a99a624717425a5383061430b3d1f273e2 100644 (file)
@@ -12,6 +12,7 @@
 #include "respawn.h"
 #include "ent_miniworld.h"
 #include "player_remote.h"
+#include "ent_skateshop.h"
 
 static int ccmd_set_time( int argc, const char *argv[] ){
    world_instance *world = world_current_instance();
@@ -163,12 +164,6 @@ void world_render_props( world_instance *world, u32 material_id,
                          struct world_pass *pass ){
    if( !mdl_arrcount( &world->ent_prop ) ) return;
 
-   /* HACK: use the first material for every prop entity */
-   ent_prop *first = mdl_arritm( &world->ent_prop, 0 );
-   if( !first->submesh_count ) return;
-
-   mdl_submesh *sm = mdl_arritm( &world->meta.submeshs, first->submesh_start );
-   if( sm->material_id != material_id ) return;
 
    struct world_surface *mat = &world->surfaces[ material_id ];
    pass->fn_bind_textures( world, mat );
@@ -178,7 +173,10 @@ void world_render_props( world_instance *world, u32 material_id,
       if( prop->flags & 0x1 ) continue;
       
       for( u32 k=0; k<prop->submesh_count; k++ ){
-         sm = mdl_arritm( &world->meta.submeshs, prop->submesh_start+k );
+         mdl_submesh *sm = 
+            mdl_arritm( &world->meta.submeshs, prop->submesh_start+k );
+
+         if( sm->material_id != material_id ) continue;
 
          m4x3f mmdl;
          mdl_transform_m4x3( &prop->transform, mmdl );
@@ -278,18 +276,25 @@ void world_render_both_stages( world_instance *world, struct world_pass *pass )
    glEnable( GL_CULL_FACE );
 }
 
+static GLuint world_get_texture( world_instance *world, u32 id ){
+   if( id & 0x80000000 )
+      return skaterift.rt_textures[id & ~0x80000000];
+   else 
+      return world->textures[ id ];
+}
+
 static void bindpoint_diffuse_texture1( world_instance *world,
-                                           struct world_surface *mat )
-                                         
-{
+                                           struct world_surface *mat ){
    glActiveTexture( GL_TEXTURE1 );
-   glBindTexture( GL_TEXTURE_2D, world->textures[ mat->info.tex_diffuse ] );
+   glBindTexture( GL_TEXTURE_2D, 
+                  world_get_texture(world,mat->info.tex_diffuse) );
 }
 
 static void bindpoint_diffuse1_and_cubemap10( world_instance *world,
                                                  struct world_surface *mat ){
    glActiveTexture( GL_TEXTURE1 );
-   glBindTexture( GL_TEXTURE_2D, world->textures[ mat->info.tex_diffuse ] );
+   glBindTexture( GL_TEXTURE_2D, 
+                  world_get_texture(world,mat->info.tex_diffuse) );
 
    u32 cubemap_id = mat->info.tex_none0,
        cubemap_index = 0;
@@ -645,7 +650,8 @@ static void bindpoint_terrain( world_instance *world,
                                   struct world_surface *mat )
 {
    glActiveTexture( GL_TEXTURE1 );
-   glBindTexture( GL_TEXTURE_2D, world->textures[ mat->info.tex_diffuse ] );
+   glBindTexture( GL_TEXTURE_2D, 
+                  world_get_texture(world,mat->info.tex_diffuse) );
 
    shader_scene_terrain_uSandColour( mat->info.colour );
    shader_scene_terrain_uBlendOffset( mat->info.colour1 );
@@ -658,7 +664,8 @@ static void bindpoint_override( world_instance *world,
    }
    else{
       glActiveTexture( GL_TEXTURE1 );
-      glBindTexture( GL_TEXTURE_2D, world->textures[ mat->info.tex_diffuse ] );
+      glBindTexture( GL_TEXTURE_2D, 
+                     world_get_texture(world,mat->info.tex_diffuse) );
       shader_scene_override_uAlphatest(1);
    }
 }
@@ -762,6 +769,8 @@ static void render_world_gates( world_instance *world, camera *cam ){
 
    for( u32 i=0; i<mdl_arrcount(&world->ent_gate); i++ ){
       ent_gate *gi = mdl_arritm( &world->ent_gate, i );
+      if( !(gi->flags & k_ent_gate_linked) )
+         continue;
 
       float dist = v3_dist2( gi->co[0], cam->transform[3] );
 
@@ -973,7 +982,7 @@ static void render_world_override( world_instance *world,
                                    world_instance *lighting_source,
                                    m4x3f mmdl,
                                    camera *cam,
-                                   ent_spawn *dest_spawn, f32 iso_amt ){
+                                   ent_spawn *dest_spawn, v4f map_info ){
    struct world_pass pass = {
       .cam = cam,
       .fn_bind_textures = bindpoint_override,
@@ -987,7 +996,7 @@ static void render_world_override( world_instance *world,
    shader_scene_override_uTexGarbage(0);
    shader_scene_override_uTexMain(1);
    shader_scene_override_uPv( pass.cam->mtx.pv );
-   shader_scene_override_uIsoAmt( iso_amt );
+   shader_scene_override_uMapInfo( map_info );
 
    WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( lighting_source, scene_override );
    bind_terrain_noise();