Thread: [Patchanim-commit] SF.net SVN: patchanim: [74] trunk/patchanim/src/com/mebigfatguy/patchanim/ surfa
Brought to you by:
dbrosius
From: <dbr...@us...> - 2008-01-31 05:44:07
|
Revision: 74 http://patchanim.svn.sourceforge.net/patchanim/?rev=74&view=rev Author: dbrosius Date: 2008-01-30 21:44:11 -0800 (Wed, 30 Jan 2008) Log Message: ----------- use WritableRaster's DataBuffer, rather than calling setPixel on the image (performance) Modified Paths: -------------- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java Modified: trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java =================================================================== --- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-01-30 05:35:33 UTC (rev 73) +++ trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-01-31 05:44:11 UTC (rev 74) @@ -21,7 +21,9 @@ import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; import java.awt.image.IndexColorModel; +import java.awt.image.WritableRaster; import com.mebigfatguy.patchanim.OutOfBoundsColor; import com.mebigfatguy.patchanim.PatchColor; @@ -35,6 +37,10 @@ if (patch == null) return; + WritableRaster wr = image.getRaster(); + DataBuffer db = wr.getDataBuffer(); + int pixel = 0; + PatchCoords[] coords = new PatchCoords[3]; coords[0] = patch.getPatch(PatchColor.Red); @@ -51,32 +57,32 @@ int sampleSizeX = image.getWidth(); int sampleSizeY = image.getHeight(); - for (int iu = 0; iu < sampleSizeX; iu++) { - u = (double)iu / (double)sampleSizeX; - u2 = u * u; - u3 = u2 * u; - oneMinusU = 1.0 - u; - oneMinusU2 = oneMinusU * oneMinusU; - oneMinusU3 = oneMinusU2 * oneMinusU; + for (int iv = 0; iv < sampleSizeY; iv++) { + v = (double)iv / (double)sampleSizeY; + v2 = v * v; + v3 = v2 * v; + oneMinusV = 1.0 - v; + oneMinusV2 = oneMinusV * oneMinusV; + oneMinusV3 = oneMinusV2 * oneMinusV; - uCoeffs[0] = oneMinusU3; - uCoeffs[1] = 3.0 * u * oneMinusU2; - uCoeffs[2] = 3.0 * u2 * oneMinusU; - uCoeffs[3] = u3; + vCoeffs[0] = oneMinusV3; + vCoeffs[1] = 3.0 * v * oneMinusV2; + vCoeffs[2] = 3.0 * v2 * oneMinusV; + vCoeffs[3] = v3; + + for (int iu = 0; iu < sampleSizeX; iu++) { + u = (double)iu / (double)sampleSizeX; + u2 = u * u; + u3 = u2 * u; + oneMinusU = 1.0 - u; + oneMinusU2 = oneMinusU * oneMinusU; + oneMinusU3 = oneMinusU2 * oneMinusU; + + uCoeffs[0] = oneMinusU3; + uCoeffs[1] = 3.0 * u * oneMinusU2; + uCoeffs[2] = 3.0 * u2 * oneMinusU; + uCoeffs[3] = u3; - for (int iv = 0; iv < sampleSizeY; iv++) { - v = (double)iv / (double)sampleSizeY; - v2 = v * v; - v3 = v2 * v; - oneMinusV = 1.0 - v; - oneMinusV2 = oneMinusV * oneMinusV; - oneMinusV3 = oneMinusV2 * oneMinusV; - - vCoeffs[0] = oneMinusV3; - vCoeffs[1] = 3.0 * v * oneMinusV2; - vCoeffs[2] = 3.0 * v2 * oneMinusV; - vCoeffs[3] = v3; - value[0] = value[1] = value[2] = 0.0; for (int i = 0; i < PatchCoords.ORDER; i++) { @@ -103,8 +109,12 @@ iValue[k] = iValue[k] & 0x00FF; } } - int compValue = 0xFF000000 | (iValue[0] << 16) | (iValue[1] << 8) | iValue[2]; - image.setRGB(iu, iv, compValue); + + db.setElem(pixel++, iValue[0]); + db.setElem(pixel++, iValue[1]); + db.setElem(pixel++, iValue[2]); + //int compValue = 0xFF000000 | (iValue[0] << 16) | (iValue[1] << 8) | iValue[2]; + //image.setRGB(iu, iv, compValue); } } } @@ -113,6 +123,10 @@ if (patch == null) return; + WritableRaster wr = image.getRaster(); + DataBuffer db = wr.getDataBuffer(); + int pixel = 0; + PatchCoords coords = patch.getPatch(color); double u, u2, u3, oneMinusU, oneMinusU2, oneMinusU3; @@ -123,32 +137,32 @@ int sampleSizeX = image.getWidth(); int sampleSizeY = image.getHeight(); - for (int iu = 0; iu < sampleSizeX; iu++) { - u = (double)iu / (double)sampleSizeX; - u2 = u * u; - u3 = u2 * u; - oneMinusU = 1.0 - u; - oneMinusU2 = oneMinusU * oneMinusU; - oneMinusU3 = oneMinusU2 * oneMinusU; + for (int iv = 0; iv < sampleSizeY; iv++) { + v = (double)iv / (double)sampleSizeY; + v2 = v * v; + v3 = v2 * v; + oneMinusV = 1.0 - v; + oneMinusV2 = oneMinusV * oneMinusV; + oneMinusV3 = oneMinusV2 * oneMinusV; - uCoeffs[0] = oneMinusU3; - uCoeffs[1] = 3.0 * u * oneMinusU2; - uCoeffs[2] = 3.0 * u2 * oneMinusU; - uCoeffs[3] = u3; + vCoeffs[0] = oneMinusV3; + vCoeffs[1] = 3.0 * v * oneMinusV2; + vCoeffs[2] = 3.0 * v2 * oneMinusV; + vCoeffs[3] = v3; - for (int iv = 0; iv < sampleSizeY; iv++) { - v = (double)iv / (double)sampleSizeY; - v2 = v * v; - v3 = v2 * v; - oneMinusV = 1.0 - v; - oneMinusV2 = oneMinusV * oneMinusV; - oneMinusV3 = oneMinusV2 * oneMinusV; + for (int iu = 0; iu < sampleSizeX; iu++) { + u = (double)iu / (double)sampleSizeX; + u2 = u * u; + u3 = u2 * u; + oneMinusU = 1.0 - u; + oneMinusU2 = oneMinusU * oneMinusU; + oneMinusU3 = oneMinusU2 * oneMinusU; - vCoeffs[0] = oneMinusV3; - vCoeffs[1] = 3.0 * v * oneMinusV2; - vCoeffs[2] = 3.0 * v2 * oneMinusV; - vCoeffs[3] = v3; - + uCoeffs[0] = oneMinusU3; + uCoeffs[1] = 3.0 * u * oneMinusU2; + uCoeffs[2] = 3.0 * u2 * oneMinusU; + uCoeffs[3] = u3; + double value = 0.0; for (int i = 0; i < PatchCoords.ORDER; i++) { for (int j = 0; j < PatchCoords.ORDER; j++) { @@ -169,13 +183,8 @@ else iValue = iValue & 0x00FF; } - if (color == PatchColor.Red) - iValue <<= 16; - else if (color == PatchColor.Green) - iValue <<= 8; - iValue |= 0xFF000000; - image.setRGB(iu, iv, iValue); + db.setElem(pixel++, iValue); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-01-31 05:46:30
|
Revision: 75 http://patchanim.svn.sourceforge.net/patchanim/?rev=75&view=rev Author: dbrosius Date: 2008-01-30 21:46:28 -0800 (Wed, 30 Jan 2008) Log Message: ----------- oops, r/g/b not b/g/r Modified Paths: -------------- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java Modified: trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java =================================================================== --- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-01-31 05:44:11 UTC (rev 74) +++ trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-01-31 05:46:28 UTC (rev 75) @@ -110,11 +110,9 @@ } } - db.setElem(pixel++, iValue[0]); - db.setElem(pixel++, iValue[1]); db.setElem(pixel++, iValue[2]); - //int compValue = 0xFF000000 | (iValue[0] << 16) | (iValue[1] << 8) | iValue[2]; - //image.setRGB(iu, iv, compValue); + db.setElem(pixel++, iValue[1]); + db.setElem(pixel++, iValue[0]); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-02-18 06:48:19
|
Revision: 205 http://patchanim.svn.sourceforge.net/patchanim/?rev=205&view=rev Author: dbrosius Date: 2008-02-17 22:48:22 -0800 (Sun, 17 Feb 2008) Log Message: ----------- loop unroll the 3 patches when building pixel values Modified Paths: -------------- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java Modified: trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java =================================================================== --- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-02-18 04:00:10 UTC (rev 204) +++ trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-02-18 06:48:22 UTC (rev 205) @@ -71,9 +71,9 @@ for (int j = 0; j < order; j++) { for (int i = 0; i < order; i++) { double coeff = uCoeffs[i] * vCoeffs[j]; - for (int k = 0; k < 3; k++) { - value[k] += coords[k].getCoordinate(i, j).getColor() * coeff; - } + value[0] += coords[0].getCoordinate(i, j).getColor() * coeff; + value[1] += coords[1].getCoordinate(i, j).getColor() * coeff; + value[2] += coords[2].getCoordinate(i, j).getColor() * coeff; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-02-18 06:53:23
|
Revision: 206 http://patchanim.svn.sourceforge.net/patchanim/?rev=206&view=rev Author: dbrosius Date: 2008-02-17 22:53:28 -0800 (Sun, 17 Feb 2008) Log Message: ----------- simplify Modified Paths: -------------- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java Modified: trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java =================================================================== --- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-02-18 06:48:22 UTC (rev 205) +++ trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-02-18 06:53:28 UTC (rev 206) @@ -183,14 +183,14 @@ double tt = 1.0; for (int i = 0; i < coeffs.length; i++) { coeffs[i] = tt; - tt = tt * t; + tt *= t; } double oneMinusT = 1.0 - t; double oneMinusTT = 1.0; for (int i = coeffs.length - 1; i >= 0; i--) { coeffs[i] *= oneMinusTT; - oneMinusTT = oneMinusTT * oneMinusT; + oneMinusTT *= oneMinusT; } for (int i = 0; i < coeffs.length; i++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-02-08 05:37:13
|
Revision: 104 http://patchanim.svn.sourceforge.net/patchanim/?rev=104&view=rev Author: dbrosius Date: 2008-02-07 21:37:17 -0800 (Thu, 07 Feb 2008) Log Message: ----------- pull out buildCoefficients Modified Paths: -------------- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java Modified: trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java =================================================================== --- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-02-08 05:29:50 UTC (rev 103) +++ trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-02-08 05:37:17 UTC (rev 104) @@ -47,8 +47,8 @@ coords[1] = patch.getPatch(PatchColor.Green); coords[2] = patch.getPatch(PatchColor.Blue); - double u, u2, u3, oneMinusU, oneMinusU2, oneMinusU3; - double v, v2, v3, oneMinusV, oneMinusV2, oneMinusV3; + double u; + double v; double[] uCoeffs = new double[PatchCoords.ORDER]; double[] vCoeffs = new double[PatchCoords.ORDER]; double[] value = new double[3]; @@ -59,29 +59,11 @@ for (int iv = 0; iv < sampleSizeY; iv++) { v = (double)iv / (double)sampleSizeY; - v2 = v * v; - v3 = v2 * v; - oneMinusV = 1.0 - v; - oneMinusV2 = oneMinusV * oneMinusV; - oneMinusV3 = oneMinusV2 * oneMinusV; + buildCoefficients(v, vCoeffs); - vCoeffs[0] = oneMinusV3; - vCoeffs[1] = 3.0 * v * oneMinusV2; - vCoeffs[2] = 3.0 * v2 * oneMinusV; - vCoeffs[3] = v3; - for (int iu = 0; iu < sampleSizeX; iu++) { u = (double)iu / (double)sampleSizeX; - u2 = u * u; - u3 = u2 * u; - oneMinusU = 1.0 - u; - oneMinusU2 = oneMinusU * oneMinusU; - oneMinusU3 = oneMinusU2 * oneMinusU; - - uCoeffs[0] = oneMinusU3; - uCoeffs[1] = 3.0 * u * oneMinusU2; - uCoeffs[2] = 3.0 * u2 * oneMinusU; - uCoeffs[3] = u3; + buildCoefficients(u, uCoeffs); value[0] = value[1] = value[2] = 0.0; @@ -127,8 +109,8 @@ PatchCoords coords = patch.getPatch(color); - double u, u2, u3, oneMinusU, oneMinusU2, oneMinusU3; - double v, v2, v3, oneMinusV, oneMinusV2, oneMinusV3; + double u; + double v; double[] uCoeffs = new double[PatchCoords.ORDER]; double[] vCoeffs = new double[PatchCoords.ORDER]; @@ -137,29 +119,11 @@ for (int iv = 0; iv < sampleSizeY; iv++) { v = (double)iv / (double)sampleSizeY; - v2 = v * v; - v3 = v2 * v; - oneMinusV = 1.0 - v; - oneMinusV2 = oneMinusV * oneMinusV; - oneMinusV3 = oneMinusV2 * oneMinusV; + buildCoefficients(v, vCoeffs); - vCoeffs[0] = oneMinusV3; - vCoeffs[1] = 3.0 * v * oneMinusV2; - vCoeffs[2] = 3.0 * v2 * oneMinusV; - vCoeffs[3] = v3; - for (int iu = 0; iu < sampleSizeX; iu++) { u = (double)iu / (double)sampleSizeX; - u2 = u * u; - u3 = u2 * u; - oneMinusU = 1.0 - u; - oneMinusU2 = oneMinusU * oneMinusU; - oneMinusU3 = oneMinusU2 * oneMinusU; - - uCoeffs[0] = oneMinusU3; - uCoeffs[1] = 3.0 * u * oneMinusU2; - uCoeffs[2] = 3.0 * u2 * oneMinusU; - uCoeffs[3] = u3; + buildCoefficients(u, uCoeffs); double value = 0.0; for (int i = 0; i < PatchCoords.ORDER; i++) { @@ -212,5 +176,18 @@ graphics.fillRect(0, 0, sampleSizeX, sampleSizeY); return image; } + + private static void buildCoefficients(double t, double[] coeffs) { + double t2 = t * t; + double t3 = t2 * t; + double oneMinusT = 1.0 - t; + double oneMinusT2 = oneMinusT * oneMinusT; + double oneMinusT3 = oneMinusT2 * oneMinusT; + + coeffs[0] = oneMinusT3; + coeffs[1] = 3.0 * t * oneMinusT2; + coeffs[2] = 3.0 * t2 * oneMinusT; + coeffs[3] = t3; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-02-18 07:51:37
|
Revision: 211 http://patchanim.svn.sourceforge.net/patchanim/?rev=211&view=rev Author: dbrosius Date: 2008-02-17 23:51:42 -0800 (Sun, 17 Feb 2008) Log Message: ----------- fix roll of negative values Modified Paths: -------------- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java Modified: trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java =================================================================== --- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-02-18 07:40:54 UTC (rev 210) +++ trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-02-18 07:51:42 UTC (rev 211) @@ -146,10 +146,18 @@ case Roll: int period = value / 256; - if ((period & 0x01) != 0) - value = 255 - value & 0x00FF; - else - value = value & 0x00FF; + if ((period & 0x01) != 0) { + if (value > 0) + value = 255 - (value+1) & 0x00FF; + else + value = value & 0x00FF; + } + else { + if (value > 0) + value = value & 0x00FF; + else + value = 256 - value & 0x00FF; + } break; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |