stuff
[carveJwlIkooP6JGAAIwe30JlM.git] / scene.h
diff --git a/scene.h b/scene.h
index aaecfcce803f3fe04b6af604b83600bb002ac071..b4deaa95bfc96c6ab56095dfe0e2bd1e1d6edb90 100644 (file)
--- a/scene.h
+++ b/scene.h
@@ -106,7 +106,6 @@ static void *buffer_fix( void *buffer, u32 count, u32 *cap, size_t emsize )
 /* 
  * Append a model into the scene with a given transform
  */
-
 static void scene_add_submesh( scene *pscene, mdl_header *mdl, 
       mdl_submesh *sm, m4x3f transform )
 {
@@ -152,6 +151,30 @@ static void scene_add_submesh( scene *pscene, mdl_header *mdl,
    pscene->indice_count += sm->indice_count;
 }
 
+/*
+ * One by one adders for simplified access (mostly procedural stuff)
+ */
+static void scene_push_tri( scene *pscene, u32 tri[3] )
+{
+   pscene->indices = buffer_reserve( pscene->indices, pscene->indice_count,
+         &pscene->indice_cap, 3, sizeof(u32) );
+
+   u32 *dst = &pscene->indices[pscene->indice_count];
+   dst[0] = tri[0];
+   dst[1] = tri[1];
+   dst[2] = tri[2];
+
+   pscene->indice_count += 3;
+}
+
+static void scene_push_vert( scene *pscene, mdl_vert *v )
+{
+   pscene->verts = buffer_reserve( pscene->verts, pscene->vertex_count, 
+         &pscene->vertex_cap, 1, sizeof(mdl_vert) );
+
+   pscene->verts[pscene->vertex_count ++] = *v;
+}
+
 static void scene_copy_slice( scene *pscene, mdl_submesh *sm )
 {
    sm->indice_start = pscene->submesh.indice_start;
@@ -194,11 +217,15 @@ static void scene_draw( scene *pscene )
    mesh_drawn( 0, pscene->indice_count );
 }
 
-static void scene_free( scene *pscene )
+static void scene_free_offline_buffers( scene *pscene )
 {
    free( pscene->verts );
    free( pscene->indices );
+}
 
+static void scene_free( scene *pscene )
+{
+   scene_free_offline_buffers( pscene );
    /* TODO: bvh */
 }