diff options
author | Ton Roosendaal <ton@blender.org> | 2005-11-23 18:20:45 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2005-11-23 18:20:45 +0300 |
commit | 622f9147769a011a1fcff9b6aa683e674b111838 (patch) | |
tree | 22dca88f98c1c7191a2f8c0563c7dcb07048d77a /source/blender | |
parent | 65a824879c86eeb265c21704ab773589c66aafd6 (diff) |
New stuff & fixes in Blender OSA filtering.
While investigating alternative filters (Mitchell), I found two small
errors in the Gauss code, it clipped wrong and multiplied wrong, causing
settings other than filter size 1.0 to not work properly.
Took the last-minute liberty to add more filter types in Blender too.
Also wrote an extensive log about how sampling & filtering in Blender
works.
http://www.blender3d.org/cms/Samples_and_Filtering.723.0.html
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 49 | ||||
-rw-r--r-- | source/blender/imbuf/IMB_imbuf.h | 3 | ||||
-rw-r--r-- | source/blender/imbuf/intern/dynlibtiff.c | 12 | ||||
-rw-r--r-- | source/blender/include/butspace.h | 8 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_scene_types.h | 14 | ||||
-rw-r--r-- | source/blender/python/api2_2x/sceneRender.c | 4 | ||||
-rw-r--r-- | source/blender/render/extern/include/render_types.h | 3 | ||||
-rw-r--r-- | source/blender/render/intern/source/envmap.c | 3 | ||||
-rw-r--r-- | source/blender/render/intern/source/initrender.c | 119 | ||||
-rw-r--r-- | source/blender/render/intern/source/rendercore.c | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/vanillaRenderPipe.c | 2 | ||||
-rw-r--r-- | source/blender/src/buttons_scene.c | 7 | ||||
-rw-r--r-- | source/blender/src/drawview.c | 38 | ||||
-rwxr-xr-x | source/blender/src/transform_constraints.c | 1 | ||||
-rwxr-xr-x | source/blender/src/transform_generics.c | 1 | ||||
-rw-r--r-- | source/blender/src/usiblender.c | 2 |
16 files changed, 199 insertions, 69 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 9490a4ca5ce..e22df9d66d9 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -5018,6 +5018,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) Scene *sce= main->scene.first; Camera *cam= main->camera.first; Material *ma= main->mat.first; + int set_passepartout= 0; /* deformflag is local in modifier now */ for(ob=main->object.first; ob; ob= ob->id.next) { @@ -5040,33 +5041,37 @@ static void do_versions(FileData *fd, Library *lib, Main *main) if (arm->ghostsize==0) arm->ghostsize=1; } - while(sce) { + for(;sce;sce= sce->id.next) { /* make 'innervert' the default subdivide type, for backwards compat */ sce->toolsettings->cornertype=1; - while(cam) { - /* convert the passepartout scene flag to a camera flag */ - if(sce->r.scemode & R_PASSEPARTOUT) { - cam->flag |= CAM_SHOWPASSEPARTOUT; - /* now disable it from the scene*/ - sce->r.scemode &= ~R_PASSEPARTOUT; - } - - /* make sure old cameras have title safe on */ - - /* *** to be uncommented before 2.40 release! *** */ - /* - if (!(cam->flag & CAM_SHOWTITLESAFE)) - cam->flag |= CAM_SHOWTITLESAFE; - */ - - /* set an appropriate camera passepartout alpha */ - if (!(cam->passepartalpha)) cam->passepartalpha = 0.2f; - - cam= cam->id.next; + if(sce->r.scemode & R_PASSEPARTOUT) { + set_passepartout= 1; + sce->r.scemode &= ~R_PASSEPARTOUT; + } + /* gauss is filter variable now */ + if(sce->r.mode & R_GAUSS) { + sce->r.filtertype= R_FILTER_GAUSS; + sce->r.mode &= ~R_GAUSS; } - sce= sce->id.next; } + + for(;cam; cam= cam->id.next) { + if(set_passepartout) + cam->flag |= CAM_SHOWPASSEPARTOUT; + + /* make sure old cameras have title safe on */ + + /* *** to be uncommented before 2.40 release! *** */ + /* + if (!(cam->flag & CAM_SHOWTITLESAFE)) + cam->flag |= CAM_SHOWTITLESAFE; + */ + + /* set an appropriate camera passepartout alpha */ + if (!(cam->passepartalpha)) cam->passepartalpha = 0.2f; + } + for(; ma; ma= ma->id.next) { if(ma->strand_sta==0.0f) { ma->strand_sta= ma->strand_end= 1.0f; diff --git a/source/blender/imbuf/IMB_imbuf.h b/source/blender/imbuf/IMB_imbuf.h index c16f25a4492..3a0ebbd03ad 100644 --- a/source/blender/imbuf/IMB_imbuf.h +++ b/source/blender/imbuf/IMB_imbuf.h @@ -518,4 +518,7 @@ void quicktime_exit(void); Called by schrijfplaatje() in toets.c */ short imb_savehdr_fromfloat(float *fbuf, char *name, int width, int height); +/* intern/dynlibtiff.c */ +void libtiff_exit(void); + #endif diff --git a/source/blender/imbuf/intern/dynlibtiff.c b/source/blender/imbuf/intern/dynlibtiff.c index 1246b639cb1..17aa0dfbf4f 100644 --- a/source/blender/imbuf/intern/dynlibtiff.c +++ b/source/blender/imbuf/intern/dynlibtiff.c @@ -62,16 +62,16 @@ * LOCAL DEFINITIONS * *********************/ PILdynlib *libtiff = NULL; -void libtiff_loadlibtiff(); +void libtiff_loadlibtiff(void); void* libtiff_findsymbol(char*); -int libtiff_load_symbols(); +int libtiff_load_symbols(void); /************************** * LIBRARY INITIALIZATION * **************************/ -void libtiff_loadlibtiff() +void libtiff_loadlibtiff(void) { char *filename; libtiff = NULL; @@ -111,7 +111,7 @@ void *libtiff_findsymbol(char *name) return symbol; } -void libtiff_init() +void libtiff_init(void) { if (libtiff != NULL) { printf("libtiff_init: Attempted to load libtiff twice!\n"); @@ -121,7 +121,7 @@ void libtiff_init() G.have_libtiff = ((libtiff != NULL) && (libtiff_load_symbols())); } -void libtiff_exit() +void libtiff_exit(void) { if (libtiff != NULL) { PIL_dynlib_close(libtiff); @@ -130,7 +130,7 @@ void libtiff_exit() } -int libtiff_load_symbols() +int libtiff_load_symbols(void) { /* Attempt to load TIFFClientOpen */ libtiff_TIFFClientOpen = libtiff_findsymbol("TIFFClientOpen"); diff --git a/source/blender/include/butspace.h b/source/blender/include/butspace.h index 4cace979965..33a074ba46d 100644 --- a/source/blender/include/butspace.h +++ b/source/blender/include/butspace.h @@ -300,13 +300,9 @@ void test_idbutton_cb(void *namev, void *arg2_unused); #define B_SET_EDGE 1643 #define B_SET_ZBLUR 1644 -#ifdef __NLA /* *********************** */ -enum { - B_ARMATUREBUTS = 1800, - B_POSE = 1701 -}; -#endif +#define B_ARMATUREBUTS 1800 +#define B_POSE 1701 /* *********************** */ #define B_COMMONEDITBUTS 2049 diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index ed038d0d44f..fe54a631bdd 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -117,7 +117,7 @@ typedef struct RenderData { short dimensionspreset; /* for the dimensions presets menu */ - short pad[2]; + short filtertype, pad; /* filter is box, tent, gauss, mitch, etc */ short size, maximsize; /* size in %, max in Kb */ @@ -351,11 +351,20 @@ typedef struct Scene { #define R_MBLUR 0x4000 #define R_UNIFIED 0x8000 #define R_RAYTRACE 0x10000 + /* R_GAUSS is obsolete, but used to retrieve setting from old files */ #define R_GAUSS 0x20000 #define R_FBUF 0x40000 #define R_THREADS 0x80000 #define R_ZBLUR 0x100000 +/* filtertype */ +#define R_FILTER_BOX 0 +#define R_FILTER_TENT 1 +#define R_FILTER_QUAD 2 +#define R_FILTER_CUBIC 3 +#define R_FILTER_CATROM 4 +#define R_FILTER_GAUSS 5 +#define R_FILTER_MITCH 6 /* yafray: renderer flag (not only exclusive to yafray) */ #define R_INTERN 0 @@ -364,7 +373,8 @@ typedef struct Scene { /* scemode */ #define R_DOSEQ 0x0001 #define R_BG_RENDER 0x0002 -#define R_PASSEPARTOUT 0x0004 /* keep this for backward compatibility */ + /* passepartout is camera option now, keep this for backward compatibility */ +#define R_PASSEPARTOUT 0x0004 #define R_EXTENSION 0x0010 #define R_OGL 0x0020 diff --git a/source/blender/python/api2_2x/sceneRender.c b/source/blender/python/api2_2x/sceneRender.c index f13cd811b20..4ad440ee476 100644 --- a/source/blender/python/api2_2x/sceneRender.c +++ b/source/blender/python/api2_2x/sceneRender.c @@ -1361,6 +1361,10 @@ PyObject *RenderData_EnableGaussFilter( BPy_RenderData * self, { return M_Render_BitToggleInt( args, R_GAUSS, &self->renderContext->mode ); + + /* note, this now is obsolete (ton) */ + /* we now need a call like RenderData_SetFilter() or so */ + /* choices are listed in DNA_scene_types.h (search filtertype) */ } //------------------------------------RenderData.EnableBorderRender() --- diff --git a/source/blender/render/extern/include/render_types.h b/source/blender/render/extern/include/render_types.h index d65689ab87d..3a09ba133ef 100644 --- a/source/blender/render/extern/include/render_types.h +++ b/source/blender/render/extern/include/render_types.h @@ -82,7 +82,8 @@ typedef struct ShadeInput /* texture coordinates */ float lo[3], gl[3], uv[3], ref[3], orn[3], winco[3], sticky[3], vcol[3], rad[3]; - float vn[3], facenor[3], view[3], refcol[4], displace[3], strand; + float vn[3], facenor[3], view[3], refcol[4], displace[3], strand, tang[3]; + /* dx/dy OSA coordinates */ float dxco[3], dyco[3]; float dxlo[3], dylo[3], dxgl[3], dygl[3], dxuv[3], dyuv[3]; diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c index 33321183e08..f3d8ef94d8e 100644 --- a/source/blender/render/intern/source/envmap.c +++ b/source/blender/render/intern/source/envmap.c @@ -206,7 +206,8 @@ static void envmap_renderdata(EnvMap *env) R.xstart= R.ystart= -R.afmx; R.xend= R.yend= R.xstart+R.rectx-1; - R.r.mode &= ~(R_BORDER | R_PANORAMA | R_ORTHO | R_MBLUR | R_GAUSS); + R.r.mode &= ~(R_BORDER | R_PANORAMA | R_ORTHO | R_MBLUR); + R.r.filtertype= 0; R.r.xparts= R.r.yparts= 1; R.r.bufflag= 0; R.r.size= 100; diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c index f75f2610b93..84eb9d9dfca 100644 --- a/source/blender/render/intern/source/initrender.c +++ b/source/blender/render/intern/source/initrender.c @@ -119,14 +119,61 @@ void init_filt_mask(void); /* ****************** GAMMA, MASKS and LUTS **************** */ +static float filt_quadratic(float x) +{ + if (x < 0.0f) x = -x; + if (x < 0.5f) return 0.75f-(x*x); + if (x < 1.5f) return 0.50f*(x-1.5f)*(x-1.5f); + return 0.0f; +} + + +static float filt_cubic(float x) +{ + float x2= x*x; + + if (x < 0.0f) x = -x; + + if (x < 1.0f) return 0.5*x*x2 - x2 + 2.0f/3.0f; + if (x < 2.0f) return (2.0-x)*(2.0-x)*(2.0-x)/6.0f; + return 0.0f; +} + + +static float filt_catrom(float x) +{ + float x2= x*x; + + if (x < 0.0f) x = -x; + if (x < 1.0f) return 1.5f*x2*x - 2.5f*x2 + 1.0f; + if (x < 2.0f) return -0.5f*x2*x + 2.5*x2 - 4.0f*x + 2.0f; + return 0.0f; +} + +static float filt_mitchell(float x) /* Mitchell & Netravali's two-param cubic */ +{ + float b = 1.0f/3.0f, c = 1.0f/3.0f; + float p0 = ( 6.0 - 2.0*b ) / 6.0; + float p2 = (-18.0 + 12.0*b + 6.0*c) / 6.0; + float p3 = ( 12.0 - 9.0*b - 6.0*c) / 6.0; + float q0 = ( 8.0*b + 24.0*c) / 6.0; + float q1 = ( - 12.0*b - 48.0*c) / 6.0; + float q2 = ( 6.0*b + 30.0*c) / 6.0; + float q3 = ( - b - 6.0*c) / 6.0; + + if (x<-2.0) return 0.0; + if (x<-1.0) return (q0-x*(q1-x*(q2-x*q3))); + if (x< 0.0) return (p0+x*x*(p2-x*p3)); + if (x< 1.0) return (p0+x*x*(p2+x*p3)); + if (x< 2.0) return (q0+x*(q1+x*(q2+x*q3))); + return 0.0; +} + static float calc_weight(float *weight, int i, int j) { - float x, y, dist, totw= 0.0, fac; + float x, y, dist, totw= 0.0; int a; - fac= R.r.gauss*R.r.gauss; - fac*= fac; - for(a=0; a<R.osa; a++) { x= jit[a][0] + i; y= jit[a][1] + j; @@ -134,17 +181,40 @@ static float calc_weight(float *weight, int i, int j) weight[a]= 0.0; - /* gaussian weighting */ - if(R.r.mode & R_GAUSS) { - if(dist<R.r.gauss) { - x = dist*R.r.gauss; - weight[a]= (1.0/exp(x*x) - 1.0/exp(fac)); - } - } - else { + /* Weighting choices */ + switch(R.r.filtertype) { + case R_FILTER_BOX: if(i==0 && j==0) weight[a]= 1.0; + break; + + case R_FILTER_TENT: + if(dist < R.r.gauss) + weight[a]= R.r.gauss - dist; + break; + + case R_FILTER_GAUSS: + x = dist*R.r.gauss; + weight[a]= (1.0/exp(x*x) - 1.0/exp(R.r.gauss*R.r.gauss*2.25)); + break; + + case R_FILTER_MITCH: + weight[a]= filt_mitchell(dist*R.r.gauss); + break; + + case R_FILTER_QUAD: + weight[a]= filt_quadratic(dist*R.r.gauss); + break; + + case R_FILTER_CUBIC: + weight[a]= filt_cubic(dist*R.r.gauss); + break; + + case R_FILTER_CATROM: + weight[a]= filt_catrom(dist*R.r.gauss); + break; + } - + totw+= weight[a]; } @@ -157,8 +227,8 @@ void init_filt_mask(void) { static int firsttime=1; static int lastosa=0; - static int lastgauss=0; - static float lastgamma= 0.0; + static int lastfilter= -1; + static float lastgamma= 0.0f, lastgaussdist=0.0f; float gamma, igamma, flweight[32], fmask[256]; float weight[32], totw, val, *fpx1, *fpx2, *fpy1, *fpy2, *m3, *m4; int i, j, a; @@ -233,10 +303,11 @@ void init_filt_mask(void) } } - if(R.osa && (lastosa!=R.osa || lastgauss != (R.r.mode & R_GAUSS)) ) { + if(R.osa && (lastosa!=R.osa || lastfilter != (R.r.filtertype) || lastgaussdist!=R.r.gauss)) { lastosa= R.osa; - lastgauss= R.r.mode & R_GAUSS; - + lastfilter= R.r.filtertype; + lastgaussdist= R.r.gauss; + val= 1.0/((float)R.osa); for(a=0; a<256; a++) { fmask[a]= ((float)cmask[a])*val; @@ -683,8 +754,8 @@ static void initparts(void) } if(pa->x>0 && pa->y>0) { - /* Gauss needs 1 pixel extra to work */ - if((R.r.mode & R_GAUSS)) { + /* Non-box filters might need 1 pixel extra to work */ + if((R.r.filtertype)) { pa->minx-= 1; pa->miny-= 1; pa->maxx+= 1; @@ -728,7 +799,7 @@ static void addparttorect(Part *pa) copylen=len= pa->x; height= pa->y; - if(R.r.mode & R_GAUSS) { + if(R.r.filtertype) { /* filters added 1 pixel extra */ rtp+= 1+len; if(rzp) rzp+= 1+len; @@ -1031,7 +1102,7 @@ static void mainRenderLoop(void) /* here the PART and FIELD loops */ if( (R.r.mode & R_BORDER) && (R.r.mode & R_MOVIECROP)); else { /* HANDLE PART OR BORDER */ - if(totparts>1 || (R.r.mode & R_BORDER) || (R.r.mode & R_GAUSS)) { + if(totparts>1 || (R.r.mode & R_BORDER) || (R.r.filtertype)) { pa->rect= R.rectot; R.rectot= NULL; @@ -1055,7 +1126,7 @@ static void mainRenderLoop(void) /* here the PART and FIELD loops */ if(R.r.mode & R_PANORAMA) R.rectx*= R.r.xparts; - if(totparts>1 || (R.r.mode & R_BORDER) || (R.r.mode & R_GAUSS)) { + if(totparts>1 || (R.r.mode & R_BORDER) || (R.r.filtertype)) { int a; if(R.rectot) MEM_freeN(R.rectot); @@ -1313,7 +1384,7 @@ void RE_initrender(struct View3D *ogl_render_view3d) /* just prevents cpu cycles for larger render and copying */ if((R.r.mode & R_OSA)==0) - R.r.mode &= ~R_GAUSS; + R.r.filtertype= 0; renderloop_setblending(); // alpha, sky, gamma diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index 0ffcab22d62..bac360a8ca8 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -2751,7 +2751,7 @@ void zbufshadeDA(void) /* Delta Accum Pixel Struct */ do_renderlineDA(&rl2); SDL_WaitThread(thread, NULL); - if(R.r.mode & R_GAUSS) { + if(R.r.filtertype) { float *rb1= rowbuf1, *rb2= rowbuf2, *rb1a= rowbuf1a, *rb2a= rowbuf2a; a= 4*(R.rectx + 4); while(a--) { diff --git a/source/blender/render/intern/source/vanillaRenderPipe.c b/source/blender/render/intern/source/vanillaRenderPipe.c index b3ec4225105..b5b70aa0e0d 100644 --- a/source/blender/render/intern/source/vanillaRenderPipe.c +++ b/source/blender/render/intern/source/vanillaRenderPipe.c @@ -1576,7 +1576,7 @@ void zBufShadeAdvanced() SDL_WaitThread(thread, NULL); - if(R.r.mode & R_GAUSS) { + if(R.r.filtertype) { float *rb1= AColourBuffer1, *rb2= AColourBuffer2, *rb1a= AColourBuffer1a, *rb2a= AColourBuffer2a; int a= 4*(R.rectx + 4); while(a--) { diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c index ffa1390c8e0..4093a0fc89a 100644 --- a/source/blender/src/buttons_scene.c +++ b/source/blender/src/buttons_scene.c @@ -1090,7 +1090,7 @@ static void render_panel_output(void) static void render_panel_render(void) { uiBlock *block; - + char str[256]; block= uiNewBlock(&curarea->uiblocks, "render_panel_render", UI_EMBOSS, UI_HELV, curarea->win); if(uiNewPanel(curarea, block, "Render", "Render", 320, 0, 318, 204)==0) return; @@ -1148,8 +1148,9 @@ static void render_panel_render(void) uiDefButBitI(block, TOG, R_ODDFIELD, 0,"Odd", 627,55,39,20,&G.scene->r.mode, 0, 0, 0, 0, "Enables Odd field first rendering (Default: Even field)"); uiDefButBitI(block, TOG, R_FIELDSTILL, 0,"X", 668,55,19,20,&G.scene->r.mode, 0, 0, 0, 0, "Disables time difference in field calculations"); - uiDefButBitI(block, TOG, R_GAUSS, 0,"Gauss", 565,34,60,20, &G.scene->r.mode, 0, 0, 0, 0, "Enable Gaussian sampling filter for antialiasing"); - uiDefButF(block, NUM,B_DIFF,"", 627,34,60,20,&G.scene->r.gauss,0.5, 1.5, 100, 2, "Sets the Gaussian filter size"); + sprintf(str, "Filter%%t|Box %%x%d|Tent %%x%d|Quad %%x%d|Cubic %%x%d|Gauss %%x%d|CatRom %%x%d|Mitch %%x%d", R_FILTER_BOX, R_FILTER_TENT, R_FILTER_QUAD, R_FILTER_CUBIC, R_FILTER_GAUSS, R_FILTER_CATROM, R_FILTER_MITCH); + uiDefButS(block, MENU, B_DIFF,str, 565,34,60,20, &G.scene->r.filtertype, 0, 0, 0, 0, "Set sampling filter for antialiasing"); + uiDefButF(block, NUM,B_DIFF,"", 627,34,60,20,&G.scene->r.gauss,0.5, 1.5, 10, 2, "Sets the filter size"); uiDefButBitI(block, TOG, R_BORDER, REDRAWVIEWCAM, "Border", 565,13,60,20, &G.scene->r.mode, 0, 0, 0, 0, "Render a small cut-out of the image"); uiDefButBitI(block, TOG, R_GAMMA, B_REDR, "Gamma", 627,13,60,20, &G.scene->r.mode, 0, 0, 0, 0, "Enable gamma correction"); diff --git a/source/blender/src/drawview.c b/source/blender/src/drawview.c index 9c1159f4f8e..0a3841aa22b 100644 --- a/source/blender/src/drawview.c +++ b/source/blender/src/drawview.c @@ -950,7 +950,45 @@ static void drawviewborder(void) BIF_ThemeColor(TH_WIRE); glRectf(x1, y1, x2, y2); + { + extern float jit[64][2]; + int a, i, j; + BIF_ThemeColor(TH_BACK); + glBegin(GL_LINES); + glVertex2f(x1 + (x2-x1)/3, y1); + glVertex2f(x1 + (x2-x1)/3, y2); + + glVertex2f(x1 + 2*(x2-x1)/3, y1); + glVertex2f(x1 + 2*(x2-x1)/3, y2); + + glVertex2f(x1, y1 + (y2-y1)/3); + glVertex2f(x2, y1 + (y2-y1)/3); + + glVertex2f(x1, y1 + 2*(y2-y1)/3); + glVertex2f(x2, y1 + 2*(y2-y1)/3); + glEnd(); + + glPointSize(4); + glBegin(GL_POINTS); + for(i= -1; i<2; i++) { + for(j= -1; j<2; j++) { + + if(i==0 && j==0) + glColor3ub(255, 255, 255); + else + glColor3ub(150, 150, 150); + + for(a=0; a<R.osa; a++) { + glVertex2f(i*(x2-x1)/3 + (x1+x2)/2 + jit[a][0]*(x2-x1)/3.0, j*(y2-y1)/3 + (y1+y2)/2 + jit[a][1]*(y2-y1)/3.0); + } + } + } + + glEnd(); + glPointSize(1.0); + } + /* camera name */ if (ca && (ca->flag & CAM_SHOWNAME)) { glRasterPos2f(x1, y1-15); diff --git a/source/blender/src/transform_constraints.c b/source/blender/src/transform_constraints.c index 274e24731e3..c9b0a4c61b1 100755 --- a/source/blender/src/transform_constraints.c +++ b/source/blender/src/transform_constraints.c @@ -507,7 +507,6 @@ void setLocalConstraint(TransInfo *t, int mode, const char text[]) { the orientation where %s is (logically). */ void setUserConstraint(TransInfo *t, int mode, const char ftext[]) { - float mtx[3][3]; char text[40]; short twmode= (t->spacetype==SPACE_VIEW3D)? G.vd->twmode: V3D_MANIP_GLOBAL; diff --git a/source/blender/src/transform_generics.c b/source/blender/src/transform_generics.c index edad524e383..0003ce71471 100755 --- a/source/blender/src/transform_generics.c +++ b/source/blender/src/transform_generics.c @@ -74,6 +74,7 @@ #include "BKE_utildefines.h" #include "BSE_view.h" +#include "BDR_unwrapper.h" #include "BLI_arithb.h" #include "BLI_blenlib.h" diff --git a/source/blender/src/usiblender.c b/source/blender/src/usiblender.c index a3dfbae7451..a6f51f92c2d 100644 --- a/source/blender/src/usiblender.c +++ b/source/blender/src/usiblender.c @@ -114,7 +114,7 @@ #include "blendef.h" #include "radio.h" -#include "render.h" // RE_ free stuff +#include "render.h" /* RE_ free stuff */ #include "datatoc.h" #include "SYS_System.h" |