Example usage for com.google.gwt.typedarrays.client ArrayBufferView getByteOffset

List of usage examples for com.google.gwt.typedarrays.client ArrayBufferView getByteOffset

Introduction

In this page you can find the example usage for com.google.gwt.typedarrays.client ArrayBufferView getByteOffset.

Prototype

public final native int getByteOffset() ;

Source Link

Document

The length of the ArrayBufferView in bytes, as fixed at construction time.

Usage

From source file:playn.html.HtmlGL20.java

License:Apache License

/**
 * Returns the typed array of the given native buffer.
 * Set byteSize to -1 to use remaining()
 *///from ww  w . j av a  2 s . c om
protected ArrayBufferView getTypedArray(Buffer buffer, int type, int byteSize) {
    if (!(buffer instanceof HasArrayBufferView)) {
        throw new RuntimeException("Native buffer required " + buffer);
    }
    HasArrayBufferView arrayHolder = (HasArrayBufferView) buffer;
    int bufferElementSize = arrayHolder.getElementSize();

    ArrayBufferView webGLArray = arrayHolder.getTypedArray();
    if (byteSize == -1) {
        byteSize = buffer.remaining() * bufferElementSize;
    }
    if (byteSize == buffer.capacity() * bufferElementSize && type == arrayHolder.getElementType()) {
        return webGLArray;
    }

    int byteOffset = webGLArray.getByteOffset() + buffer.position() * bufferElementSize;

    switch (type) {
    case FLOAT:
        return Float32Array.create(webGLArray.getBuffer(), byteOffset, byteSize / 4);
    case UNSIGNED_BYTE:
        return Uint8Array.create(webGLArray.getBuffer(), byteOffset, byteSize);
    case UNSIGNED_SHORT:
        return Uint16Array.create(webGLArray.getBuffer(), byteOffset, byteSize / 2);
    case INT:
        return Int32Array.create(webGLArray.getBuffer(), byteOffset, byteSize / 4);
    case SHORT:
        return Int16Array.create(webGLArray.getBuffer(), byteOffset, byteSize / 2);
    case BYTE:
        return Int8Array.create(webGLArray.getBuffer(), byteOffset, byteSize);
    default:
        throw new IllegalArgumentException("Type: " + type);
    }
}