空のbyteBufferが割り当てられています
data = ByteBuffer.allocateDirect(layerSize(0, faces - 1, 0, levels - 1) * layers);
この回答に続いてarray()
、次のようにメソッドを使用しようとしました
public void setData(ByteBuffer data, int layer, int face, int level) {
int offset = offset(layer, face, level);
int levelSize = levelSize(level);
this.data.put(data.array(), offset, levelSize);
}
しかし、私は得る:
Caused by: java.lang.UnsupportedOperationException
at java.nio.ByteBuffer.array(ByteBuffer.java:994)
私が使用しようとしているソースバイトバッファは、次のように読み取られます。
File file = new File(Load.class.getResource(fileName).getFile());
FileInputStream fileInputStream = new FileInputStream(file);
FileChannel fileChannel = fileInputStream.getChannel();
return loadKtx(fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, (int) file.length()));
public static Texture loadKtx(ByteBuffer byteBuffer) throws IOException {
...
byteBuffer.position(offset);
byteBuffer.limit(offset + faceSize);
ByteBuffer data = byteBuffer.slice();
texture.setData(data, layer, face, level);
byteBuffer.position(0);
byteBuffer.limit(byteBuffer.capacity());
シンプルよりも良いオプションはありますか
for (int b = 0; b < levelSize; b++) {
this.data.put(offset + b, data.get(b));
}
?
ただし、興味のある人のためにここにプロジェクト全体があります。