[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27430] trunk/blender/source/blender: Added ability to save and load planar environment maps, rather than only cube.

Matt Ebb matt at mke3.net
Fri Mar 12 03:44:19 CET 2010


Revision: 27430
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27430
Author:   broken
Date:     2010-03-12 03:44:18 +0100 (Fri, 12 Mar 2010)

Log Message:
-----------
Added ability to save and load planar environment maps, rather than only cube.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/render/render_shading.c
    trunk/blender/source/blender/makesrna/intern/rna_texture.c
    trunk/blender/source/blender/render/intern/source/envmap.c

Modified: trunk/blender/source/blender/editors/render/render_shading.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_shading.c	2010-03-12 02:43:36 UTC (rev 27429)
+++ trunk/blender/source/blender/editors/render/render_shading.c	2010-03-12 02:44:18 UTC (rev 27430)
@@ -787,27 +787,35 @@
 	
 	dx= env->cube[1]->x;
 	
-	ibuf = IMB_allocImBuf(3*dx, 2*dx, 24, IB_rectfloat, 0);
+	if (env->type == ENV_CUBE) {
+		ibuf = IMB_allocImBuf(3*dx, 2*dx, 24, IB_rectfloat, 0);
+
+		IMB_rectcpy(ibuf, env->cube[0], 0, 0, 0, 0, dx, dx);
+		IMB_rectcpy(ibuf, env->cube[1], dx, 0, 0, 0, dx, dx);
+		IMB_rectcpy(ibuf, env->cube[2], 2*dx, 0, 0, 0, dx, dx);
+		IMB_rectcpy(ibuf, env->cube[3], 0, dx, 0, 0, dx, dx);
+		IMB_rectcpy(ibuf, env->cube[4], dx, dx, 0, 0, dx, dx);
+		IMB_rectcpy(ibuf, env->cube[5], 2*dx, dx, 0, 0, dx, dx);
+	}
+	else if (env->type == ENV_PLANE) {
+		ibuf = IMB_allocImBuf(dx, dx, 24, IB_rectfloat, 0);
+		IMB_rectcpy(ibuf, env->cube[1], 0, 0, 0, 0, dx, dx);		
+	}
 	
 	if (scene->r.color_mgt_flag & R_COLOR_MANAGEMENT)
 		ibuf->profile = IB_PROFILE_LINEAR_RGB;
 	
-	IMB_rectcpy(ibuf, env->cube[0], 0, 0, 0, 0, dx, dx);
-	IMB_rectcpy(ibuf, env->cube[1], dx, 0, 0, 0, dx, dx);
-	IMB_rectcpy(ibuf, env->cube[2], 2*dx, 0, 0, 0, dx, dx);
-	IMB_rectcpy(ibuf, env->cube[3], 0, dx, 0, 0, dx, dx);
-	IMB_rectcpy(ibuf, env->cube[4], dx, dx, 0, 0, dx, dx);
-	IMB_rectcpy(ibuf, env->cube[5], 2*dx, dx, 0, 0, dx, dx);
-	
-	if (BKE_write_ibuf(scene, ibuf, str, imtype, scene->r.subimtype, scene->r.quality)) 
+	if (BKE_write_ibuf(scene, ibuf, str, imtype, scene->r.subimtype, scene->r.quality)) {
 		retval = OPERATOR_FINISHED;
+	}
 	else {
 		BKE_reportf(op->reports, RPT_ERROR, "Error saving environment map to %s.", str);
 		retval = OPERATOR_CANCELLED;
 	}
+	
 	IMB_freeImBuf(ibuf);
 	ibuf = NULL;
-
+	
 	return retval;
 }
 
@@ -862,8 +870,6 @@
 		return 0;
 	if (!tex->env || !tex->env->ok)
 		return 0;
-	if (tex->env->type==ENV_PLANE) 
-		return 0;
 	if (tex->env->cube[1]==NULL)
 		return 0;
 	
@@ -938,7 +944,8 @@
 	Tex *tex;
 	
 	for (tex=bmain->tex.first; tex; tex=tex->id.next)
-		BKE_free_envmapdata(tex->env);
+		if (tex->env)
+			BKE_free_envmapdata(tex->env);
 	
 	WM_event_add_notifier(C, NC_TEXTURE|NA_EDITED, tex);
 	

Modified: trunk/blender/source/blender/makesrna/intern/rna_texture.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_texture.c	2010-03-12 02:43:36 UTC (rev 27429)
+++ trunk/blender/source/blender/makesrna/intern/rna_texture.c	2010-03-12 02:44:18 UTC (rev 27430)
@@ -349,6 +349,16 @@
 	return item;
 }
 
+static void rna_Envmap_source_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+	Tex *tex= ptr->id.data;
+	
+	if (tex->env)
+		BKE_free_envmapdata(tex->env);
+	
+	rna_Texture_update(bmain, scene, ptr);
+}
+
 static PointerRNA rna_PointDensity_psys_get(PointerRNA *ptr)
 {
 	PointDensity *pd= ptr->data;
@@ -738,7 +748,7 @@
 	RNA_def_property_enum_sdna(prop, NULL, "stype");
 	RNA_def_property_enum_items(prop, prop_source_items);
 	RNA_def_property_ui_text(prop, "Source", "");
-	RNA_def_property_update(prop, 0, "rna_Texture_update");
+	RNA_def_property_update(prop, 0, "rna_Envmap_source_update");
 
 	prop= RNA_def_property(srna, "viewpoint_object", PROP_POINTER, PROP_NONE);
 	RNA_def_property_pointer_sdna(prop, NULL, "object");

Modified: trunk/blender/source/blender/render/intern/source/envmap.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/envmap.c	2010-03-12 02:43:36 UTC (rev 27429)
+++ trunk/blender/source/blender/render/intern/source/envmap.c	2010-03-12 02:44:18 UTC (rev 27430)
@@ -74,15 +74,23 @@
 	
 	dx= ibuf->y;
 	dx/= 2;
-	if(3*dx != ibuf->x) {
+	if (3*dx == ibuf->x) {
+		env->type = ENV_CUBE;
+	} else if (ibuf->x == ibuf->y) {
+		env->type = ENV_PLANE;
+	} else {
 		printf("Incorrect envmap size\n");
 		env->ok= 0;
 		env->ima->ok= 0;
+		return;
 	}
-	else {
+	
+	if (env->type == ENV_CUBE) {
 		for(part=0; part<6; part++) {
 			env->cube[part]= IMB_allocImBuf(dx, dx, 24, IB_rect|IB_rectfloat, 0);
 		}
+		IMB_float_from_rect(ibuf);
+		
 		IMB_rectcpy(env->cube[0], ibuf, 
 			0, 0, 0, 0, dx, dx);
 		IMB_rectcpy(env->cube[1], ibuf, 
@@ -97,6 +105,12 @@
 			0, 0, 2*dx, dx, dx, dx);
 		env->ok= ENV_OSA;
 	}
+	else { /* ENV_PLANE */
+		env->cube[1]= IMB_dupImBuf(ibuf);
+		IMB_float_from_rect(env->cube[1]);
+		
+		env->ok= ENV_OSA;
+	}
 }
 
 /* ------------------------------------------------------------------------- */
@@ -658,10 +672,11 @@
 		texres->tin= 0.0;
 		return 0;
 	}
+	
 	if(env->stype==ENV_LOAD) {
 		env->ima= tex->ima;
 		if(env->ima && env->ima->ok) {
-			if(env->cube[0]==NULL) {
+			if(env->cube[1]==NULL) {
 				ImBuf *ibuf= BKE_image_get_ibuf(env->ima, NULL);
 				if(ibuf)
 					envmap_split_ima(env, ibuf);
@@ -672,7 +687,6 @@
 	}
 
 	if(env->ok==0) {
-		
 		texres->tin= 0.0;
 		return 0;
 	}





More information about the Bf-blender-cvs mailing list