[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