X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Frenderer%2Fraster%2Ftexture%2FTextureBitmap.java;fp=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Frenderer%2Fraster%2Ftexture%2FTextureBitmap.java;h=fe1e30482d1aa04a960f7a956295004e955b82b8;hb=24e68b2f99037dec8a3442030dcb15013c930652;hp=00d0625684b40c36f46af5072dcb542e57130715;hpb=316a696bf9db6e8eddf90ef3df5e1119481c0192;p=sixth-3d.git diff --git a/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/texture/TextureBitmap.java b/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/texture/TextureBitmap.java index 00d0625..fe1e304 100644 --- a/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/texture/TextureBitmap.java +++ b/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/texture/TextureBitmap.java @@ -9,7 +9,7 @@ import eu.svjatoslav.sixth.e3d.renderer.raster.Color; public class TextureBitmap { /** - * Byte order: ABGR + * Byte order: Alpha, Blue, Green, Red */ public final byte[] bytes; @@ -34,47 +34,54 @@ public class TextureBitmap { this(width, height, new byte[width * height * 4], multiplicationFactor); } - public void drawPixel(int textureOffset, - final byte[] targetRenderingAreaBytes, int targetRenderingAreaOffset) { + /** + * Transfer (render) one pixel from current {@link TextureBitmap} to target raster bitmap. + * + * @param sourceBitmapPixelAddress Pixel address within current {@link TextureBitmap} as indicated by its offset. + * @param targetBitmap Bitmap of the target image where pixel should be rendered to. + * @param targetBitmapPixelAddress Pixel location within target image where pixel should be rendered to. + */ + public void drawPixel(int sourceBitmapPixelAddress, + final byte[] targetBitmap, int targetBitmapPixelAddress) { - final int textureAlpha = bytes[textureOffset] & 0xff; + final int textureAlpha = bytes[sourceBitmapPixelAddress] & 0xff; if (textureAlpha == 0) return; if (textureAlpha == 255) { // skip reading of background for fully opaque pixels - targetRenderingAreaBytes[targetRenderingAreaOffset] = (byte) 255; + targetBitmap[targetBitmapPixelAddress] = (byte) 255; - targetRenderingAreaOffset++; - textureOffset++; - targetRenderingAreaBytes[targetRenderingAreaOffset] = bytes[textureOffset]; + targetBitmapPixelAddress++; + sourceBitmapPixelAddress++; + targetBitmap[targetBitmapPixelAddress] = bytes[sourceBitmapPixelAddress]; - targetRenderingAreaOffset++; - textureOffset++; - targetRenderingAreaBytes[targetRenderingAreaOffset] = bytes[textureOffset]; + targetBitmapPixelAddress++; + sourceBitmapPixelAddress++; + targetBitmap[targetBitmapPixelAddress] = bytes[sourceBitmapPixelAddress]; - targetRenderingAreaOffset++; - textureOffset++; - targetRenderingAreaBytes[targetRenderingAreaOffset] = bytes[textureOffset]; + targetBitmapPixelAddress++; + sourceBitmapPixelAddress++; + targetBitmap[targetBitmapPixelAddress] = bytes[sourceBitmapPixelAddress]; return; } final int backgroundAlpha = 255 - textureAlpha; - textureOffset++; + sourceBitmapPixelAddress++; - targetRenderingAreaBytes[targetRenderingAreaOffset] = (byte) 255; - targetRenderingAreaOffset++; + targetBitmap[targetBitmapPixelAddress] = (byte) 255; + targetBitmapPixelAddress++; - targetRenderingAreaBytes[targetRenderingAreaOffset] = (byte) ((((targetRenderingAreaBytes[targetRenderingAreaOffset] & 0xff) * backgroundAlpha) + ((bytes[textureOffset] & 0xff) * textureAlpha)) / 256); - textureOffset++; - targetRenderingAreaOffset++; + targetBitmap[targetBitmapPixelAddress] = (byte) ((((targetBitmap[targetBitmapPixelAddress] & 0xff) * backgroundAlpha) + ((bytes[sourceBitmapPixelAddress] & 0xff) * textureAlpha)) / 256); + sourceBitmapPixelAddress++; + targetBitmapPixelAddress++; - targetRenderingAreaBytes[targetRenderingAreaOffset] = (byte) ((((targetRenderingAreaBytes[targetRenderingAreaOffset] & 0xff) * backgroundAlpha) + ((bytes[textureOffset] & 0xff) * textureAlpha)) / 256); - textureOffset++; - targetRenderingAreaOffset++; + targetBitmap[targetBitmapPixelAddress] = (byte) ((((targetBitmap[targetBitmapPixelAddress] & 0xff) * backgroundAlpha) + ((bytes[sourceBitmapPixelAddress] & 0xff) * textureAlpha)) / 256); + sourceBitmapPixelAddress++; + targetBitmapPixelAddress++; - targetRenderingAreaBytes[targetRenderingAreaOffset] = (byte) ((((targetRenderingAreaBytes[targetRenderingAreaOffset] & 0xff) * backgroundAlpha) + ((bytes[textureOffset] & 0xff) * textureAlpha)) / 256); + targetBitmap[targetBitmapPixelAddress] = (byte) ((((targetBitmap[targetBitmapPixelAddress] & 0xff) * backgroundAlpha) + ((bytes[sourceBitmapPixelAddress] & 0xff) * textureAlpha)) / 256); } public void drawPixel(final int x, final int y, final Color color) {