From bdb754b2573e40edd80177bcddf7961f4c629c23 Mon Sep 17 00:00:00 2001 From: cxgeorge <> Date: Fri, 29 Jun 2001 02:25:19 +0000 Subject: [PATCH] use floating-point division in mipmap generation --- panda/src/dxgsg/dxTextureContext.cxx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/panda/src/dxgsg/dxTextureContext.cxx b/panda/src/dxgsg/dxTextureContext.cxx index 5d85038cec..dd1a700b8a 100644 --- a/panda/src/dxgsg/dxTextureContext.cxx +++ b/panda/src/dxgsg/dxTextureContext.cxx @@ -1669,9 +1669,16 @@ FillDDSurfTexturePixels(void) { DWORD src_row_bytelength=oldcurxsize*cPixelSize; DWORD two_src_row_bytelength=2*src_row_bytelength; + #ifdef GENMIPMAP_DO_INTEGER_DIV DWORD DivShift=2; if((oldcurxsize==1)||(oldcurysize==1)) DivShift = 1; + #else + float numpixels_per_filter=4.0f; + if((oldcurxsize==1)||(oldcurysize==1)) + numpixels_per_filter=2.0f; + #endif + DWORD x_srcptr_inc = ((oldcurxsize==1)? cPixelSize: (2*cPixelSize)); // box-filter shrink down, avg 4 pixels at a time @@ -1691,8 +1698,11 @@ FillDDSurfTexturePixels(void) { if(oldcurxsize>1) colr += *(pSrcWord+src_row_bytelength+cPixelSize+c); } - - colr >>= DivShift; + #ifdef GENMIPMAP_DO_INTEGER_DIV + colr >>= DivShift; + #else + colr = (DWORD) ((((float)colr)/numpixels_per_filter)+0.5f); + #endif *(pDstWord+c)=(BYTE)colr; }