From: Carsten W. <ca...@us...> - 2007-01-10 03:01:45
|
Update of /cvsroot/jake2/jake2/src/jake2/render/fast In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv10057/src/jake2/render/fast Modified Files: Image.java Log Message: original texture resampling (lesser memory garbage) Index: Image.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/render/fast/Image.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Image.java 21 Nov 2006 02:22:19 -0000 1.3 --- Image.java 10 Jan 2007 03:01:31 -0000 1.4 *************** *** 859,928 **** } ! // ======================================================= ! /* ! ================ ! GL_ResampleTexture ! ================ ! */ ! // cwei :-) ! void GL_ResampleTexture(int[] in, int inwidth, int inheight, int[] out, int outwidth, int outheight) { ! // int i, j; ! // unsigned *inrow, *inrow2; ! // int frac, fracstep; ! // int[] p1 = new int[1024]; ! // int[] p2 = new int[1024]; ! // ! // *** this source do the same *** ! BufferedImage image = new BufferedImage(inwidth, inheight, BufferedImage.TYPE_INT_ARGB); ! image.setRGB(0, 0, inwidth, inheight, in, 0, inwidth); ! AffineTransformOp op = ! new AffineTransformOp( ! AffineTransform.getScaleInstance(outwidth * 1.0 / inwidth, outheight * 1.0 / inheight), ! AffineTransformOp.TYPE_NEAREST_NEIGHBOR); ! BufferedImage tmp = op.filter(image, null); ! tmp.getRGB(0, 0, outwidth, outheight, out, 0, outwidth); ! // *** end *** ! // byte *pix1, *pix2, *pix3, *pix4; ! // ! // fracstep = inwidth*0x10000/outwidth; ! // ! // frac = fracstep>>2; ! // for (i=0 ; i<outwidth ; i++) ! // { ! // p1[i] = 4*(frac>>16); ! // frac += fracstep; ! // } ! // frac = 3*(fracstep>>2); ! // for (i=0 ; i<outwidth ; i++) ! // { ! // p2[i] = 4*(frac>>16); ! // frac += fracstep; ! // } ! // ! // for (i=0 ; i<outheight ; i++, out += outwidth) ! // { ! // inrow = in + inwidth*(int)((i+0.25)*inheight/outheight); ! // inrow2 = in + inwidth*(int)((i+0.75)*inheight/outheight); ! // frac = fracstep >> 1; ! // for (j=0 ; j<outwidth ; j++) ! // { ! // pix1 = (byte *)inrow + p1[j]; ! // pix2 = (byte *)inrow + p2[j]; ! // pix3 = (byte *)inrow2 + p1[j]; ! // pix4 = (byte *)inrow2 + p2[j]; ! // ((byte *)(out+j))[0] = (pix1[0] + pix2[0] + pix3[0] + pix4[0])>>2; ! // ((byte *)(out+j))[1] = (pix1[1] + pix2[1] + pix3[1] + pix4[1])>>2; ! // ((byte *)(out+j))[2] = (pix1[2] + pix2[2] + pix3[2] + pix4[2])>>2; ! // ((byte *)(out+j))[3] = (pix1[3] + pix2[3] + pix3[3] + pix4[3])>>2; ! // } ! // } } /* --- 859,918 ---- } ! // ================================================== ! final int[] p1 = new int[1024]; ! final int[] p2 = new int[1024]; ! /* ! * GL_ResampleTexture ! */ ! void GL_ResampleTexture(int[] in, int inwidth, int inheight, int[] out, ! int outwidth, int outheight) { ! Arrays.fill(p1, 0); ! Arrays.fill(p2, 0); ! int fracstep = (inwidth * 0x10000) / outwidth; ! int i, j; ! int frac = fracstep >> 2; ! for (i = 0; i < outwidth; i++) { ! p1[i] = frac >> 16; ! frac += fracstep; ! } ! frac = 3 * (fracstep >> 2); ! for (i = 0; i < outwidth; i++) { ! p2[i] = frac >> 16; ! frac += fracstep; ! } ! int outp = 0; ! int r, g, b, a; ! int inrow, inrow2; ! int pix1, pix2, pix3, pix4; ! for (i = 0; i < outheight; i++) { ! inrow = inwidth * (int) ((i + 0.25f) * inheight / outheight); ! inrow2 = inwidth * (int) ((i + 0.75f) * inheight / outheight); ! frac = fracstep >> 1; ! for (j = 0; j < outwidth; j++) { ! pix1 = in[inrow + p1[j]]; ! pix2 = in[inrow + p2[j]]; ! pix3 = in[inrow2 + p1[j]]; ! pix4 = in[inrow2 + p2[j]]; ! ! r = (((pix1 >> 0) & 0xFF) + ((pix2 >> 0) & 0xFF) ! + ((pix3 >> 0) & 0xFF) + ((pix4 >> 0) & 0xFF)) >> 2; ! g = (((pix1 >> 8) & 0xFF) + ((pix2 >> 8) & 0xFF) ! + ((pix3 >> 8) & 0xFF) + ((pix4 >> 8) & 0xFF)) >> 2; ! b = (((pix1 >> 16) & 0xFF) + ((pix2 >> 16) & 0xFF) ! + ((pix3 >> 16) & 0xFF) + ((pix4 >> 16) & 0xFF)) >> 2; ! a = (((pix1 >> 24) & 0xFF) + ((pix2 >> 24) & 0xFF) ! + ((pix3 >> 24) & 0xFF) + ((pix4 >> 24) & 0xFF)) >> 2; ! ! out[outp++] = (a << 24) | (b << 16) | (g << 8) | r; ! } } + } /* |