[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27493] trunk/blender/source/blender: Remove SAT texture filter.

Brecht Van Lommel brecht at blender.org
Sun Mar 14 19:22:05 CET 2010


Revision: 27493
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27493
Author:   blendix
Date:     2010-03-14 19:22:04 +0100 (Sun, 14 Mar 2010)

Log Message:
-----------
Remove SAT texture filter. It's not working, thought it was but that's
because the mipmap was not being refreshed. Also this will be problematic
to support when I add tile/mipmap cache, so would not rather not try to.
Can be added back afterwards if someone wants to make it work.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/imbuf/IMB_imbuf.h
    trunk/blender/source/blender/imbuf/intern/filter.c
    trunk/blender/source/blender/imbuf/intern/tiff.c
    trunk/blender/source/blender/makesdna/DNA_texture_types.h
    trunk/blender/source/blender/makesrna/intern/rna_texture.c
    trunk/blender/source/blender/render/intern/source/imagetexture.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2010-03-14 18:08:12 UTC (rev 27492)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2010-03-14 18:22:04 UTC (rev 27493)
@@ -1362,7 +1362,7 @@
 				int mip= 0;
 
 				if(ibuf->mipmap[0]==NULL)
-					IMB_makemipmap(ibuf, 0, 0);
+					IMB_makemipmap(ibuf, 0);
 
 				while(tzoom < 1.0f && mip<8 && ibuf->mipmap[mip]) {
 					tzoom*= 2.0f;

Modified: trunk/blender/source/blender/imbuf/IMB_imbuf.h
===================================================================
--- trunk/blender/source/blender/imbuf/IMB_imbuf.h	2010-03-14 18:08:12 UTC (rev 27492)
+++ trunk/blender/source/blender/imbuf/IMB_imbuf.h	2010-03-14 18:22:04 UTC (rev 27493)
@@ -317,7 +317,7 @@
 void IMB_filter(struct ImBuf *ibuf);
 void IMB_filterN(struct ImBuf *out, struct ImBuf *in);
 void IMB_filter_extend(struct ImBuf *ibuf, char *mask);
-void IMB_makemipmap(struct ImBuf *ibuf, int use_filter, int SAT);
+void IMB_makemipmap(struct ImBuf *ibuf, int use_filter);
 
 /**
  *

Modified: trunk/blender/source/blender/imbuf/intern/filter.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/filter.c	2010-03-14 18:08:12 UTC (rev 27492)
+++ trunk/blender/source/blender/imbuf/intern/filter.c	2010-03-14 18:22:04 UTC (rev 27493)
@@ -371,114 +371,21 @@
 	}
 }
 
-#if 0
 void IMB_makemipmap(ImBuf *ibuf, int use_filter)
 {
-	ImBuf *hbuf= ibuf;
-	int minsize, curmap=0;
-	
-	minsize= ibuf->x<ibuf->y?ibuf->x:ibuf->y;
-	
-	while(minsize>10 && curmap<IB_MIPMAP_LEVELS) {
-		if(use_filter) {
+	ImBuf *hbuf = ibuf;
+	int curmap = 0;
+	while (curmap < IB_MIPMAP_LEVELS) {
+		if (use_filter) {
 			ImBuf *nbuf= IMB_allocImBuf(hbuf->x, hbuf->y, 32, IB_rect, 0);
 			IMB_filterN(nbuf, hbuf);
-			ibuf->mipmap[curmap]= IMB_onehalf(nbuf);
+			ibuf->mipmap[curmap] = IMB_onehalf(nbuf);
 			IMB_freeImBuf(nbuf);
 		}
-		else {
-			ibuf->mipmap[curmap]= IMB_onehalf(hbuf);
-		}
-		hbuf= ibuf->mipmap[curmap];
-		
+		else ibuf->mipmap[curmap] = IMB_onehalf(hbuf);
+		hbuf = ibuf->mipmap[curmap];
+		if (hbuf->x == 1 && hbuf->y == 1) break;
 		curmap++;
-		minsize= hbuf->x<hbuf->y?hbuf->x:hbuf->y;
 	}
 }
-#endif
 
-void IMB_makemipmap(ImBuf *ibuf, int use_filter, int SAT)
-{
-	if (SAT) {
-		// to maximize precision subtract image average, use intermediate double SAT,
-		// only convert to float at the end
-		const double dv = 1.0/255.0;
-		double avg[4] = {0, 0, 0, 0};
-		const int x4 = ibuf->x << 2;
-		int x, y, i;
-		ImBuf* sbuf = IMB_allocImBuf(ibuf->x, ibuf->y, 32, IB_rectfloat, 0);
-		double *satp, *satbuf = MEM_callocN(sizeof(double)*ibuf->x*ibuf->y*4, "tmp SAT buf");
-		const double mf = ibuf->x*ibuf->y;
-		float* fp;
-		ibuf->mipmap[0] = sbuf;
-		if (ibuf->rect_float) {
-			fp = ibuf->rect_float;
-			for (y=0; y<ibuf->y; ++y)
-				for (x=0; x<ibuf->x; ++x) {
-					avg[0] += *fp++;
-					avg[1] += *fp++;
-					avg[2] += *fp++;
-					avg[3] += *fp++;
-				}
-		}
-		else {
-			char* cp = (char*)ibuf->rect;
-			for (y=0; y<ibuf->y; ++y)
-				for (x=0; x<ibuf->x; ++x) {
-					avg[0] += *cp++ * dv;
-					avg[1] += *cp++ * dv;
-					avg[2] += *cp++ * dv;
-					avg[3] += *cp++ * dv;
-				}
-		}
-		avg[0] /= mf;
-		avg[1] /= mf;
-		avg[2] /= mf;
-		avg[3] /= mf;
-		for (y=0; y<ibuf->y; ++y)
-			for (x=0; x<ibuf->x; ++x) {
-				const unsigned int p = (x + y*ibuf->x) << 2;
-				char* cp = (char*)ibuf->rect + p;
-				fp = ibuf->rect_float + p;
-				satp = satbuf + p;
-				for (i=0; i<4; ++i, ++cp, ++fp, ++satp) {
-					double sv = (ibuf->rect_float ? (double)*fp : (double)(*cp)*dv) - avg[i];
-					if (x > 0) sv += satp[-4];
-					if (y > 0) sv += satp[-x4];
-					if (x > 0 && y > 0) sv -= satp[-x4 - 4];
-					*satp = sv;
-				}
-			}
-		fp = sbuf->rect_float;
-		satp = satbuf;
-		for (y=0; y<ibuf->y; ++y)
-			for (x=0; x<ibuf->x; ++x) {
-				*fp++ = (float)*satp++;
-				*fp++ = (float)*satp++;
-				*fp++ = (float)*satp++;
-				*fp++ = (float)*satp++;
-			}
-		MEM_freeN(satbuf);
-		fp = &sbuf->rect_float[(sbuf->x - 1 + (sbuf->y - 1)*sbuf->x) << 2];
-		fp[0] = avg[0];
-		fp[1] = avg[1];
-		fp[2] = avg[2];
-		fp[3] = avg[3];
-	}
-	else {
-		ImBuf *hbuf = ibuf;
-		int curmap = 0;
-		while (curmap < IB_MIPMAP_LEVELS) {
-			if (use_filter) {
-				ImBuf *nbuf= IMB_allocImBuf(hbuf->x, hbuf->y, 32, IB_rect, 0);
-				IMB_filterN(nbuf, hbuf);
-				ibuf->mipmap[curmap] = IMB_onehalf(nbuf);
-				IMB_freeImBuf(nbuf);
-			}
-			else ibuf->mipmap[curmap] = IMB_onehalf(hbuf);
-			hbuf = ibuf->mipmap[curmap];
-			if (hbuf->x == 1 && hbuf->y == 1) break;
-			curmap++;
-		}
-	}
-}

Modified: trunk/blender/source/blender/imbuf/intern/tiff.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/tiff.c	2010-03-14 18:08:12 UTC (rev 27492)
+++ trunk/blender/source/blender/imbuf/intern/tiff.c	2010-03-14 18:22:04 UTC (rev 27493)
@@ -62,13 +62,13 @@
  * Local declarations. *
  ***********************/
 /* Reading and writing of an in-memory TIFF file. */
-tsize_t imb_tiff_ReadProc(thandle_t handle, tdata_t data, tsize_t n);
-tsize_t imb_tiff_WriteProc(thandle_t handle, tdata_t data, tsize_t n);
-toff_t  imb_tiff_SeekProc(thandle_t handle, toff_t ofs, int whence);
-int     imb_tiff_CloseProc(thandle_t handle);
-toff_t  imb_tiff_SizeProc(thandle_t handle);
-int     imb_tiff_DummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize);
-void    imb_tiff_DummyUnmapProc(thandle_t fd, tdata_t base, toff_t size);
+static tsize_t imb_tiff_ReadProc(thandle_t handle, tdata_t data, tsize_t n);
+static tsize_t imb_tiff_WriteProc(thandle_t handle, tdata_t data, tsize_t n);
+static toff_t  imb_tiff_SeekProc(thandle_t handle, toff_t ofs, int whence);
+static int     imb_tiff_CloseProc(thandle_t handle);
+static toff_t  imb_tiff_SizeProc(thandle_t handle);
+static int     imb_tiff_DummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize);
+static void    imb_tiff_DummyUnmapProc(thandle_t fd, tdata_t base, toff_t size);
 
 
 /* Structure for in-memory TIFF file. */
@@ -86,11 +86,11 @@
  *****************************/
 
 
-void imb_tiff_DummyUnmapProc(thandle_t fd, tdata_t base, toff_t size)
+static void imb_tiff_DummyUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 {
 }
 
-int imb_tiff_DummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) 
+static int imb_tiff_DummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) 
 {
             return (0);
 }
@@ -105,7 +105,7 @@
  * @return: Number of bytes actually read.
  * 	 0 = EOF.
  */
-tsize_t imb_tiff_ReadProc(thandle_t handle, tdata_t data, tsize_t n)
+static tsize_t imb_tiff_ReadProc(thandle_t handle, tdata_t data, tsize_t n)
 {
 	tsize_t nRemaining, nCopy;
 	struct ImbTIFFMemFile* mfile;
@@ -147,7 +147,7 @@
  * NOTE: The current Blender implementation should not need this function.  It
  *       is simply a stub.
  */
-tsize_t imb_tiff_WriteProc(thandle_t handle, tdata_t data, tsize_t n)
+static tsize_t imb_tiff_WriteProc(thandle_t handle, tdata_t data, tsize_t n)
 {
 	printf("imb_tiff_WriteProc: this function should not be called.\n");
 	return (-1);
@@ -169,7 +169,7 @@
  * @return: Resulting offset location within the file, measured in bytes from
  *          the beginning of the file.  (-1) indicates an error.
  */
-toff_t imb_tiff_SeekProc(thandle_t handle, toff_t ofs, int whence)
+static toff_t imb_tiff_SeekProc(thandle_t handle, toff_t ofs, int whence)
 {
 	struct ImbTIFFMemFile *mfile;
 	toff_t new_offset;
@@ -216,7 +216,7 @@
  *
  * @return: 0
  */
-int imb_tiff_CloseProc(thandle_t handle)
+static int imb_tiff_CloseProc(thandle_t handle)
 {
 	struct ImbTIFFMemFile *mfile;
 
@@ -242,7 +242,7 @@
  *
  * @return: Size of file (in bytes).
  */
-toff_t imb_tiff_SizeProc(thandle_t handle)
+static toff_t imb_tiff_SizeProc(thandle_t handle)
 {
 	struct ImbTIFFMemFile* mfile;
 

Modified: trunk/blender/source/blender/makesdna/DNA_texture_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_texture_types.h	2010-03-14 18:08:12 UTC (rev 27492)
+++ trunk/blender/source/blender/makesdna/DNA_texture_types.h	2010-03-14 18:22:04 UTC (rev 27493)
@@ -335,8 +335,6 @@
 #define TXF_EWA			1
 #define TXF_FELINE		2
 #define TXF_AREA		3
-// TXF_SAT only available when mipmaps disabled
-#define TXF_SAT			4
 
 /* imaflag unused, only for version check */
 #define TEX_FIELDS_		8

Modified: trunk/blender/source/blender/makesrna/intern/rna_texture.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_texture.c	2010-03-14 18:08:12 UTC (rev 27492)
+++ trunk/blender/source/blender/makesrna/intern/rna_texture.c	2010-03-14 18:22:04 UTC (rev 27493)
@@ -48,7 +48,6 @@
 	{TXF_EWA, "EWA", 0, "EWA", ""},
 	{TXF_FELINE, "FELINE", 0, "FELINE", ""},
 	{TXF_AREA, "AREA", 0, "Area", ""},
-	{TXF_SAT, "SAT", 0, "SAT (4x mem)", ""},
 	{0, NULL, 0, NULL, NULL}};
 
 EnumPropertyItem texture_type_items[] = {
@@ -327,28 +326,10 @@
 	if(value) tex->imaflag |= TEX_MIPMAP;
 	else tex->imaflag &= ~TEX_MIPMAP;
 
-	if((tex->imaflag & TEX_MIPMAP) && tex->texfilter == TXF_SAT)
+	if(tex->imaflag & TEX_MIPMAP)
 		tex->texfilter = TXF_EWA;
 }
 
-static EnumPropertyItem *rna_ImageTexture_filter_itemf(bContext *C, PointerRNA *ptr, int *free)
-{
-	Tex *tex= (Tex*)ptr->data;
-	EnumPropertyItem *item= NULL;
-	int totitem= 0;
-
-	RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_BOX);
-	RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_EWA);
-	RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_FELINE);
-	RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_AREA);
-	if(tex->imaflag & TEX_MIPMAP)
-		RNA_enum_items_add_value(&item, &totitem, texture_filter_items, TXF_SAT);
-	
-	*free= 1;
-
-	return item;
-}
-
 static void rna_Envmap_source_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
 	Tex *tex= ptr->id.data;
@@ -695,7 +676,6 @@
 	prop= RNA_def_property(srna, "filter", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_sdna(prop, NULL, "texfilter");
 	RNA_def_property_enum_items(prop, texture_filter_items);
-	RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_ImageTexture_filter_itemf");
 	RNA_def_property_ui_text(prop, "Filter", "Texture filter to use for sampling image");
 	RNA_def_property_update(prop, 0, "rna_Texture_update");
 	


@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list