[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11543] branches/soc-2007-mosani/source/ blender/render: I fixed the conversion so that the internal render has

Aaron Moore two.a.ron at gmail.com
Sat Aug 11 01:33:13 CEST 2007


Revision: 11543
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11543
Author:   mosani
Date:     2007-08-11 01:33:13 +0200 (Sat, 11 Aug 2007)

Log Message:
-----------
I fixed the conversion so that the internal render has
 sufficient data now to produce results on a basic
 render. In the interest of getting it working I have
 turned of just about everything I could in order to
 debug the most simple case:
   - osa = 0
   - partsx, partsy = 1

So I'm not sure if everything will still work when these
 are turned on, not to mention all the other features, but
 these will be easily added when I'm seeing image data in
 the render window: this is the next step. I should have it
 done in a few hours.

Modified Paths:
--------------
    branches/soc-2007-mosani/source/blender/render/intern/include/render_types.h
    branches/soc-2007-mosani/source/blender/render/intern/include/renderdatabase.h
    branches/soc-2007-mosani/source/blender/render/intern/include/renderpipeline.h
    branches/soc-2007-mosani/source/blender/render/intern/source/RND_convertblender.c
    branches/soc-2007-mosani/source/blender/render/intern/source/RND_initrender.c
    branches/soc-2007-mosani/source/blender/render/intern/source/convertblender.c
    branches/soc-2007-mosani/source/blender/render/intern/source/pipeline.c
    branches/soc-2007-mosani/source/blender/render/intern/source/rendercallbacks.c
    branches/soc-2007-mosani/source/blender/render/intern/source/rendercore.c
    branches/soc-2007-mosani/source/blender/render/intern/source/renderdatabase.c
    branches/soc-2007-mosani/source/blender/render/intern/source/shadeinput.c
    branches/soc-2007-mosani/source/blender/render/intern/source/shadeoutput.c
    branches/soc-2007-mosani/source/blender/render/intern/source/zbuf.c
    branches/soc-2007-mosani/source/blender/render/render_api/include/RND_types.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_camera.c
    branches/soc-2007-mosani/source/blender/render/render_api/source/RND_helpers.c
    branches/soc-2007-mosani/source/blender/render/render_api/source/RND_internal.c
    branches/soc-2007-mosani/source/blender/render/render_api/source/RND_object.c
    branches/soc-2007-mosani/source/blender/render/render_api/source/RND_pass.c
    branches/soc-2007-mosani/source/blender/render/render_api/source/RND_settings.c

Modified: branches/soc-2007-mosani/source/blender/render/intern/include/render_types.h
===================================================================
--- branches/soc-2007-mosani/source/blender/render/intern/include/render_types.h	2007-08-10 18:15:44 UTC (rev 11542)
+++ branches/soc-2007-mosani/source/blender/render/intern/include/render_types.h	2007-08-10 23:33:13 UTC (rev 11543)
@@ -186,8 +186,8 @@
 	ListBase customdata_names;
 
 	/* arena for allocating data for use during render, for
-		* example dynamic TFaces to go in the VlakRen structure.
-		*/
+	 * example dynamic TFaces to go in the VlakRen structure.
+	 */
 	struct MemArena *memArena;
 	
 	/* callbacks */
@@ -209,7 +209,6 @@
 	void (*setup)( RNDScene scene );
 	void (*render_frame)( RNDScene scene, RNDResult result );
 	void (*finish)( RNDScene scene );
-	char axis[3];
 };
 
 /* ------------------------------------------------------------------------- */

Modified: branches/soc-2007-mosani/source/blender/render/intern/include/renderdatabase.h
===================================================================
--- branches/soc-2007-mosani/source/blender/render/intern/include/renderdatabase.h	2007-08-10 18:15:44 UTC (rev 11542)
+++ branches/soc-2007-mosani/source/blender/render/intern/include/renderdatabase.h	2007-08-10 23:33:13 UTC (rev 11543)
@@ -166,7 +166,7 @@
 struct HaloRen *RE_findOrAddHalo(struct Render *re, int nr);
 struct HaloRen *RE_inithalo(struct Render *re, struct Material *ma, float *vec, float *vec1, float *orco, float hasize, 
 					 float vectsize, int seed);
-void RE_addRenderObject(struct Render *re, struct Object *ob, struct Object *par, int index, int sve, int eve, int sfa, int efa);
+void RE_addRenderObject( ListBase *objecttable, struct Object *ob, struct Object *par, int index, int sve, int eve, int sfa, int efa);
 
 float *RE_vertren_get_sticky(struct Render *re, struct VertRen *ver, int verify);
 float *RE_vertren_get_stress(struct Render *re, struct VertRen *ver, int verify);
@@ -213,12 +213,21 @@
 /* Finds the database on the global list */
 RenderDatabase *render_database_find( char *name );
 
+
 /**** Defined in RND_convertblender.c (render frame setup) ****/
 
 void render_database_from_scene( RenderDatabase *db, RNDScene scene );
 void render_database_free( RenderDatabase *database );
 void render_database_add_lamp( RenderDatabase *database, RNDObject object );
 void render_database_insert_polygon_mesh( RenderDatabase *database, RNDObject object );
+void render_database_set_view( RenderDatabase *db, RNDScene *scene, RNDObject *lamp );
+void render_database_project_renderdata( RenderDatabase *db, 
+	void (*projectfunc)(float *, float mat[][4], float *), 
+	int do_pano, float xoffs );
 
+struct VlakRen *render_database_findOrAddVlak( RenderDatabase *db, int nr );
+struct VertRen *render_database_findOrAddVert( RenderDatabase *db, int nr );
+RenderLayer *render_database_get_active_layer( RenderDatabase *db, RenderResult *rr );
+
 #endif /* RENDERDATABASE_H */
 

Modified: branches/soc-2007-mosani/source/blender/render/intern/include/renderpipeline.h
===================================================================
--- branches/soc-2007-mosani/source/blender/render/intern/include/renderpipeline.h	2007-08-10 18:15:44 UTC (rev 11542)
+++ branches/soc-2007-mosani/source/blender/render/intern/include/renderpipeline.h	2007-08-10 23:33:13 UTC (rev 11543)
@@ -39,12 +39,6 @@
 struct RenderLayer *render_get_active_layer(struct Render *re, struct RenderResult *rr);
 float panorama_pixel_rot(struct Render *re);
 
-/* Wrappers for the render control callbacks (these callbacks are overwritten
-    if an external renderer is being used) */
-void Setup( struct Render *re, struct Scene *scene );
-void Render_Frame( struct Render *re );
-void Finish( struct Render *re );
-
 void render_layer_add_pass( struct RenderResult *rr, struct RenderLayer *rl, 
                             int channels, int passtype );
 int set_thread_break( int boolean );

Modified: branches/soc-2007-mosani/source/blender/render/intern/source/RND_convertblender.c
===================================================================
--- branches/soc-2007-mosani/source/blender/render/intern/source/RND_convertblender.c	2007-08-10 18:15:44 UTC (rev 11542)
+++ branches/soc-2007-mosani/source/blender/render/intern/source/RND_convertblender.c	2007-08-10 23:33:13 UTC (rev 11543)
@@ -130,8 +130,6 @@
 #include "renderdatabase.h"
 
 /* helper prototypes */
-static struct VlakRen *render_database_findOrAddVlak( RenderDatabase *db, int nr );
-static struct VertRen *render_database_findOrAddVert( RenderDatabase *db, int nr );
 static void render_database_free_renderdata_tables( RenderDatabase *db );
 static void render_database_free_parts( RenderDatabase *db );
 static void render_database_initialize_parts( RenderDatabase *db, RNDScene scene );
@@ -140,6 +138,7 @@
 {
 	/* variables */
 	RNDObject object;
+	int startface, startvert;
 	
 	/* empty database */
 	db->memArena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE);
@@ -147,10 +146,18 @@
 	db->lights.first = db->lights.last = NULL;
 	db->lampren.first = db->lampren.last = NULL;
 	
+	/* set camera and viewplane */
+	render_database_set_view( db, &scene, NULL );
+	
+	set_node_shader_lamp_loop(shade_material_loop);
+	
 	/* loop through all objects */
 	object = RND_get_objects( scene, RND_ALL );
 	for( ; RND_object_exists( object ); RND_object_next( object ) )
 	{
+		startface = db->totvlak;
+		startvert = db->totvert;
+		
 		switch( RND_object_get_type(object) )
 		{
 			case RND_LIGHT_POINT:
@@ -161,11 +168,25 @@
 				break;
 			default: break;
 		}
+		
+		if( startvert != db->totvert )
+		{
+			RE_addRenderObject( &db->objecttable, NULL, NULL, 0, 
+				startvert, db->totvert, startface, db->totvlak );
+		}
+		
+		if( RND_stop_render() ) break;
 	}
 	
+	if( !RND_stop_render() )
+			render_database_project_renderdata( db, projectverto, 
+				db->r.mode & R_PANORAMA, 0 );
+	
 	/* initialize parts */
-	render_database_initialize_parts( db, scene );
+	if( !RND_stop_render() )
+		render_database_initialize_parts( db, scene );
 }
+
 void render_database_free( RenderDatabase *db )
 {
 	LampRen *lar;
@@ -239,6 +260,9 @@
 	render_lamp->r = color[0] * render_lamp->energy;
 	render_lamp->g = color[1] * render_lamp->energy;
 	render_lamp->b = color[2] * render_lamp->energy;
+	
+	/* put on all layers? */
+	render_lamp->lay= (1<<20) -1;
 }
 
 void render_database_insert_polygon_mesh( RenderDatabase *database, RNDObject object )
@@ -251,6 +275,7 @@
 	VlakRen *render_face;
 	float object_matrix[4][4], normal_length;
 	int i, total_verticies, vertex_offset;
+	extern Material defmaterial;	/* material.c */
 	
 	geometry = RND_object_get_geometry( object );
 	RND_object_get_transformation( object, object_matrix );
@@ -287,7 +312,10 @@
 				case 3: vertren_ptr = &render_face->v4; break; 
 			}
 			if( RND_index_exists( index ) )
-				*vertren_ptr = render_database_findOrAddVert( database, vertex_offset+i );
+			{
+				*vertren_ptr = render_database_findOrAddVert( 
+					database, vertex_offset + RND_index_get_value( index ) );
+			}
 			else *vertren_ptr = 0;
 		}
 		
@@ -303,20 +331,190 @@
 			                               render_face->v2->co, 
 			                               render_face->v1->co, 
 			                               render_face->n );
+		
+		/* give face default material */
+		render_face->mat = &defmaterial;
+		
+		/* put on all layers? */
+		render_face->lay= (1<<20) -1;
 	}
 }
 
+void render_database_set_view( RenderDatabase *db, RNDScene *scene, RNDObject *lamp )
+{
+	rctf viewplane;
+	float pixsize, clipsta, clipend;
+	float lens, shiftx=0.0, shifty=0.0, winside;
+	
+	db->ycor = ( (float)db->r.yasp ) / ( (float)db->r.xasp );
+	/*if(re->r.mode & R_FIELDS)   internal renderer doesn't know what fields are,
+		re->ycor *= 2.0f;         this must be moved. */
+	
+	/**** set main camera settings ****/
+	
+	if( scene ) /* if the scene is set, we are using a camera */ 
+	{
+		if( RND_is_perspective( *scene ) )
+			db->r.mode &= ~R_ORTHO;
+		else
+			db->r.mode |= R_ORTHO;
+			
+		
+		lens = RND_get_lens( *scene );
+		shiftx = 0; /* hard code: render API hole */
+		shifty = 0;
 
-/*****************************************************************************\
- *                                                                           *
- *             H  E  L  P  E  R         F  U  N  C  T  I  O  N  S            *
- *                                                                           *
-\*****************************************************************************/
+		clipsta = RND_get_clipping_start( *scene );
+		clipend = RND_get_clipping_end( *scene );
+	}
+	
+	/**** set view factor and pixel size ****/
+	
+	if( scene && (db->r.mode & R_ORTHO) ) {
+		if( (db->r.xasp * db->winx) >= (db->r.yasp * db->winy) ) {
+			db->viewfac = db->winx;
+		}
+		else {
+			db->viewfac = db->ycor * db->winy;
+		}
+		/* ortho_scale == 1.0 means exact 1 to 1 mapping */
+		pixsize = RND_get_scale( *scene ) / db->viewfac;
+	}
+	else {
+		if( (db->r.xasp * db->winx) >= (db->r.yasp * db->winy) ) {
+			db->viewfac = (db->winx * lens) / 32.0;
+		}
+		else {
+			db->viewfac= db->ycor * (db->winy * lens) / 32.0;
+		}
+		
+		pixsize = clipsta / db->viewfac;
+	}
+	
+	/**** create viewplane ****/
+	
+	/* viewplane fully centered, zbuffer fills in jittered between -.5 and +.5 */
+	winside= MAX2(db->winx, db->winy);
+	viewplane.xmin= -0.5f * (float)db->winx + shiftx * winside; 
+	viewplane.xmax=  0.5f * (float)db->winx + shiftx * winside; 
+	viewplane.ymin= -0.5f * db->ycor * (float)db->winy + shifty * winside;
+	viewplane.ymax=  0.5f * db->ycor * (float)db->winy + shifty * winside;
+	
+	/* the window matrix is used for clipping, and not changed during OSA steps */
+	/* using an offset of +0.5 here would give clip errors on edges */
+	viewplane.xmin *= pixsize;
+	viewplane.xmax *= pixsize;
+	viewplane.ymin *= pixsize;
+	viewplane.ymax *= pixsize;
+	
+	/**** assign settings to database ****/
+	
+	db->viewdx = pixsize;
+	db->viewdy = db->ycor * pixsize;
+	
+	db->viewplane = viewplane;
+	db->clipsta = clipsta;
+	db->clipend = clipend;
 
-/**** render tables ****/
+	if( db->r.mode & R_ORTHO ){
+		i_ortho(
+			db->viewplane.xmin, 
+			db->viewplane.xmax, 
+			db->viewplane.ymin, 
+			db->viewplane.ymax, 
+			db->clipsta, db->clipend, 
+			db->winmat );
+	}else{
+		i_window( 
+			db->viewplane.xmin, 
+			db->viewplane.xmax, 
+			db->viewplane.ymin, 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list