point maps (wip)
[carveJwlIkooP6JGAAIwe30JlM.git] / world_gate.h
index 2febafaaa0434f46a249ec2036cb686532e569ca..b409c51d0d482f65ced1193aa8108a88ea8ecaf3 100644 (file)
@@ -5,6 +5,7 @@
 #ifndef WORLD_GATE_H
 #define WORLD_GATE_H
 
+#include "skaterift.h"
 #include "common.h"
 #include "model.h"
 #include "entity.h"
@@ -27,8 +28,8 @@ VG_STATIC void gate_transform_update( ent_gate *gate )
    v3_copy( gate->co[1], recv_to_world[3] );
    m4x3_mul( recv_to_world, to_local, gate->transport );
 
-   m4x3_scalev( gate->to_world, (v3f){ gate->dimensions[0], 
-                                       gate->dimensions[1], 1.0f } );
+   m3x3_scale( gate->to_world, (v3f){ gate->dimensions[0], 
+                                      gate->dimensions[1], 1.0f } );
 }
 
 VG_STATIC void world_gates_init(void)
@@ -42,7 +43,6 @@ VG_STATIC void world_gates_init(void)
    mdl_context mgate;
    mdl_open( &mgate, "models/rs_gate.mdl", vg_mem.scratch );
    mdl_load_metadata_block( &mgate, vg_mem.scratch );
-   mdl_load_mesh_block( &mgate, vg_mem.scratch );
 
    mdl_mesh *surface = mdl_find_mesh( &mgate, "rs_gate" );
    mdl_submesh *sm = mdl_arritm(&mgate.submeshs,surface->submesh_start);
@@ -57,13 +57,8 @@ VG_STATIC void world_gates_init(void)
       world_global.sm_gate_marker[i] = *sm;
    }
 
+   mdl_async_load_glmesh( &mgate, &world_global.mesh_gate );
    mdl_close( &mgate );
-
-   vg_acquire_thread_sync();
-   {
-      mdl_unpack_glmesh( &mgate, &world_global.mesh_gate );
-   }
-   vg_release_thread_sync();
 }
 
 VG_STATIC int render_gate( world_instance *world_inside,
@@ -155,7 +150,7 @@ VG_STATIC int render_gate( world_instance *world_inside,
       glDisable( GL_STENCIL_TEST );
 
       render_water_texture( world_inside, &gate_camera, layer_depth );
-      render_fb_bind( gpipeline.fb_main );
+      render_fb_bind( gpipeline.fb_main, 1 );
 
       glEnable( GL_STENCIL_TEST );
 
@@ -231,9 +226,17 @@ VG_STATIC ent_gate *world_intersect_gates( world_instance *world,
 {
    for( u32 i=0; i<mdl_arrcount(&world->ent_gate); i++ ){
       ent_gate *gate = mdl_arritm( &world->ent_gate, i );
-      if( gate->type == k_gate_type_unlinked )
+      if( gate->type == k_gate_type_unlinked ||
+          gate->type == k_gate_type_nonlocal_unlinked )
          continue;
 
+      if( gate->type == k_gate_type_nonlocel ){
+         if( skaterift.async_op == k_async_op_world_loading ||
+             skaterift.async_op == k_async_op_world_preloading ){
+            continue;
+         }
+      }
+
       if( gate_intersect( gate, pos, last ) ){
          return gate;
       }