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

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

Introduction

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

Prototype

public final native ArrayBuffer getBuffer() ;

Source Link

Document

The ArrayBuffer that this ArrayBufferView references.

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   w  w  w  . ja va  2 s  .  c  o m
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);
    }
}