Index: shadow.c
===================================================================
--- shadow.c	(revision 118)
+++ shadow.c	(revision 119)
@@ -20,6 +20,40 @@
 raydium_log("shadow: OK (was easy, hard work comes next ;)");
 }
 
+void raydium_shadow_ground_change(int object)
+{
+//modelsize, center factors
+GLfloat min[3],max[3];
+GLfloat tx,ty,tz;
+GLfloat x,y,z;
+
+if(!raydium_object_isvalid(object))
+    {
+    raydium_log("shadow: ERROR: ground id or name is invalid");
+    return;
+    }
+
+raydium_shadow_ground_mesh=object;
+raydium_object_find_center_factors(object,&x,&y,&z);
+raydium_shadow_ground_center_factor_x=0.5-x;
+raydium_shadow_ground_center_factor_y=0.5-y;
+
+raydium_object_find_minmax(object,min,max);
+tx=max[0]-min[0];
+ty=max[1]-min[1];
+tz=max[2]-min[2];
+
+raydium_shadow_ground_modelsize=raydium_trigo_max(tx,raydium_trigo_max(ty,tz));
+raydium_shadow_ground_modelsize/=2;
+
+/*raydium_log("shadow: ground modelsize is %.2f, center factors : %.2f/%.2f",
+    raydium_shadow_ground_modelsize,
+    raydium_shadow_ground_center_factor_x,
+    raydium_shadow_ground_center_factor_y);
+*/
+}
+
+
 void raydium_shadow_enable(void)
 {
 float S[]={1.0, 0.0, 0.0, 0.0};
@@ -28,9 +62,19 @@
 float Q[]={0.0, 0.0, 0.0, 1.0};
 int tmp;
 
-if(raydium_shadow_tag || raydium_texture_exists(RAYDIUM_SHADOW_TEXTURE)!=-1)
+if(raydium_shadow_tag)
     return;
 
+raydium_shadow_tag=1;
+
+raydium_log("hit (0x%x) - %i",&raydium_shadow_tag,raydium_shadow_tag);
+/*if(raydium_ode_ground_mesh>=0 || raydium_ode_ground_mesh!=raydium_shadow_ground_mesh)
+    raydium_shadow_ground_change(raydium_ode_ground_mesh);*/
+    
+// There was a previous call
+if(raydium_texture_exists(RAYDIUM_SHADOW_TEXTURE)!=-1)
+    return;
+
 tmp=1;
 while(tmp<=raydium_window_tx && 
       tmp<=raydium_window_ty && 
@@ -48,7 +92,7 @@
 
 raydium_shadow_texture=raydium_texture_load_internal("",RAYDIUM_SHADOW_TEXTURE,1,raydium_shadow_map_size,raydium_shadow_map_size,4,-1);
 //raydium_shadow_texture=raydium_texture_load("shadowmap1.tga"); // debug
-raydium_shadow_tag=1;
+
 }
 
 void raydium_shadow_disable(void)
@@ -67,45 +111,17 @@
 raydium_shadow_light=l;
 }
 
-void raydium_shadow_ground_change(int object)
-{
-//modelsize, center factors
-GLfloat min[3],max[3];
-GLfloat tx,ty,tz;
-GLfloat x,y,z;
 
-if(!raydium_object_isvalid(object))
-    {
-    raydium_log("shadow: ERROR: ground id or name is invalid");
-    return;
-    }
-
-raydium_shadow_ground_mesh=object;
-raydium_object_find_center_factors(object,&x,&y,&z);
-raydium_shadow_ground_center_factor_x=0.5-x;
-raydium_shadow_ground_center_factor_y=0.5-y;
-
-raydium_object_find_minmax(object,min,max);
-tx=max[0]-min[0];
-ty=max[1]-min[1];
-tz=max[2]-min[2];
-
-raydium_shadow_ground_modelsize=raydium_trigo_max(tx,raydium_trigo_max(ty,tz));
-raydium_shadow_ground_modelsize/=2;
-/*
-raydium_log("shadow: ground modelsize is %.2f, center factors : %.2f/%.2f",
-    raydium_shadow_ground_modelsize,
-    raydium_shadow_ground_center_factor_x,
-    raydium_shadow_ground_center_factor_y);
-*/
-}
-
 void raydium_shadow_map_generate(void)
 {
+//printf(". %i %i\n",raydium_shadow_tag, raydium_shadow_ground_mesh);
+
 // test shadow support and ground
 if(!raydium_shadow_tag || raydium_shadow_ground_mesh<0)
     return;
 
+//printf("shadow map gen\n");
+
 glViewport(0,0,raydium_shadow_map_size,raydium_shadow_map_size);
 glClearColor(0,0,0,1);
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@@ -132,7 +148,9 @@
 
 raydium_shadow_rendering=1;
 //raydium_ode_draw_all(RAYDIUM_ODE_DRAW_SHADOWERS); // static compile time linking disallow using this constant
+#ifdef ODE_SUPPORT 
 raydium_ode_draw_all(4);
+#endif
 raydium_shadow_rendering=0;
 
 #ifdef DEBUG_SHADOW_MAP_VIEW
@@ -158,10 +176,14 @@
 int i;
 float mview[16],imview[16];
 
+
+
 // test shadow support and ground
 if(!raydium_shadow_tag || raydium_shadow_ground_mesh<0)
     return;
 
+//printf("shadow map render\n");
+
 //    glLoadIdentity();
 raydium_camera_replace();
 glEnable(GL_TEXTURE_GEN_S);