}
if (EXTabgr != tex.getEXTabgr()) {
throw new UnsupportedOperationException("Cannot create the 3D Texture : specified Sf3Texture's must be of the same internal format type (GL_RGBA, GL_EXT_abgr, etc.).");
}
}
Buffer newData = null;
switch (dataType) {
case DataBuffer.TYPE_BYTE:
newData = BufferIO._new(srcSize.width * srcSize.height * bands * depth, false);
break;
case DataBuffer.TYPE_DOUBLE:
newData = BufferIO._newd(srcSize.width * srcSize.height * bands * depth, false);
break;
case DataBuffer.TYPE_FLOAT:
newData = BufferIO._newf(srcSize.width * srcSize.height * bands * depth, false);
break;
case DataBuffer.TYPE_INT:
newData = BufferIO._newi(srcSize.width * srcSize.height * bands * depth, false);
break;
case DataBuffer.TYPE_SHORT:
case DataBuffer.TYPE_USHORT:
newData = BufferIO._news(srcSize.width * srcSize.height * bands * depth, false);
break;
default:
throw new UnsupportedOperationException("incompatible or unknown type :" + dataType/*
* dataBuffer.toString()
*/);
}
for (Sf3Texture tex : texs) {
for (int i = 0; i < _3DTexLayersAmount; i++) {
switch (tex.getPixelBufferDataType()) {
case DataBuffer.TYPE_BYTE:
((ByteBuffer) newData).put((ByteBuffer) tex.accessPixelBuffer());
break;
case DataBuffer.TYPE_DOUBLE:
((DoubleBuffer) newData).put((DoubleBuffer) tex.accessPixelBuffer());
break;
case DataBuffer.TYPE_FLOAT:
((FloatBuffer) newData).put((FloatBuffer) tex.accessPixelBuffer());
break;
case DataBuffer.TYPE_INT:
((IntBuffer) newData).put((IntBuffer) tex.accessPixelBuffer());
break;
case DataBuffer.TYPE_SHORT:
case DataBuffer.TYPE_USHORT:
((ShortBuffer) newData).put((ShortBuffer) tex.accessPixelBuffer());
break;
default:
throw new UnsupportedOperationException("incompatible or unknown type :" + tex.getPixelBufferDataTypeName());
}
}
}
newData.flip();
Buffer pixelBuffer = newData;
return new Sf3Texture3D(hashCode, pixelBuffer, EXTabgr, srcSize.width, srcSize.height, depth, bands);
}