DirectByteBuffer (ArrayBuffer buffer, int capacity, int offset) { super(capacity); byteArray = Int8ArrayNative.create(buffer, offset, capacity); }
DirectByteBuffer (int capacity) { this(ArrayBufferNative.create(capacity), capacity, 0); }
@Override public void glTexSubImage2D (int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, Buffer pixels) { if (pixels.limit() > 1) { HasArrayBufferView arrayHolder = (HasArrayBufferView) pixels; ArrayBufferView webGLArray = arrayHolder.getTypedArray(); ArrayBufferView buffer; if (pixels instanceof FloatBuffer) { buffer = webGLArray; } else { int remainingBytes = pixels.remaining() * 4; int byteOffset = webGLArray.byteOffset() + pixels.position() * 4; buffer = Uint8ArrayNative.create(webGLArray.buffer(), byteOffset, remainingBytes); } gl.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, buffer); } else { Pixmap pixmap = Pixmap.pixmaps.get(((IntBuffer) pixels).get(0)); gl.texSubImage2D(target, level, xoffset, yoffset, format, type, pixmap.getCanvasElement()); } }
protected DataViewNativeEmul(ArrayBuffer buffer, int byteOffset, int byteLength) { this.buffer = buffer; this.bufferByteOffset = byteOffset; this.byteLength = byteLength; tempBuffer = Uint8ArrayNative.create(ArrayBufferNative.create(8), 0, 8); uint8Array = Uint8ArrayNative.create(buffer, byteOffset, byteLength); }
@Override public float getFloat32(int byteOffset, boolean littleEndian) { ArrayBuffer buf = buffer; int ofs = bufferByteOffset + byteOffset; int len = Float32Array.BYTES_PER_ELEMENT; if (littleEndian != nativeLittleEndian) { reverseBytes(uint8Array, ofs, len, tempBuffer, 0); buf = tempBuffer.buffer(); ofs = 0; } return Float32ArrayNative.create(buf, ofs, 1).get(0); }
@Override public int getInt32(int byteOffset, boolean littleEndian) { ArrayBuffer buf = buffer; int ofs = bufferByteOffset + byteOffset; int len = Int32Array.BYTES_PER_ELEMENT; if (littleEndian != nativeLittleEndian) { reverseBytes(uint8Array, ofs, len, tempBuffer, 0); buf = tempBuffer.buffer(); ofs = 0; } return Int32ArrayNative.create(buf, ofs, 1).get(0); }
@Override public short getInt16(int byteOffset, boolean littleEndian) { ArrayBuffer buf = buffer; int ofs = bufferByteOffset + byteOffset; int len = Int16Array.BYTES_PER_ELEMENT; if (littleEndian != nativeLittleEndian) { reverseBytes(uint8Array, ofs, len, tempBuffer, 0); buf = tempBuffer.buffer(); ofs = 0; } return Int16ArrayNative.create(buf, ofs, 1).get(0); }
@Override public long getUint32(int byteOffset, boolean littleEndian) { ArrayBuffer buf = buffer; int ofs = bufferByteOffset + byteOffset; int len = Uint32Array.BYTES_PER_ELEMENT; if (littleEndian != nativeLittleEndian) { reverseBytes(uint8Array, ofs, len, tempBuffer, 0); buf = tempBuffer.buffer(); ofs = 0; } return Uint32ArrayNative.create(buf, ofs, 1).get(0); }
@Override public double getFloat64(int byteOffset, boolean littleEndian) { ArrayBuffer buf = buffer; int ofs = bufferByteOffset + byteOffset; int len = Float64Array.BYTES_PER_ELEMENT; if (littleEndian != nativeLittleEndian) { reverseBytes(uint8Array, ofs, len, tempBuffer, 0); buf = tempBuffer.buffer(); ofs = 0; } return Float64ArrayNative.create(buf, ofs, 1).get(0); }
@Override public int getUint16(int byteOffset, boolean littleEndian) { ArrayBuffer buf = buffer; int ofs = bufferByteOffset + byteOffset; int len = Uint16Array.BYTES_PER_ELEMENT; if (littleEndian != nativeLittleEndian) { reverseBytes(uint8Array, ofs, len, tempBuffer, 0); buf = tempBuffer.buffer(); ofs = 0; } return Uint16ArrayNative.create(buf, ofs, 1).get(0); }
@Override public Uint8ClampedArray createUint8ClampedArray(int length) { if (checkUint8ClampedArraySupport()) { return Uint8ArrayNative.createClamped(length); } else { return Uint8ClampedArrayNativeEmul.create(createArrayBuffer(length), 0, length); } }
@Override public DataView createDataView(ArrayBuffer buffer, int byteOffset, int byteLength) { if (checkDataViewSupport()) { return DataViewNative.create(buffer, byteOffset, byteLength); } else { return DataViewNativeEmul.create(buffer, byteOffset, byteLength); } }
@Override public Uint8ClampedArray createUint8ClampedArray(short[] array) { if (checkUint8ClampedArraySupport()) { return Uint8ArrayNative.createClamped(array); } else { return Uint8ClampedArrayNativeEmul.create(array); } }
public static Uint8ClampedArray createUint8ClampedArray(JsArrayInteger array) { if (hasClampedArray()) { return Uint8ArrayNative.createClamped(array); } else { return Uint8ClampedArrayNativeEmul.create(array); } }
@Override public void glTexSubImage2D (int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, Buffer pixels) { if (pixels.limit() > 1) { HasArrayBufferView arrayHolder = (HasArrayBufferView) pixels; ArrayBufferView webGLArray = arrayHolder.getTypedArray(); ArrayBufferView buffer; if (pixels instanceof FloatBuffer) { buffer = webGLArray; } else { int remainingBytes = pixels.remaining() * 4; int byteOffset = webGLArray.byteOffset() + pixels.position() * 4; buffer = Uint8ArrayNative.create(webGLArray.buffer(), byteOffset, remainingBytes); } gl.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, buffer); } else { Pixmap pixmap = Pixmap.pixmaps.get(((IntBuffer) pixels).get(0)); gl.texSubImage2D(target, level, xoffset, yoffset, format, type, pixmap.getCanvasElement()); } }
@Override public Uint8ClampedArray createUint8ClampedArray(ArrayBuffer buffer, int byteOffset, int length) { if (checkUint8ClampedArraySupport()) { return Uint8ArrayNative.createClamped(buffer, byteOffset, length); } else { return Uint8ClampedArrayNativeEmul.create(buffer, byteOffset, length); } }
DirectByteBuffer (int capacity) { this(ArrayBufferNative.create(capacity), capacity, 0); }
DirectByteBuffer (ArrayBuffer buffer, int capacity, int offset) { super(capacity); byteArray = Int8ArrayNative.create(buffer, offset, capacity); }
@Override public void glTexImage2D (int target, int level, int internalformat, int width, int height, int border, int format, int type, Buffer pixels) { if (pixels == null) { gl.texImage2D(target, level, internalformat, width, height, border, format, type, null); } else { if (pixels.limit() > 1) { HasArrayBufferView arrayHolder = (HasArrayBufferView)pixels; ArrayBufferView webGLArray = arrayHolder.getTypedArray(); ArrayBufferView buffer; if (pixels instanceof FloatBuffer) { buffer = webGLArray; } else { int remainingBytes = pixels.remaining() * 4; int byteOffset = webGLArray.byteOffset() + pixels.position() * 4; buffer = Uint8ArrayNative.create(webGLArray.buffer(), byteOffset, remainingBytes); } gl.texImage2D(target, level, internalformat, width, height, border, format, type, buffer); } else { Pixmap pixmap = Pixmap.pixmaps.get(((IntBuffer)pixels).get(0)); // Prefer to use the HTMLImageElement when possible, since reading from the CanvasElement can be lossy. if (pixmap.canUseImageElement()) { gl.texImage2D(target, level, internalformat, format, type, pixmap.getImageElement()); } else { gl.texImage2D(target, level, internalformat, format, type, pixmap.getCanvasElement()); } } } }
@Override public void glTexImage2D (int target, int level, int internalformat, int width, int height, int border, int format, int type, Buffer pixels) { if (pixels == null) { gl.texImage2D(target, level, internalformat, width, height, border, format, type, null); } else { if (pixels.limit() > 1) { HasArrayBufferView arrayHolder = (HasArrayBufferView)pixels; ArrayBufferView webGLArray = arrayHolder.getTypedArray(); ArrayBufferView buffer; if (pixels instanceof FloatBuffer) { buffer = webGLArray; } else { int remainingBytes = pixels.remaining() * 4; int byteOffset = webGLArray.byteOffset() + pixels.position() * 4; buffer = Uint8ArrayNative.create(webGLArray.buffer(), byteOffset, remainingBytes); } gl.texImage2D(target, level, internalformat, width, height, border, format, type, buffer); } else { Pixmap pixmap = Pixmap.pixmaps.get(((IntBuffer)pixels).get(0)); // Prefer to use the HTMLImageElement when possible, since reading from the CanvasElement can be lossy. if (pixmap.canUseImageElement()) { gl.texImage2D(target, level, internalformat, format, type, pixmap.getImageElement()); } else { gl.texImage2D(target, level, internalformat, format, type, pixmap.getCanvasElement()); } } } }