[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37493] trunk/blender/source/blender: de-duplicate multires image filter function.
Campbell Barton
ideasman42 at gmail.com
Wed Jun 15 04:14:43 CEST 2011
Revision: 37493
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37493
Author: campbellbarton
Date: 2011-06-15 02:14:38 +0000 (Wed, 15 Jun 2011)
Log Message:
-----------
de-duplicate multires image filter function. (no functional change)
Modified Paths:
--------------
trunk/blender/source/blender/editors/object/object_bake.c
trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
trunk/blender/source/blender/render/intern/source/rendercore.c
Modified: trunk/blender/source/blender/editors/object/object_bake.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_bake.c 2011-06-15 01:56:49 UTC (rev 37492)
+++ trunk/blender/source/blender/editors/object/object_bake.c 2011-06-15 02:14:38 UTC (rev 37493)
@@ -854,50 +854,12 @@
Image *ima= (Image*)link->data;
int i;
ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL);
- short is_new_alpha;
if(ibuf->x<=0 || ibuf->y<=0)
continue;
- /* must check before filtering */
- is_new_alpha= (ibuf->depth != 32) && BKE_alphatest_ibuf(ibuf);
+ RE_bake_ibuf_filter(ibuf, (unsigned char *)ibuf->userdata, bkr->bake_filter);
- /* Margin */
- if(bkr->bake_filter) {
- char *temprect;
-
- /* extend the mask +2 pixels from the image,
- * this is so colors dont blend in from outside */
-
- for(i=0; i<bkr->bake_filter; i++)
- IMB_mask_filter_extend((char *)ibuf->userdata, ibuf->x, ibuf->y);
-
- temprect = MEM_dupallocN(ibuf->userdata);
-
- /* expand twice to clear this many pixels, so they blend back in */
- IMB_mask_filter_extend(temprect, ibuf->x, ibuf->y);
- IMB_mask_filter_extend(temprect, ibuf->x, ibuf->y);
-
- /* clear all pixels in the margin */
- IMB_mask_clear(ibuf, temprect, FILTER_MASK_MARGIN);
- MEM_freeN(temprect);
-
- for(i= 0; i<bkr->bake_filter; i++)
- IMB_filter_extend(ibuf, (char *)ibuf->userdata);
- }
-
- /* if the bake results in new alpha then change the image setting */
- if(is_new_alpha) {
- ibuf->depth= 32;
- }
- else {
- if(bkr->bake_filter) {
- /* clear alpha added by filtering */
- IMB_rectfill_alpha(ibuf, 1.0f);
- }
- }
-
-
ibuf->userflags|= IB_BITMAPDIRTY;
if(ibuf->mipmap[0]) {
ibuf->userflags|= IB_MIPMAP_INVALID;
@@ -1349,7 +1311,6 @@
/* freed when baking is done, but if its canceled we need to free here */
if (ibuf->userdata) {
- printf("freed\n");
MEM_freeN(ibuf->userdata);
ibuf->userdata= NULL;
}
Modified: trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_shader_ext.h 2011-06-15 01:56:49 UTC (rev 37492)
+++ trunk/blender/source/blender/render/extern/include/RE_shader_ext.h 2011-06-15 02:14:38 UTC (rev 37493)
@@ -193,6 +193,8 @@
/* node shaders... */
struct Tex;
struct MTex;
+struct ImBuf;
+
/* this one uses nodes */
int multitex_ext(struct Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, struct TexResult *texres);
/* nodes disabled */
@@ -209,6 +211,6 @@
void RE_shade_external(struct Render *re, struct ShadeInput *shi, struct ShadeResult *shr);
int RE_bake_shade_all_selected(struct Render *re, int type, struct Object *actob, short *do_update, float *progress);
struct Image *RE_bake_shade_get_image(void);
+void RE_bake_ibuf_filter(struct ImBuf *ibuf, unsigned char *mask, const int filter);
#endif /* RE_SHADER_EXT_H */
-
Modified: trunk/blender/source/blender/render/intern/source/rendercore.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rendercore.c 2011-06-15 01:56:49 UTC (rev 37492)
+++ trunk/blender/source/blender/render/intern/source/rendercore.c 2011-06-15 02:14:38 UTC (rev 37493)
@@ -2590,6 +2590,48 @@
return NULL;
}
+void RE_bake_ibuf_filter(ImBuf *ibuf, unsigned char *mask, const int filter)
+{
+ /* must check before filtering */
+ const short is_new_alpha= (ibuf->depth != 32) && BKE_alphatest_ibuf(ibuf);
+
+ /* Margin */
+ if(filter) {
+ char *temprect;
+ int i;
+
+ /* extend the mask +2 pixels from the image,
+ * this is so colors dont blend in from outside */
+
+ for(i=0; i< filter; i++)
+ IMB_mask_filter_extend((char *)ibuf->userdata, ibuf->x, ibuf->y);
+
+ temprect = MEM_dupallocN(ibuf->userdata);
+
+ /* expand twice to clear this many pixels, so they blend back in */
+ IMB_mask_filter_extend(temprect, ibuf->x, ibuf->y);
+ IMB_mask_filter_extend(temprect, ibuf->x, ibuf->y);
+
+ /* clear all pixels in the margin */
+ IMB_mask_clear(ibuf, temprect, FILTER_MASK_MARGIN);
+ MEM_freeN(temprect);
+
+ for(i= 0; i < filter; i++)
+ IMB_filter_extend(ibuf, (char *)ibuf->userdata);
+ }
+
+ /* if the bake results in new alpha then change the image setting */
+ if(is_new_alpha) {
+ ibuf->depth= 32;
+ }
+ else {
+ if(filter) {
+ /* clear alpha added by filtering */
+ IMB_rectfill_alpha(ibuf, 1.0f);
+ }
+ }
+}
+
/* using object selection tags, the faces with UV maps get baked */
/* render should have been setup */
/* returns 0 if nothing was handled */
@@ -2677,51 +2719,8 @@
if(!ibuf)
continue;
- /* must check before filtering */
- is_new_alpha= (ibuf->depth != 32) && BKE_alphatest_ibuf(ibuf);
+ RE_bake_ibuf_filter(ibuf, (unsigned char *)ibuf->userdata, re->r.bake_filter);
- if(re->r.bake_filter) {
- if (usemask) {
- /* extend the mask +2 pixels from the image,
- * this is so colors dont blend in from outside */
- char *temprect;
-
- for(a=0; a<re->r.bake_filter; a++)
- IMB_mask_filter_extend((char *)ibuf->userdata, ibuf->x, ibuf->y);
-
- temprect = MEM_dupallocN(ibuf->userdata);
-
- /* expand twice to clear this many pixels, so they blend back in */
- IMB_mask_filter_extend(temprect, ibuf->x, ibuf->y);
- IMB_mask_filter_extend(temprect, ibuf->x, ibuf->y);
-
- /* clear all pixels in the margin*/
- IMB_mask_clear(ibuf, temprect, FILTER_MASK_MARGIN);
- MEM_freeN(temprect);
- }
-
- for(a=0; a<re->r.bake_filter; a++) {
- /*the mask, ibuf->userdata - can be null, in this case only zero alpha is used */
- IMB_filter_extend(ibuf, (char *)ibuf->userdata);
- }
-
- if (ibuf->userdata) {
- MEM_freeN(ibuf->userdata);
- ibuf->userdata= NULL;
- }
- }
-
- /* if the bake results in new alpha then change the image setting */
- if(is_new_alpha) {
- ibuf->depth= 32;
- }
- else {
- if(re->r.bake_filter) {
- /* clear alpha added by filtering */
- IMB_rectfill_alpha(ibuf, 1.0f);
- }
- }
-
ibuf->userflags |= IB_BITMAPDIRTY;
if (ibuf->rect_float) IMB_rect_from_float(ibuf);
}
More information about the Bf-blender-cvs
mailing list