[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11221] branches/soc-2007-mosani/source/ blender/render/render_api: Small commit: added filtering for subdivision surfaces and particles.

Aaron Moore two.a.ron at gmail.com
Wed Jul 11 02:49:26 CEST 2007


Revision: 11221
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11221
Author:   mosani
Date:     2007-07-11 02:49:25 +0200 (Wed, 11 Jul 2007)

Log Message:
-----------
Small commit: added filtering for subdivision surfaces and particles.
              the render api now treats them separately from meshes.

The test in place prints all the geometry by type to the console.

Modified Paths:
--------------
    branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI.h
    branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI_helpers.h
    branches/soc-2007-mosani/source/blender/render/render_api/source/RND_helpers.c
    branches/soc-2007-mosani/source/blender/render/render_api/source/RND_object.c
    branches/soc-2007-mosani/source/blender/render/render_api/source/test.c

Modified: branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI.h
===================================================================
--- branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI.h	2007-07-10 22:13:02 UTC (rev 11220)
+++ branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI.h	2007-07-11 00:49:25 UTC (rev 11221)
@@ -60,6 +60,8 @@
 #include "DNA_mesh_types.h"
 #include "DNA_meshdata_types.h"
 #include "BKE_DerivedMesh.h"
+#include "DNA_modifier_types.h"
+#include "DNA_effect_types.h"
 #include "DNA_curve_types.h"
 #include "DNA_ipo_types.h"
 #include "BKE_anim.h"

Modified: branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI_helpers.h
===================================================================
--- branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI_helpers.h	2007-07-10 22:13:02 UTC (rev 11220)
+++ branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI_helpers.h	2007-07-11 00:49:25 UTC (rev 11221)
@@ -63,6 +63,9 @@
 /* creates a pointer to holder and pushes it on the end of index */
 void RenderAPI_add_to_index( RenderAPIObjectHolder *holder, ListBase *index );
 
+int RenderAPI_is_subdivision_surface( Object *object );
+int RenderAPI_is_particle_system( Object *object );
+
 /* sets the type of holder and assings it to the correct type index.  */
 void RenderAPI_index_by_type( RenderAPIObjectHolder *holder, RNDScene scene );
 

Modified: branches/soc-2007-mosani/source/blender/render/render_api/source/RND_helpers.c
===================================================================
--- branches/soc-2007-mosani/source/blender/render/render_api/source/RND_helpers.c	2007-07-10 22:13:02 UTC (rev 11220)
+++ branches/soc-2007-mosani/source/blender/render/render_api/source/RND_helpers.c	2007-07-11 00:49:25 UTC (rev 11221)
@@ -178,8 +178,21 @@
 		break;
 	case OB_MESH:
 		/* check for particals / subdivision surfaces */
-		holder->type |= RND_GEOMETRY_POLYGON_MESH;
-		RenderAPI_add_to_index( holder, &scene->geometry_polygon_mesh );
+		if( RenderAPI_is_subdivision_surface( holder->source ) )
+		{
+			holder->type |= RND_GEOMETRY_SUBDIVISION_SURFACE;
+			RenderAPI_add_to_index( holder, 
+				&scene->geometry_subdivision_surface );
+		}
+		else if( RenderAPI_is_particle_system( holder->source ) )
+		{
+			holder->type |= RND_GEOMETRY_PARTICLE_SYSTEM;
+			RenderAPI_add_to_index( holder, &scene->geometry_particle_system );
+		}
+		else{
+			holder->type |= RND_GEOMETRY_POLYGON_MESH;
+			RenderAPI_add_to_index( holder, &scene->geometry_polygon_mesh );
+		}
 		break;
 	case OB_SURF:
 		holder->type |= RND_GEOMETRY_NURB_SURFACE;
@@ -198,6 +211,23 @@
 	}
 }
 
+int RenderAPI_is_subdivision_surface( Object *object )
+{
+	if( object->modifiers.last == NULL ) return 0;
+	return ((ModifierData*)object->modifiers.last)->type == 
+			eModifierType_Subsurf;
+}
+
+int RenderAPI_is_particle_system( Object *object )
+{
+	Effect *effect;
+	if( object->effect.first == NULL ) return 0;
+	for( effect = object->effect.first; effect; effect = effect->next )
+		if( effect->type == EFF_PARTICLE )
+			return 1;
+	return 0;
+}
+
 void RenderAPI_index_light( RenderAPIObjectHolder *holder, short type,
 	RNDScene scene )
 {

Modified: branches/soc-2007-mosani/source/blender/render/render_api/source/RND_object.c
===================================================================
--- branches/soc-2007-mosani/source/blender/render/render_api/source/RND_object.c	2007-07-10 22:13:02 UTC (rev 11220)
+++ branches/soc-2007-mosani/source/blender/render/render_api/source/RND_object.c	2007-07-11 00:49:25 UTC (rev 11221)
@@ -101,7 +101,10 @@
 	return object->current->holder->name;
 }
 
-RND_DATATYPE RND_object_get_type( RNDObject object ){}
+RND_DATATYPE RND_object_get_type( RNDObject object )
+{
+	return object->current->holder->type;
+}
 
 void RND_object_get_transformation( RNDObject object, 
 	float transformation[][4] ){}

Modified: branches/soc-2007-mosani/source/blender/render/render_api/source/test.c
===================================================================
--- branches/soc-2007-mosani/source/blender/render/render_api/source/test.c	2007-07-10 22:13:02 UTC (rev 11220)
+++ branches/soc-2007-mosani/source/blender/render/render_api/source/test.c	2007-07-11 00:49:25 UTC (rev 11221)
@@ -16,6 +16,7 @@
 	RNDScene scene = RenderAPI_create_scene( G.scene );
 	RenderAPI_create_object_indexes( scene );
 	
+	/*
 	i++;
 	sprintf( name, "render api scene %d", i );
 	new_scene = add_scene( name );
@@ -34,6 +35,28 @@
 		new_object->flag &= ~OB_FROMGROUP;
 		scene_add_base( new_scene, new_object );
 	}
+	*/
+	object = RND_get_objects( scene, RND_GEOMETRY );
+	for( ; RND_object_exists( object ); RND_object_next( object ) )
+	{
+		if( RND_object_get_type( object ) & RND_GEOMETRY_POLYGON_MESH )
+			fprintf( stderr, ">>> mesh: %s\n", RND_object_get_name( object ) );
+		else
+		if( RND_object_get_type( object ) & RND_GEOMETRY_NURB_SURFACE )
+			fprintf( stderr, ">>> nurb: %s\n", RND_object_get_name( object ) );
+		else
+		if( RND_object_get_type( object ) & RND_GEOMETRY_CURVE )
+			fprintf( stderr, ">>> curve: %s\n", RND_object_get_name( object ) );
+		else
+		if( RND_object_get_type( object ) & RND_GEOMETRY_METABALL )
+			fprintf( stderr, ">>> metaball: %s\n", RND_object_get_name( object ) );
+		else
+		if( RND_object_get_type( object ) & RND_GEOMETRY_SUBDIVISION_SURFACE )
+			fprintf( stderr, ">>> subsurface: %s\n", RND_object_get_name( object ) );
+		else
+		if( RND_object_get_type( object ) & RND_GEOMETRY_PARTICLE_SYSTEM )
+			fprintf( stderr, ">>> particles: %s\n", RND_object_get_name( object ) );
+	}
 	
 	RenderAPI_free_scene( scene );
 }





More information about the Bf-blender-cvs mailing list