[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11370] branches/soc-2007-mosani/source/ blender: The callbacks can access the Render API via Lynx3d's suggestion,

Aaron Moore two.a.ron at gmail.com
Thu Jul 26 04:43:03 CEST 2007


Revision: 11370
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11370
Author:   mosani
Date:     2007-07-26 04:43:00 +0200 (Thu, 26 Jul 2007)

Log Message:
-----------
The callbacks can access the Render API via Lynx3d's suggestion,
although, Peter Schlaile has suggested that I change the system
back to 'directly' accessing functions within blender, as this is
the way blender's plugin system has always worked. So now I'm going
to attempt to make it work under this system. This means reverting
to a couple commits back.

However, this code is capible of producing an image in Aqsis via
RIB export. I decided to wait until I was producing a render to
figure out the correct implementation of the translations between
conflicting coordinate systems, so the coordinates are still being
mapped wrong. This will be fixed soon.

Modified Paths:
--------------
    branches/soc-2007-mosani/source/blender/blenpluginapi/PLU_register.h
    branches/soc-2007-mosani/source/blender/blenpluginapi/PLU_types.h
    branches/soc-2007-mosani/source/blender/render/render_api/aqsis_plugin/aqsis.c
    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/include/RenderAPI_internal.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/blenpluginapi/PLU_register.h
===================================================================
--- branches/soc-2007-mosani/source/blender/blenpluginapi/PLU_register.h	2007-07-25 16:42:45 UTC (rev 11369)
+++ branches/soc-2007-mosani/source/blender/blenpluginapi/PLU_register.h	2007-07-26 02:43:00 UTC (rev 11370)
@@ -105,7 +105,6 @@
 	return rv;
 }
 
-
 /* External Renderer Plugin Registration */
 
 static PLU_INLINE plugin_descriptor_t * plugin_register_render_output(
@@ -124,10 +123,7 @@
 	plugin_instance_t* (*load)(plugin_control_t * c),
 	void (*free)(plugin_instance_t* This),
 	
-	void (*setup)( RenderAPI api ),
-	void (*render_frame)( RenderAPI api ),
-	void (*finish)(),
-	void (*abort)()
+	plugin_interface_render_output_t registration
 	){
 	
 	plugin_descriptor_t * rv = plugin_register_private(
@@ -145,10 +141,7 @@
 		load, 
 		free );
 	
-	rv->i.render_out.setup = setup;
-	rv->i.render_out.render_frame = render_frame;
-	rv->i.render_out.finish = finish;
-	rv->i.render_out.abort = abort;
+	rv->i.render_out = registration;
 	
 	return rv;
 }

Modified: branches/soc-2007-mosani/source/blender/blenpluginapi/PLU_types.h
===================================================================
--- branches/soc-2007-mosani/source/blender/blenpluginapi/PLU_types.h	2007-07-25 16:42:45 UTC (rev 11369)
+++ branches/soc-2007-mosani/source/blender/blenpluginapi/PLU_types.h	2007-07-26 02:43:00 UTC (rev 11370)
@@ -406,11 +406,14 @@
 /* External Renderer Plugins: */
 
 typedef struct plugin_interface_render_output_t {
-	int renderer_index;
-	void (*setup)( RenderAPI api );
-	void (*render_frame)( RenderAPI api );
+	void (*setup)( RenderAPI *api );
+	void (*render_frame)( RenderAPI *api );
 	void (*finish)();
 	void (*abort)();
+	
+	char axis[3]; /* 0 = right, 1 = forward, 2 = up
+	                 ex. axis[0] = 1, makes right
+	                 positive x */
 }plugin_interface_render_output_t;
 
 

Modified: branches/soc-2007-mosani/source/blender/render/render_api/aqsis_plugin/aqsis.c
===================================================================
--- branches/soc-2007-mosani/source/blender/render/render_api/aqsis_plugin/aqsis.c	2007-07-25 16:42:45 UTC (rev 11369)
+++ branches/soc-2007-mosani/source/blender/render/render_api/aqsis_plugin/aqsis.c	2007-07-26 02:43:00 UTC (rev 11370)
@@ -4,17 +4,74 @@
 #include <stdio.h>
 #include "plugin.h"
 #include "RenderAPI.h"
+#include "aqsis_helpers.h"
 
-static void setup( RenderAPI api ){}
-static void render_frame( RenderAPI api )
+static void setup( RenderAPI *api )
 {
-	/* Aqsis RIB Export */
-	RenderAPI api2 = api;
-	/* FILE *aqsis_rib = fopen( "aqsis.rib", "w" ); */
-	api->test();
-	/* fclose( aqsis_rib ); */
+	FILE *aqsis_rib = fopen( "aqsis.rib", "w" );
+	fprintf( aqsis_rib, "# Generated by Aqsis Plugin - Aaron Moore\n\n" );
+	fprintf( aqsis_rib, "Display \"aqsis.jpg\" \"framebuffer\" \"rgb\"\n\n" );
+	fprintf( aqsis_rib, "Format 400 300 1\n" );
+	fprintf( aqsis_rib, "Projection \"perspective\" \"fov\" 35\n" );
+	fclose( aqsis_rib );
 }
-static void finish(){}
+static void render_frame( RenderAPI *api )
+{
+	float light_coord[3];
+	RNDLight light;
+	
+	FILE *aqsis_rib = fopen( "aqsis.rib", "a" );
+	fprintf( aqsis_rib, "FrameBegin 1\n" );
+	fprintf( aqsis_rib, "WorldBegin\n\n" );
+	
+	/*
+	fprintf( aqsis_rib, "\t# translate world origin away from camera\n\n" );
+	
+	fprintf( aqsis_rib, "\tRotate -30 .3 0 0\n" );
+	fprintf( aqsis_rib, "\tRotate -45 0 1 0\n" );
+	fprintf( aqsis_rib, "\tTranslate 6 -5 6\n" );
+	*/
+	
+	/* Export Lights */
+	RNDObject object = api->get_objects( api->scene, RND_LIGHT );
+	for( ; api->object_exists( object ); api->object_next( object ) )
+	{
+		if( api->object_get_type( object ) == RND_LIGHT_POINT ){
+			fprintf( aqsis_rib, "\tLightSource \"pointlight\" 1 " );
+			api->object_get_translation( object, light_coord );
+			fprintf( aqsis_rib, "\"from\" [%f %f %f] ",
+				light_coord[0],
+				light_coord[1],
+				light_coord[2] );
+			light = api->object_get_light( object );
+			fprintf( aqsis_rib, "\"intensity\" %f\n", 
+				api->light_get_intensity( light ) );
+		}
+	}
+	
+	/* Export Meshes */
+	object = api->get_objects( api->scene, RND_GEOMETRY );
+	for( ; api->object_exists( object ); api->object_next( object ) )
+	{
+		if( api->object_get_type( object ) == RND_GEOMETRY_POLYGON_MESH ){
+			fprintf( aqsis_rib, "\tAttributeBegin\n" );
+			fprintf( aqsis_rib, "\t\tSurface \"plastic\"\n" );
+			fprintf( aqsis_rib, "\t\tSides 2\n" );
+			transform_object( api, object, aqsis_rib );
+			export_polygons( api, object, aqsis_rib );
+			fprintf( aqsis_rib, "\tAttributeEnd\n" );
+		}
+	}
+	
+	fprintf( aqsis_rib, "WorldEnd\n" );
+	fprintf( aqsis_rib, "FrameEnd\n" );
+	fclose( aqsis_rib );
+}
+static void finish()
+{
+	/* FILE *aqsis_rib = fopen( "aqsis.rib", "a" );
+	fclose( aqsis_rib ); */
+}
 static void abort_callback(){}
 
 plugin_instance_t* init( plugin_control_t *c ){ return NULL; }
@@ -22,6 +79,17 @@
 
 void plugin_query()
 {
+	plugin_interface_render_output_t registration;
+	/* callbacks */
+	registration.setup = setup;
+	registration.render_frame = render_frame;
+	registration.finish = finish;
+	registration.abort_callback;
+	/* axis */
+	registration.right = 'x';
+	registration.front = 'y';
+	registration.up = 'z';
+	
 	plugin_register_render_output(
 		"Aqsis Plugin",
 		"Aqsis",
@@ -31,6 +99,6 @@
 		"14 July 2007",
 		0,
 		init, init, free_renderer,
-		setup, render_frame, finish, abort_callback );
+		registration );
 }
 

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-25 16:42:45 UTC (rev 11369)
+++ branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI.h	2007-07-26 02:43:00 UTC (rev 11370)
@@ -178,10 +178,10 @@
     of the x, y, and z components.
 */
 
-void RND_object_traslation( RNDObject object, float translation[] );
-void RND_object_rotation( RNDObject object, float rotation[] );
-void RND_object_scale( RNDObject object, float scale[] );
-void RND_object_shear( RNDObject object, float shear[] );
+void RND_object_get_translation( RNDObject object, float translation[] );
+void RND_object_get_rotation( RNDObject object, float rotation[] );
+void RND_object_get_scale( RNDObject object, float scale[] );
+void RND_object_get_shear( RNDObject object, float shear[] );
 
 /** Standard object functions */
 
@@ -311,8 +311,9 @@
 	float (*get_clipping_start)( RNDScene scene );
 	float (*get_clipping_end)( RNDScene scene );
 	float (*get_depth_of_field)( RNDScene scene );
-
+	
 	RNDObject (*get_objects)( RNDScene scene, unsigned int type );
+	
 	RNDObject (*get_instanced_objects)( RNDScene scene, unsigned int type );
 	int (*object_is_instance)( RNDObject object );
 
@@ -321,10 +322,10 @@
 	void (*object_get_transformation)( RNDObject object, 
 		float transformation[][4] );
 
-	void (*object_traslation)( RNDObject object, float translation[] );
-	void (*object_rotation)( RNDObject object, float rotation[] );
-	void (*object_scale)( RNDObject object, float scale[] );
-	void (*object_shear)( RNDObject object, float shear[] );
+	void (*object_get_translation)( RNDObject object, float translation[] );
+	void (*object_get_rotation)( RNDObject object, float rotation[] );
+	void (*object_get_scale)( RNDObject object, float scale[] );
+	void (*object_get_shear)( RNDObject object, float shear[] );
 
 	int (*object_exists)( RNDObject object );
 	void (*object_first)( RNDObject object );
@@ -382,9 +383,9 @@
 	void (*vertex_next)( RNDVertex );
 	void (*edge_next)( RNDEdge );
 	void (*face_next)( RNDFace face );
-	void (*index_next)( RNDIndex index ); 
+	void (*index_next)( RNDIndex index );
 };
 
-typedef struct RenderAPI *RenderAPI;
+typedef struct RenderAPI RenderAPI;
 
 #endif

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-25 16:42:45 UTC (rev 11369)
+++ branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI_helpers.h	2007-07-26 02:43:00 UTC (rev 11370)
@@ -76,8 +76,8 @@
  *  source object
  */
 
-RenderAPI RenderAPI_create( Scene *scene );
-void RenderAPI_free( RenderAPI api );
+void RenderAPI_create( RenderAPI *api, Scene *scene );
+void RenderAPI_free( RenderAPI *api );
 
 RNDScene RenderAPI_create_scene( Scene *scene );
 void RenderAPI_free_scene( RNDScene scene );

Modified: branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI_internal.h
===================================================================
--- branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI_internal.h	2007-07-25 16:42:45 UTC (rev 11369)
+++ branches/soc-2007-mosani/source/blender/render/render_api/include/RenderAPI_internal.h	2007-07-26 02:43:00 UTC (rev 11370)
@@ -1,4 +1,4 @@
-/**
+/*
  * RenderAPI_internal.h, 4 June 2007, mosani
  *
  * ***** BEGIN GPL LICENSE BLOCK *****
@@ -27,7 +27,7 @@
 /**
  * @file RenderAPI_internal.h
  *
- * This file contains functions for interacting with the render API
+ * Functions for interacting with the render API 
  * from within blender.
  */
 

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-25 16:42:45 UTC (rev 11369)
+++ branches/soc-2007-mosani/source/blender/render/render_api/source/RND_helpers.c	2007-07-26 02:43:00 UTC (rev 11370)
@@ -34,10 +34,8 @@
  
 void test(){ fprintf( stderr, "yar." ); }
 
-RenderAPI RenderAPI_create( Scene *scene )
+void RenderAPI_create( RenderAPI *api, Scene *scene )
 {
-	struct RenderAPI *api = MEM_mallocN( sizeof(RenderAPI), 
-		"Render Api handler" );
 	api->scene = RenderAPI_create_scene( G.scene );
 	RenderAPI_create_object_indexes( api->scene );
 	
@@ -70,7 +68,7 @@
 	api->get_clipping_start = RND_get_clipping_start;
 	api->get_clipping_end = RND_get_clipping_end;
 	api->get_depth_of_field = RND_get_depth_of_field;
-
+	
 	api->get_objects = RND_get_objects;
 	api->get_instanced_objects = RND_get_instanced_objects;
 	api->object_is_instance = RND_object_is_instance;
@@ -79,10 +77,10 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list