public ByteBuffer readGrayscale2D(boolean flip, int totalSize) throws IOException {
        ByteBuffer buffer = BufferUtils.createByteBuffer(totalSize);

        if (bpp == 8) {
            logger.finest("Source image format: R8");
        }

        assert bpp == pixelFormat.getBitsPerPixel();

        int mipWidth = width;
        int mipHeight = height;

        for (int mip = 0; mip < mipMapCount; mip++) {
            byte[] data = new byte[sizes[mip]];
            in.readFully(data);
            if (flip) {
                data = flipData(data, mipWidth * bpp / 8, mipHeight);
            }
            buffer.put(data);

            mipWidth = Math.max(mipWidth / 2, 1);
            mipHeight = Math.max(mipHeight / 2, 1);
        }

        return buffer;
    }
Reads a grayscale image with mipmaps from the InputStream
@param flip Flip the loaded image by Y axis
@param totalSize Total size of the image in bytes including the mipmaps
@return A ByteBuffer containing the grayscale image data with mips.
@throws java.io.IOException If an error occurred while reading from InputStream
jme3-core/src/plugins/java/com/jme3/texture/plugins/DDSLoader.java