Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2005-12-04 17:32:21 +0300
committerTon Roosendaal <ton@blender.org>2005-12-04 17:32:21 +0300
commitaa939b859904fcfad5c6782e14621da74bbf8118 (patch)
treeccf58f615f767fea93ddcfc01988244efdc0c643 /source/blender/src/header_buttonswin.c
parentc2cff1cbcf71634de3aca184c70cc4bd23fe35a8 (diff)
Orange branch feature; Material Layering
(WIP, don't bugs for this in tracker yet please!) - New Panel "Layers" in Material buttons, allows to add unlimited amount of materials on top of each other. - Every Layer is actually just another Material, which gets rendered/shaded (including texture), and then added on top of previous layer with an operation like Mix, Add, Mult, etc. - Layers render fully independent, so bumpmaps are not passed on to next layers. - Per Layer you can set if it influences Diffuse, Specular or Alpha - If a Material returns alpha (like from texture), the alpha value is used for adding the layers too. - New texture "Map To" channel allows to have a texture work on a Layer - Each layer, including basis Material, can be turned on/off individually Notes: - at this moment, the full shading pass happens for each layer, including shadow, AO and raytraced mirror or transparency... - I had to remove old hacks from preview render, which corrected reflected normals for preview texturing. - still needs loadsa testing!
Diffstat (limited to 'source/blender/src/header_buttonswin.c')
-rw-r--r--source/blender/src/header_buttonswin.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/source/blender/src/header_buttonswin.c b/source/blender/src/header_buttonswin.c
index 7b992263bb7..9d8f05aa835 100644
--- a/source/blender/src/header_buttonswin.c
+++ b/source/blender/src/header_buttonswin.c
@@ -62,6 +62,7 @@
#include "BIF_butspace.h"
#include "BKE_armature.h"
+#include "BKE_blender.h"
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
@@ -72,6 +73,7 @@
#include "BSE_headerbuttons.h"
#include "MEM_guardedalloc.h"
+#include "BLI_blenlib.h"
#include "blendef.h"
#include "mydevice.h"
@@ -98,9 +100,12 @@ void free_matcopybuf(void)
if(matcopybuf.ramp_col) MEM_freeN(matcopybuf.ramp_col);
if(matcopybuf.ramp_spec) MEM_freeN(matcopybuf.ramp_spec);
+
matcopybuf.ramp_col= NULL;
matcopybuf.ramp_spec= NULL;
+ BLI_freelistN(&matcopybuf.layers);
+
default_mtex(&mtexcopybuf);
}
@@ -109,6 +114,7 @@ void do_buts_buttons(short event)
static short matcopied=0;
MTex *mtex;
Material *ma;
+ MaterialLayer *ml;
ID id;
int a;
float dx, dy;
@@ -143,9 +149,10 @@ void do_buts_buttons(short event)
break;
case B_MATCOPY:
if(G.buts->lockpoin) {
+ ma= G.buts->lockpoin;
if(matcopied) free_matcopybuf();
- memcpy(&matcopybuf, G.buts->lockpoin, sizeof(Material));
+ memcpy(&matcopybuf, ma, sizeof(Material));
if(matcopybuf.ramp_col) matcopybuf.ramp_col= MEM_dupallocN(matcopybuf.ramp_col);
if(matcopybuf.ramp_spec) matcopybuf.ramp_spec= MEM_dupallocN(matcopybuf.ramp_spec);
@@ -155,12 +162,15 @@ void do_buts_buttons(short event)
matcopybuf.mtex[a]= MEM_dupallocN(mtex);
}
}
+ duplicatelist(&matcopybuf.layers, &ma->layers);
+
matcopied= 1;
}
break;
case B_MATPASTE:
if(matcopied && G.buts->lockpoin) {
ma= G.buts->lockpoin;
+
/* free current mat */
if(ma->ramp_col) MEM_freeN(ma->ramp_col);
if(ma->ramp_spec) MEM_freeN(ma->ramp_spec);
@@ -169,6 +179,10 @@ void do_buts_buttons(short event)
if(mtex && mtex->tex) mtex->tex->id.us--;
if(mtex) MEM_freeN(mtex);
}
+ for(ml= ma->layers.first; ml; ml= ml->next)
+ if(ml->mat) ml->mat->id.us--;
+
+ BLI_freelistN(&ma->layers);
id= (ma->id);
memcpy(G.buts->lockpoin, &matcopybuf, sizeof(Material));
@@ -184,6 +198,11 @@ void do_buts_buttons(short event)
if(mtex->tex) id_us_plus((ID *)mtex->tex);
}
}
+ duplicatelist(&ma->layers, &matcopybuf.layers);
+
+ for(ml= ma->layers.first; ml; ml= ml->next)
+ if(ml->mat) ml->mat->id.us++;
+
BIF_preview_changed(G.buts);
BIF_undo_push("Paste material settings");
scrarea_queue_winredraw(curarea);