#include #include "Texture2DDecoder.h" #include "bcn.h" #include "pvrtc.h" #include "etc.h" #include "atc.h" #include "astc.h" #include "crunch.h" #include "unitycrunch.h" namespace Texture2DDecoder { bool TextureDecoder::DecodeDXT1(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_bc1(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeDXT5(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_bc3(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodePVRTC(array^ data, long w, long h, array^ image, bool is2bpp) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_pvrtc(dataPin, w, h, reinterpret_cast(imagePin), is2bpp ? 1 : 0); } bool TextureDecoder::DecodeETC1(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_etc1(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeETC2(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_etc2(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeETC2A1(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_etc2a1(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeETC2A8(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_etc2a8(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeEACR(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_eacr(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeEACRSigned(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_eacr_signed(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeEACRG(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_eacrg(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeEACRGSigned(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_eacrg_signed(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeBC4(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_bc4(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeBC5(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_bc5(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeBC6(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_bc6(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeBC7(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_bc7(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeATCRGB4(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_atc_rgb4(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeATCRGBA8(array^ data, long w, long h, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_atc_rgba8(dataPin, w, h, reinterpret_cast(imagePin)); } bool TextureDecoder::DecodeASTC(array^ data, long w, long h, int bw, int bh, array^ image) { pin_ptr dataPin = &data[0]; pin_ptr imagePin = &image[0]; return decode_astc(dataPin, w, h, bw, bh, reinterpret_cast(imagePin)); } array^ TextureDecoder::UnpackCrunch(array^ data) { pin_ptr dataPin = &data[0]; void* ret; uint32_t retSize; if (!crunch_unpack_level(dataPin, data->Length, 0, &ret, &retSize)) { return nullptr; } auto buff = gcnew array(retSize); pin_ptr buffPin = &buff[0]; memcpy(buffPin, ret, retSize); delete ret; return buff; } array^ TextureDecoder::UnpackUnityCrunch(array^ data) { pin_ptr dataPin = &data[0]; void* ret; uint32_t retSize; if (!unity_crunch_unpack_level(dataPin, data->Length, 0, &ret, &retSize)) { return nullptr; } auto buff = gcnew array(retSize); pin_ptr buffPin = &buff[0]; memcpy(buffPin, ret, retSize); delete ret; return buff; } }