From 423f5bf7f518433edcbf64accaf2cf5252cb4a63 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Thu, 9 Jun 2011 00:42:41 +0200 Subject: GLBuffers fix ; GL imageSizeInBytes fix / unit tests. - Moved implementation of prev GL imageSizeInBytes(..) -> GLBuffers.sizeof() for all GL profiles - GLBuffers.*: Added missing formats and types (GL2.1, GL3.3 and GL4.1) - GLBuffers.sizeof(): Fail fast if format/type is unhandled, or alignment invalid - Added unit test for GLBuffers.sizeof() --- .../jogl/gl-impl-CustomJavaCode-embedded.java | 41 ++-------------------- 1 file changed, 3 insertions(+), 38 deletions(-) (limited to 'make/config/jogl/gl-impl-CustomJavaCode-embedded.java') diff --git a/make/config/jogl/gl-impl-CustomJavaCode-embedded.java b/make/config/jogl/gl-impl-CustomJavaCode-embedded.java index 0408c21a1..e1273e679 100644 --- a/make/config/jogl/gl-impl-CustomJavaCode-embedded.java +++ b/make/config/jogl/gl-impl-CustomJavaCode-embedded.java @@ -1,42 +1,7 @@ -private int[] imageSizeTemp = new int[1]; -/** Helper for more precise computation of number of bytes that will - be touched by a pixel pack or unpack operation. */ -private int imageSizeInBytes(int bytesPerElement, - int rowLength, int imageHeight, int depth, boolean pack) { - int alignment = 1; + private int[] imageSizeTemp = new int[1]; - if (pack) { - glGetIntegerv(GL_PACK_ALIGNMENT, imageSizeTemp, 0); - alignment = imageSizeTemp[0]; - } else { - glGetIntegerv(GL_UNPACK_ALIGNMENT, imageSizeTemp, 0); - alignment = imageSizeTemp[0]; + private final int imageSizeInBytes(int format, int type, int width, int height, int depth, boolean pack) { + return GLBuffers.sizeof(this, imageSizeTemp, format, type, width, height, depth, pack) ; } - // Try to deal somewhat correctly with potentially invalid values - rowLength = Math.max(0, rowLength ); - imageHeight = Math.max(1, imageHeight); // min 1D - depth = Math.max(1, depth ); // min 1 * imageSize - alignment = Math.max(1, alignment); - - int rowLengthInBytes = rowLength * bytesPerElement; - - if (alignment > 1) { - int padding = rowLengthInBytes % alignment; - if (padding > 0) { - rowLengthInBytes += alignment - padding; - } - } - - /** - * depth is in multiples of image size. - * - * rowlenght is the actual repeating offset - * to go from line n to line n+1 at the same x-axis position. - */ - return - ( depth - 1 ) * imageHeight * rowLengthInBytes + // whole images - ( imageHeight - 1 ) * rowLengthInBytes + // lines with padding - ( rowLength ) * bytesPerElement; // last line -} -- cgit v1.2.3