#include "StdAfxSA.h" #include "PNGFile.h" RwTexture* CPNGFile::ReadFromFile(const char* pFileName) { RwTexture* pTexture = nullptr; if ( RwImage* pImage = RtPNGImageRead(pFileName) ) { RwInt32 dwWidth, dwHeight, dwDepth, dwFlags; RwImageFindRasterFormat(pImage, rwRASTERTYPETEXTURE, &dwWidth, &dwHeight, &dwDepth, &dwFlags); if ( RwRaster* pRaster = RwRasterCreate(dwWidth, dwHeight, dwDepth, dwFlags) ) { RwRasterSetFromImage(pRaster, pImage); pTexture = RwTextureCreate(pRaster); //if ( pTexture ) // RwTextureSetName(pTexture, pFileName); } RwImageDestroy(pImage); } return pTexture; } RwTexture* CPNGFile::ReadFromMemory(const void* pMemory, unsigned int nLen) { static uint8_t* const pMem = AddressByVersion<uint8_t*>(0x7CF9CA, 0x7D02CA, 0x80998A); RwTexture* pTexture = nullptr; uint8_t oldMemory = *pMem; Memory::VP::Patch<uint8_t>(pMem, rwSTREAMMEMORY); RwMemory PNGMemory; PNGMemory.start = const_cast<RwUInt8*>(static_cast<const RwUInt8*>(pMemory)); PNGMemory.length = nLen; if ( RwImage* pImage = RtPNGImageRead(reinterpret_cast<RwChar*>(&PNGMemory)) ) { RwInt32 dwWidth, dwHeight, dwDepth, dwFlags; RwImageFindRasterFormat(pImage, rwRASTERTYPETEXTURE, &dwWidth, &dwHeight, &dwDepth, &dwFlags); if ( RwRaster* pRaster = RwRasterCreate(dwWidth, dwHeight, dwDepth, dwFlags) ) { RwRasterSetFromImage(pRaster, pImage); pTexture = RwTextureCreate(pRaster); //if ( pTexture ) // RwTextureSetName(pTexture, pFileName); } RwImageDestroy(pImage); } Memory::VP::Patch<uint8_t>(pMem, oldMemory); return pTexture; }