Revision: 23784
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23784
Author:   blendix
Date:     2009-10-12 15:12:45 +0200 (Mon, 12 Oct 2009)

Log Message:
-----------
Bugfix: texture nodes header was still showing wrong texture
when using node materials.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_texture.h
    trunk/blender/source/blender/blenkernel/intern/texture.c
    trunk/blender/source/blender/makesrna/intern/rna_brush.c
    trunk/blender/source/blender/makesrna/intern/rna_lamp.c
    trunk/blender/source/blender/makesrna/intern/rna_material.c
    trunk/blender/source/blender/makesrna/intern/rna_world.c

Modified: trunk/blender/source/blender/blenkernel/BKE_texture.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_texture.h       2009-10-12 
12:54:08 UTC (rev 23783)
+++ trunk/blender/source/blender/blenkernel/BKE_texture.h       2009-10-12 
13:12:45 UTC (rev 23784)
@@ -75,6 +75,11 @@
 struct Tex *give_current_world_texture(struct World *world);
 struct Tex *give_current_brush_texture(struct Brush *br);
 
+void set_current_brush_texture(struct Brush *br, struct Tex *tex);
+void set_current_world_texture(struct World *wo, struct Tex *tex);
+void set_current_material_texture(struct Material *ma, struct Tex *tex);
+void set_current_lamp_texture(struct Lamp *la, struct Tex *tex);
+
 struct TexMapping *add_mapping(void);
 void init_mapping(struct TexMapping *texmap);
 

Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/texture.c    2009-10-12 
12:54:08 UTC (rev 23783)
+++ trunk/blender/source/blender/blenkernel/intern/texture.c    2009-10-12 
13:12:45 UTC (rev 23784)
@@ -840,6 +840,28 @@
        return tex;
 }
 
+void set_current_lamp_texture(Lamp *la, Tex *newtex)
+{
+       int act= la->texact;
+
+       if(la->mtex[act] && la->mtex[act]->tex)
+               id_us_min(&la->mtex[act]->tex->id);
+
+       if(newtex) {
+               if(!la->mtex[act]) {
+                       la->mtex[act]= add_mtex();
+                       la->mtex[act]->texco= TEXCO_GLOB;
+               }
+               
+               la->mtex[act]->tex= newtex;
+               id_us_plus(&newtex->id);
+       }
+       else if(la->mtex[act]) {
+               MEM_freeN(la->mtex[act]);
+               la->mtex[act]= NULL;
+       }
+}
+
 Tex *give_current_material_texture(Material *ma)
 {
        MTex *mtex= NULL;
@@ -867,6 +889,47 @@
        return tex;
 }
 
+void set_current_material_texture(Material *ma, Tex *newtex)
+{
+       Tex *tex= NULL;
+       bNode *node;
+       
+       if(ma && ma->use_nodes && ma->nodetree) {
+               node= nodeGetActiveID(ma->nodetree, ID_TE);
+
+               if(node) {
+                       tex= (Tex *)node->id;
+                       id_us_min(&tex->id);
+                       node->id= &newtex->id;
+                       id_us_plus(&newtex->id);
+                       ma= NULL;
+               }
+               else {
+                       node= nodeGetActiveID(ma->nodetree, ID_MA);
+                       if(node)
+                               ma= (Material*)node->id;
+               }
+       }
+       if(ma) {
+               int act= (int)ma->texact;
+
+               tex= (ma->mtex[act])? ma->mtex[act]->tex: NULL;
+               id_us_min(&tex->id);
+
+               if(newtex) {
+                       if(!ma->mtex[act])
+                               ma->mtex[act]= add_mtex();
+                       
+                       ma->mtex[act]->tex= newtex;
+                       id_us_plus(&newtex->id);
+               }
+               else if(ma->mtex[act]) {
+                       MEM_freeN(ma->mtex[act]);
+                       ma->mtex[act]= NULL;
+               }
+       }
+}
+
 Tex *give_current_world_texture(World *world)
 {
        MTex *mtex= NULL;
@@ -880,6 +943,28 @@
        return tex;
 }
 
+void set_current_world_texture(World *wo, Tex *newtex)
+{
+       int act= wo->texact;
+
+       if(wo->mtex[act] && wo->mtex[act]->tex)
+               id_us_min(&wo->mtex[act]->tex->id);
+
+       if(newtex) {
+               if(!wo->mtex[act]) {
+                       wo->mtex[act]= add_mtex();
+                       wo->mtex[act]->texco= TEXCO_VIEW;
+               }
+               
+               wo->mtex[act]->tex= newtex;
+               id_us_plus(&newtex->id);
+       }
+       else if(wo->mtex[act]) {
+               MEM_freeN(wo->mtex[act]);
+               wo->mtex[act]= NULL;
+       }
+}
+
 Tex *give_current_brush_texture(Brush *br)
 {
        MTex *mtex= NULL;
@@ -893,6 +978,26 @@
        return tex;
 }
 
+void set_current_brush_texture(Brush *br, Tex *newtex)
+{
+       int act= br->texact;
+
+       if(br->mtex[act] && br->mtex[act]->tex)
+               id_us_min(&br->mtex[act]->tex->id);
+
+       if(newtex) {
+               if(!br->mtex[act])
+                       br->mtex[act]= add_mtex();
+               
+               br->mtex[act]->tex= newtex;
+               id_us_plus(&newtex->id);
+       }
+       else if(br->mtex[act]) {
+               MEM_freeN(br->mtex[act]);
+               br->mtex[act]= NULL;
+       }
+}
+
 /* ------------------------------------------------------------------------- */
 
 EnvMap *BKE_add_envmap(void)

Modified: trunk/blender/source/blender/makesrna/intern/rna_brush.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_brush.c    2009-10-12 
12:54:08 UTC (rev 23783)
+++ trunk/blender/source/blender/makesrna/intern/rna_brush.c    2009-10-12 
13:12:45 UTC (rev 23784)
@@ -65,29 +65,15 @@
        Brush *br= (Brush*)ptr->data;
        Tex *tex;
 
-       tex= (br->mtex[(int)br->texact])? br->mtex[(int)br->texact]->tex: NULL;
+       tex= give_current_brush_texture(br);
        return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex);
 }
 
 static void rna_Brush_active_texture_set(PointerRNA *ptr, PointerRNA value)
 {
        Brush *br= (Brush*)ptr->data;
-       int act= br->texact;
 
-       if(br->mtex[act] && br->mtex[act]->tex)
-               id_us_min(&br->mtex[act]->tex->id);
-
-       if(value.data) {
-               if(!br->mtex[act])
-                       br->mtex[act]= add_mtex();
-               
-               br->mtex[act]->tex= value.data;
-               id_us_plus(&br->mtex[act]->tex->id);
-       }
-       else if(br->mtex[act]) {
-               MEM_freeN(br->mtex[act]);
-               br->mtex[act]= NULL;
-       }
+       set_current_brush_texture(br, value.data);
 }
 
 static void rna_Brush_update(bContext *C, PointerRNA *ptr)

Modified: trunk/blender/source/blender/makesrna/intern/rna_lamp.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_lamp.c     2009-10-12 
12:54:08 UTC (rev 23783)
+++ trunk/blender/source/blender/makesrna/intern/rna_lamp.c     2009-10-12 
13:12:45 UTC (rev 23784)
@@ -69,31 +69,15 @@
        Lamp *la= (Lamp*)ptr->data;
        Tex *tex;
 
-       tex= (la->mtex[(int)la->texact])? la->mtex[(int)la->texact]->tex: NULL;
+       tex= give_current_lamp_texture(la);
        return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex);
 }
 
 static void rna_Lamp_active_texture_set(PointerRNA *ptr, PointerRNA value)
 {
        Lamp *la= (Lamp*)ptr->data;
-       int act= la->texact;
 
-       if(la->mtex[act] && la->mtex[act]->tex)
-               id_us_min(&la->mtex[act]->tex->id);
-
-       if(value.data) {
-               if(!la->mtex[act]) {
-                       la->mtex[act]= add_mtex();
-                       la->mtex[act]->texco= TEXCO_GLOB;
-               }
-               
-               la->mtex[act]->tex= value.data;
-               id_us_plus(&la->mtex[act]->tex->id);
-       }
-       else if(la->mtex[act]) {
-               MEM_freeN(la->mtex[act]);
-               la->mtex[act]= NULL;
-       }
+       set_current_lamp_texture(la, value.data);
 }
 
 static StructRNA* rna_Lamp_refine(struct PointerRNA *ptr)

Modified: trunk/blender/source/blender/makesrna/intern/rna_material.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_material.c 2009-10-12 
12:54:08 UTC (rev 23783)
+++ trunk/blender/source/blender/makesrna/intern/rna_material.c 2009-10-12 
13:12:45 UTC (rev 23784)
@@ -130,29 +130,15 @@
        Material *ma= (Material*)ptr->data;
        Tex *tex;
 
-       tex= (ma->mtex[(int)ma->texact])? ma->mtex[(int)ma->texact]->tex: NULL;
+       tex= give_current_material_texture(ma);
        return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex);
 }
 
 static void rna_Material_active_texture_set(PointerRNA *ptr, PointerRNA value)
 {
        Material *ma= (Material*)ptr->data;
-       int act= ma->texact;
 
-       if(ma->mtex[act] && ma->mtex[act]->tex)
-               id_us_min(&ma->mtex[act]->tex->id);
-
-       if(value.data) {
-               if(!ma->mtex[act])
-                       ma->mtex[act]= add_mtex();
-               
-               ma->mtex[act]->tex= value.data;
-               id_us_plus(&ma->mtex[act]->tex->id);
-       }
-       else if(ma->mtex[act]) {
-               MEM_freeN(ma->mtex[act]);
-               ma->mtex[act]= NULL;
-       }
+       set_current_material_texture(ma, value.data);
 }
 
 static PointerRNA rna_Material_active_node_material_get(PointerRNA *ptr)

Modified: trunk/blender/source/blender/makesrna/intern/rna_world.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_world.c    2009-10-12 
12:54:08 UTC (rev 23783)
+++ trunk/blender/source/blender/makesrna/intern/rna_world.c    2009-10-12 
13:12:45 UTC (rev 23784)
@@ -71,31 +71,15 @@
        World *wo= (World*)ptr->data;
        Tex *tex;
 
-       tex= (wo->mtex[(int)wo->texact])? wo->mtex[(int)wo->texact]->tex: NULL;
+       tex= give_current_world_texture(wo);
        return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex);
 }
 
 static void rna_World_active_texture_set(PointerRNA *ptr, PointerRNA value)
 {
        World *wo= (World*)ptr->data;
-       int act= wo->texact;
 
-       if(wo->mtex[act] && wo->mtex[act]->tex)
-               id_us_min(&wo->mtex[act]->tex->id);
-
-       if(value.data) {
-               if(!wo->mtex[act]) {
-                       wo->mtex[act]= add_mtex();
-                       wo->mtex[act]->texco= TEXCO_VIEW;
-               }
-               
-               wo->mtex[act]->tex= value.data;
-               id_us_plus(&wo->mtex[act]->tex->id);
-       }
-       else if(wo->mtex[act]) {
-               MEM_freeN(wo->mtex[act]);
-               wo->mtex[act]= NULL;
-       }
+       set_current_world_texture(wo, value.data);
 }
 
 static void rna_World_update(bContext *C, PointerRNA *ptr)


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to