Added Copy/Paste 'mapping' options for World/Lamp buttons.

Also: moved render defines from scene to render module itself.
This commit is contained in:
Ton Roosendaal
2005-12-03 12:55:35 +00:00
parent 8a84a957f2
commit 8cb14867b0
6 changed files with 161 additions and 57 deletions

View File

@@ -155,6 +155,8 @@ void test_idbutton_cb(void *namev, void *arg2_unused);
#define B_SBUFF 1104
#define B_SHADBUF 1105
#define B_SHADRAY 1106
#define B_LMTEXPASTE 1107
#define B_LMTEXCOPY 1108
/* *********************** */
#define B_MATBUTS 1300
@@ -178,6 +180,7 @@ void test_idbutton_cb(void *namev, void *arg2_unused);
/* yafray: material preset menu event */
#define B_MAT_YF_PRESET 1217
/* *********************** */
#define B_TEXBUTS 1400
@@ -249,6 +252,8 @@ void test_idbutton_cb(void *namev, void *arg2_unused);
#define B_TEXCLEARWORLD 1501
#define B_COLHOR 1502
#define B_COLZEN 1503
#define B_WMTEXPASTE 1504
#define B_WMTEXCOPY 1505
/* *********************** */

View File

@@ -407,33 +407,6 @@ typedef struct Scene {
#define R_RADHDR 21
#define R_TIFF 22
/* **************** RENDER ********************* */
/* mode flag is same as for renderdata */
/* flag */
#define R_ZTRA 1
#define R_HALO 2
#define R_SEC_FIELD 4
#define R_LAMPHALO 8
#define R_RENDERING 16
#define R_ANIMRENDER 32
#define R_REDRAW_PRV 64
/* vlakren->flag (vlak = face in dutch) char!!! */
#define R_SMOOTH 1
#define R_VISIBLE 2
/* strand flag, means special handling */
#define R_STRAND 4
#define R_NOPUNOFLIP 8
#define R_FULL_OSA 16
#define R_FACE_SPLIT 32
/* Tells render to divide face other way. */
#define R_DIVIDE_24 64
/* vertex normals are tangent or view-corrected vector, for hair strands */
#define R_TANGENT 128
/* vertren->texofs (texcoordinate offset relative to vertren->orco */
#define R_UVOFS3 1
/* **************** SCENE ********************* */
#define RAD_PHASE_PATCHES 1
#define RAD_PHASE_FACES 2

View File

@@ -194,9 +194,9 @@ typedef struct VertRen
float *orco;
float *sticky;
void *svert; /* smooth vert, only used during initrender */
short clip, texofs; /* texofs= flag */
float accum; /* accum for radio weighting, and for strand texco static particles */
short clip;
short flag; /* in use for clipping ztra parts */
float accum; /* accum for radio weighting, and for strand texco static particles */
} VertRen;
/* ------------------------------------------------------------------------- */
@@ -313,6 +313,34 @@ typedef struct LampRen
struct MTex *mtex[MAX_MTEX];
} LampRen;
/* **************** defines ********************* */
/* mode flag is same as for renderdata */
/* flag */
#define R_ZTRA 1
#define R_HALO 2
#define R_SEC_FIELD 4
#define R_LAMPHALO 8
#define R_RENDERING 16
#define R_ANIMRENDER 32
#define R_REDRAW_PRV 64
/* vlakren->flag (vlak = face in dutch) char!!! */
#define R_SMOOTH 1
#define R_VISIBLE 2
/* strand flag, means special handling */
#define R_STRAND 4
#define R_NOPUNOFLIP 8
#define R_FULL_OSA 16
#define R_FACE_SPLIT 32
/* Tells render to divide face other way. */
#define R_DIVIDE_24 64
/* vertex normals are tangent or view-corrected vector, for hair strands */
#define R_TANGENT 128
#endif /* RENDER_TYPES_H */

View File

@@ -113,10 +113,11 @@ void calc_view_vector(float *view, float x, float y)
}
}
#if 0
static void fogcolor(float *colf, float *rco, float *view)
{
float alpha, stepsize, dist, hor[3], zen[3], vec[3], dview[3];
float accum[4]={0.0f, 0.0f, 0.0f, 0.0f}, div=0.0f;
float alpha, stepsize, startdist, dist, hor[4], zen[3], vec[3], dview[3];
float div=0.0f, distfac;
hor[0]= R.wrld.horr; hor[1]= R.wrld.horg; hor[2]= R.wrld.horb;
zen[0]= R.wrld.zenr; zen[1]= R.wrld.zeng; zen[2]= R.wrld.zenb;
@@ -130,30 +131,29 @@ static void fogcolor(float *colf, float *rco, float *view)
dview[0]= view[0]/(stepsize*div);
dview[1]= view[1]/(stepsize*div);
dview[2]= -stepsize;
if(G.rt) printf("\n");
for(dist= -rco[2]; dist>R.wrld.miststa; dist-= stepsize) {
startdist= -rco[2] + BLI_frand();
for(dist= startdist; dist>R.wrld.miststa; dist-= stepsize) {
hor[0]= R.wrld.horr; hor[1]= R.wrld.horg; hor[2]= R.wrld.horb;
alpha= 1.0f;
do_sky_tex(vec, vec, NULL, hor, zen, &alpha);
if(G.rt) printf("dist %f ", dist);
if(G.rt) printvecf("vec", vec);
accum[3]= (dist-R.wrld.miststa)/R.wrld.mistdist;
if(G.rt) printf("accum %f\n", accum[3]);
accum[3]= hor[0]*accum[3];
distfac= (dist-R.wrld.miststa)/R.wrld.mistdist;
hor[3]= hor[0]*distfac*distfac;
/* premul! */
accum[0]= hor[0]*accum[3];
accum[1]= hor[1]*accum[3];
accum[2]= hor[2]*accum[3];
addAlphaOverFloat(colf, accum);
alpha= hor[3];
hor[0]= hor[0]*alpha;
hor[1]= hor[1]*alpha;
hor[2]= hor[2]*alpha;
addAlphaOverFloat(colf, hor);
VECSUB(vec, vec, dview);
}
}
}
#endif
float mistfactor(float zcor, float *co) /* dist en height, return alpha */
{
@@ -2375,11 +2375,6 @@ void *shadepixel(float x, float y, int z, int facenr, int mask, float *col, floa
}
}
/* FOG */
if(0) {//(R.wrld.mode & WO_MIST) && (shi.mat->mode & MA_NOMIST)==0 ) {
fogcolor(col, shi.co, shi.view);
}
/* MIST */
if((R.wrld.mode & WO_MIST) && (shi.mat->mode & MA_NOMIST)==0 ) {
if(R.r.mode & R_ORTHO)

View File

@@ -74,6 +74,35 @@
/* ------------------------------------------------------------------------- */
#if 0
/* proposal for more dynamic allocation of options for render vertices, so we dont
have to reserve this space inside vertices */
typedef struct VertTableNode {
VertRen *vert;
float *rad;
float *sticky;
float *strand;
float *tangent;
float *stress;
} VertTableNode;
#define RE_STICKY_ELEMS 3
float *RE_vertren_get_sticky(VertRen *ver, int verify)
{
float *sticky;
int a= ver->index>>8;
sticky= R.blove[a].sticky;
if(sticky==NULL) {
if(verify)
sticky= R.blove[a].sticky= MEM_mallocN(RE_STICKY_ELEMS*sizeof(float), "sticky table");
else
return NULL;
}
sticky+= (nr & 255)*RE_STICKY_ELEMS;
}
#endif
VertRen *RE_findOrAddVert(int nr)
{
VertRen *v, **temp;

View File

@@ -111,12 +111,9 @@ int vergcband(const void *, const void *);
void save_env(char *);
void drawcolorband(ColorBand *, float , float , float , float );
static MTex mtexcopybuf;
static MTex emptytex;
static int packdummy = 0;
static char *mapto_blendtype_pup(void)
{
static char string[1024];
@@ -1726,6 +1723,8 @@ static void radio_panel_render(Radio *rad)
void do_worldbuts(unsigned short event)
{
static short mtexcopied=0;
static MTex mtexcopybuf;
World *wrld;
MTex *mtex;
@@ -1743,6 +1742,35 @@ void do_worldbuts(unsigned short event)
BIF_preview_changed(G.buts);
}
break;
case B_WMTEXCOPY:
wrld= G.buts->lockpoin;
if(wrld && wrld->mtex[(int)wrld->texact] ) {
mtex= wrld->mtex[(int)wrld->texact];
if(mtex->tex==0) {
error("No texture available");
}
else {
memcpy(&mtexcopybuf, wrld->mtex[(int)wrld->texact], sizeof(MTex));
mtexcopied= 1;
}
}
break;
case B_WMTEXPASTE:
wrld= G.buts->lockpoin;
if(wrld && mtexcopied && mtexcopybuf.tex) {
if(wrld->mtex[(int)wrld->texact]==0 )
wrld->mtex[(int)wrld->texact]= MEM_mallocN(sizeof(MTex), "mtex");
else if(wrld->mtex[(int)wrld->texact]->tex)
wrld->mtex[(int)wrld->texact]->tex->id.us--;
memcpy(wrld->mtex[(int)wrld->texact], &mtexcopybuf, sizeof(MTex));
id_us_plus((ID *)mtexcopybuf.tex);
BIF_undo_push("Paste mapping settings");
BIF_preview_changed(G.buts);
scrarea_queue_winredraw(curarea);
}
break;
}
}
@@ -1841,7 +1869,7 @@ static void world_panel_texture(World *wrld)
uiDefBut(block, TEX, B_IDNAME, "TE:", 100,160,200,19, id->name+2, 0.0, 18.0, 0, 0, "Displays name of the texture block: click to change");
sprintf(str, "%d", id->us);
uiDefBut(block, BUT, 0, str, 196,140,21,19, 0, 0, 0, 0, 0, "Displays number of users of texture: click to make single user");
uiDefIconBut(block, BUT, B_AUTOTEXNAME, ICON_AUTO, 279,140,21,19, 0, 0, 0, 0, 0, "Auto-assigns name to texture");
uiDefIconBut(block, BUT, B_AUTOTEXNAME, ICON_AUTO, 220,140,21,19, 0, 0, 0, 0, 0, "Auto-assigns name to texture");
if(id->lib) {
if(wrld->id.lib) uiDefIconBut(block, BUT, 0, ICON_DATALIB, 219,140,21,19, 0, 0, 0, 0, 0, "");
else uiDefIconBut(block, BUT, 0, ICON_PARLIB, 219,140,21,19, 0, 0, 0, 0, 0, "");
@@ -1854,7 +1882,11 @@ static void world_panel_texture(World *wrld)
uiBlockSetCol(block, TH_AUTO);
/* copy/paste */
uiBlockBeginAlign(block);
uiDefIconBut(block, BUT, B_WMTEXCOPY, ICON_COPYUP, 250,140,25,19, 0, 0, 0, 0, 0, "Copies the mapping settings to the buffer");
uiDefIconBut(block, BUT, B_WMTEXPASTE, ICON_PASTEUP,275,140,25,19, 0, 0, 0, 0, 0, "Pastes the mapping settings from the buffer");
/* TEXCO */
uiBlockBeginAlign(block);
uiDefButS(block, ROW, B_MATPRV, "View", 100,110,100,20, &(mtex->texco), 4.0, (float)TEXCO_VIEW, 0, 0, "Uses view vector for the texture coordinates");
@@ -2051,6 +2083,8 @@ static void world_panel_preview(World *wrld)
void do_lampbuts(unsigned short event)
{
static short mtexcopied=0;
static MTex mtexcopybuf;
Lamp *la;
MTex *mtex;
@@ -2094,6 +2128,36 @@ void do_lampbuts(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWVIEW3D, 0);
break;
case B_LMTEXCOPY:
la= G.buts->lockpoin;
if(la && la->mtex[(int)la->texact] ) {
mtex= la->mtex[(int)la->texact];
if(mtex->tex==0) {
error("No texture available");
}
else {
memcpy(&mtexcopybuf, la->mtex[(int)la->texact], sizeof(MTex));
mtexcopied= 1;
}
}
break;
case B_LMTEXPASTE:
la= G.buts->lockpoin;
if(la && mtexcopied && mtexcopybuf.tex) {
if(la->mtex[(int)la->texact]==0 )
la->mtex[(int)la->texact]= MEM_mallocN(sizeof(MTex), "mtex");
else if(la->mtex[(int)la->texact]->tex)
la->mtex[(int)la->texact]->tex->id.us--;
memcpy(la->mtex[(int)la->texact], &mtexcopybuf, sizeof(MTex));
id_us_plus((ID *)mtexcopybuf.tex);
BIF_undo_push("Paste mapping settings");
BIF_preview_changed(G.buts);
scrarea_queue_winredraw(curarea);
}
break;
}
if(event) freefastshade();
@@ -2190,7 +2254,7 @@ static void lamp_panel_texture(Object *ob, Lamp *la)
uiDefBut(block, TEX, B_IDNAME, "TE:", 100,160,200,19, id->name+2, 0.0, 18.0, 0, 0, "Displays name of the texture block: click to change");
sprintf(str, "%d", id->us);
uiDefBut(block, BUT, 0, str, 196,140,21,19, 0, 0, 0, 0, 0, "Displays number of users of texture: click to make single user");
uiDefIconBut(block, BUT, B_AUTOTEXNAME, ICON_AUTO, 241,140,21,19, 0, 0, 0, 0, 0, "Auto-assigns name to texture");
uiDefIconBut(block, BUT, B_AUTOTEXNAME, ICON_AUTO, 221,140,21,19, 0, 0, 0, 0, 0, "Auto-assigns name to texture");
if(id->lib) {
if(la->id.lib) uiDefIconBut(block, BUT, 0, ICON_DATALIB, 219,140,21,19, 0, 0, 0, 0, 0, "");
else uiDefIconBut(block, BUT, 0, ICON_PARLIB, 219,140,21,19, 0, 0, 0, 0, 0, "");
@@ -2201,6 +2265,11 @@ static void lamp_panel_texture(Object *ob, Lamp *la)
else
uiDefButS(block, TOG, B_LTEXBROWSE, "Add New" ,100, 160, 200, 19, &(G.buts->texnr), -1.0, 32767.0, 0, 0, "Adds a new texture datablock");
/* copy/paste */
uiBlockBeginAlign(block);
uiDefIconBut(block, BUT, B_LMTEXCOPY, ICON_COPYUP, 250,140,25,19, 0, 0, 0, 0, 0, "Copies the mapping settings to the buffer");
uiDefIconBut(block, BUT, B_LMTEXPASTE, ICON_PASTEUP, 275,140,25,19, 0, 0, 0, 0, 0, "Pastes the mapping settings from the buffer");
/* TEXCO */
uiBlockSetCol(block, TH_AUTO);
uiBlockBeginAlign(block);
@@ -2490,6 +2559,7 @@ static void lamp_panel_preview(Object *ob, Lamp *la)
void do_matbuts(unsigned short event)
{
static short mtexcopied=0;
static MTex mtexcopybuf;
Material *ma;
MTex *mtex;
@@ -2612,7 +2682,11 @@ void do_matbuts(unsigned short event)
case B_MTEXPASTE:
ma= G.buts->lockpoin;
if(ma && mtexcopied && mtexcopybuf.tex) {
if(ma->mtex[(int)ma->texact]==0 ) ma->mtex[(int)ma->texact]= MEM_mallocN(sizeof(MTex), "mtex");
if(ma->mtex[(int)ma->texact]==0 )
ma->mtex[(int)ma->texact]= MEM_mallocN(sizeof(MTex), "mtex");
else if(ma->mtex[(int)ma->texact]->tex)
ma->mtex[(int)ma->texact]->tex->id.us--;
memcpy(ma->mtex[(int)ma->texact], &mtexcopybuf, sizeof(MTex));
id_us_plus((ID *)mtexcopybuf.tex);