Fix some issues with showing the current textures when using
[blender.git] / source / blender / blenkernel / intern / texture.c
index 3b8ae9a6c7f56ab29e242a7dc025789985306bd6..f09abf93bb847445c2e78f685514027ab315e90f 100644 (file)
@@ -809,72 +809,90 @@ void autotexname(Tex *tex)
 
 /* ------------------------------------------------------------------------- */
 
-Tex *give_current_texture(Object *ob, int act)
+Tex *give_current_object_texture(Object *ob)
 {
-       Material ***matarar, *ma;
-       Lamp *la = 0;
-       MTex *mtex = 0;
-       Tex *tex = 0;
-       bNode *node;
+       Material *ma;
+       Tex *tex= NULL;
        
        if(ob==0) return 0;
        if(ob->totcol==0 && !(ob->type==OB_LAMP)) return 0;
        
        if(ob->type==OB_LAMP) {
-               la=(Lamp *)ob->data;
-               if(la) {
-                       mtex= la->mtex[(int)(la->texact)];
-                       if(mtex) tex= mtex->tex;
-               }
+               tex= give_current_lamp_texture(ob->data);
        } else {
-               if(act>ob->totcol) act= ob->totcol;
-               else if(act==0) act= 1;
-               
-               if(ob->matbits[act-1]) {        /* in object */
-                       ma= ob->mat[act-1];
-               }
-               else {                                                          /* in data */
-                       matarar= give_matarar(ob);
-                       
-                       if(matarar && *matarar) ma= (*matarar)[act-1];
-                       else ma= 0;
-               }
+               ma= give_current_material(ob, ob->actcol);
+               tex= give_current_material_texture(ma);
+       }
+       
+       return tex;
+}
 
-               if(ma && ma->use_nodes && ma->nodetree) {
-                       node= nodeGetActiveID(ma->nodetree, ID_TE);
+Tex *give_current_lamp_texture(Lamp *la)
+{
+       MTex *mtex= NULL;
+       Tex *tex= NULL;
 
-                       if(node) {
-                               tex= (Tex *)node->id;
-                               ma= NULL;
-                       }
-                       else {
-                               node= nodeGetActiveID(ma->nodetree, ID_MA);
-                               if(node)
-                                       ma= (Material*)node->id;
-                       }
+       if(la) {
+               mtex= la->mtex[(int)(la->texact)];
+               if(mtex) tex= mtex->tex;
+       }
+
+       return tex;
+}
+
+Tex *give_current_material_texture(Material *ma)
+{
+       MTex *mtex= NULL;
+       Tex *tex= NULL;
+       bNode *node;
+       
+       if(ma && ma->use_nodes && ma->nodetree) {
+               node= nodeGetActiveID(ma->nodetree, ID_TE);
+
+               if(node) {
+                       tex= (Tex *)node->id;
+                       ma= NULL;
                }
-               if(ma) {
-                       mtex= ma->mtex[(int)(ma->texact)];
-                       if(mtex) tex= mtex->tex;
+               else {
+                       node= nodeGetActiveID(ma->nodetree, ID_MA);
+                       if(node)
+                               ma= (Material*)node->id;
                }
        }
+       if(ma) {
+               mtex= ma->mtex[(int)(ma->texact)];
+               if(mtex) tex= mtex->tex;
+       }
        
        return tex;
 }
 
-Tex *give_current_world_texture(Scene *scene)
+Tex *give_current_world_texture(World *world)
 {
-       MTex *mtex = 0;
-       Tex *tex = 0;
+       MTex *mtex= NULL;
+       Tex *tex= NULL;
        
-       if(!(scene->world)) return 0;
+       if(!world) return 0;
        
-       mtex= scene->world->mtex[(int)(scene->world->texact)];
+       mtex= world->mtex[(int)(world->texact)];
        if(mtex) tex= mtex->tex;
        
        return tex;
 }
 
+Tex *give_current_brush_texture(Brush *br)
+{
+       MTex *mtex= NULL;
+       Tex *tex= NULL;
+
+       if(br) {
+               mtex= br->mtex[(int)(br->texact)];
+               if(mtex) tex= mtex->tex;
+       }
+
+       return tex;
+}
+
 /* ------------------------------------------------------------------------- */
 
 EnvMap *BKE_add_envmap(void)