diff --git a/src/GLideNHQ/TxCache.cpp b/src/GLideNHQ/TxCache.cpp index 892887c2..4709edd4 100644 --- a/src/GLideNHQ/TxCache.cpp +++ b/src/GLideNHQ/TxCache.cpp @@ -559,8 +559,12 @@ TxFileStorage::TxFileStorage(uint32 options, void TxFileStorage::buildFullPath() { - char cbuf[MAX_PATH * 2]; + char cbuf[MAX_PATH * 2]; +#ifdef RELATIVE_PATHS + tx_wstring filename = _filename; +#else tx_wstring filename = _cachePath + OSAL_DIR_SEPARATOR_STR + _filename; +#endif wcstombs(cbuf, filename.c_str(), MAX_PATH * 2); _fullPath = cbuf; } @@ -743,7 +747,7 @@ bool TxFileStorage::add(Checksum checksum, GHQTexInfo *info, int dataSize) return true; } -bool TxFileStorage::get(Checksum checksum, GHQTexInfo *info) +bool TxFileStorage::get(Checksum checksum, GHQTexInfo* info) { if (!checksum || _storage.empty()) return false; diff --git a/src/GLideNHQ/TxCache.h b/src/GLideNHQ/TxCache.h index af06a954..34d40fd4 100644 --- a/src/GLideNHQ/TxCache.h +++ b/src/GLideNHQ/TxCache.h @@ -50,6 +50,12 @@ struct Checksum operator uint64() { return _checksum; } + bool operator ==(const Checksum& rhs) { + return _checksum == rhs._checksum; + } + bool operator !=(const Checksum& rhs) { + return _checksum != rhs._checksum; + } }; class TxCacheImpl; diff --git a/src/GLideNHQ/TxUtil.cpp b/src/GLideNHQ/TxUtil.cpp index fa6e4fce..2ce1820a 100644 --- a/src/GLideNHQ/TxUtil.cpp +++ b/src/GLideNHQ/TxUtil.cpp @@ -38,6 +38,11 @@ #include #endif +#define SWAP32(data) \ +( (((data) >> 24) & 0x000000FF) | (((data) >> 8) & 0x0000FF00) | \ + (((data) << 8) & 0x00FF0000) | (((data) << 24) & 0xFF000000) ) + + /* * Utilities ******************************************************************************/ @@ -140,6 +145,7 @@ TxUtil::checksum64(uint8 *src, int width, int height, int size, int rowStride, u * (unsigned short)(rdp.tiles[tile].format << 8 | rdp.tiles[tile].size), * bpl); */ + uint32 TxUtil::RiceCRC32(const uint8* src, int width, int height, int size, int rowStride) { @@ -193,6 +199,11 @@ loop1: while (x >= 0) { esi = *(uint32*)(src + x); + +#ifdef NATIVE + esi = SWAP32(esi); +#endif + esi ^= x; crc32Ret = (crc32Ret << 4) + ((crc32Ret >> 28) & 15); @@ -215,17 +226,18 @@ loop1: static uint8 CalculateMaxCI8b(const uint8* src, uint32 width, uint32 height, uint32 rowStride) { - uint8 val = 0; + uint8 max = 0; + for (uint32 y = 0; y < height; ++y) { const uint8 * buf = src + rowStride * y; - for (uint32 x = 0; x val) - val = buf[x]; - if (val == 0xFF) + for (uint32 x = 0; x < width; ++x) { + if (buf[x] > max) + max = buf[x]; + if (max == 0xFF) return 0xFF; } } - return val; + return max; } static @@ -236,7 +248,7 @@ uint8 CalculateMaxCI4b(const uint8* src, uint32 width, uint32 height, uint32 row width >>= 1; for (uint32 y = 0; y < height; ++y) { const uint8 * buf = src + rowStride * y; - for (uint32 x = 0; x> 4; val2 = buf[x] & 0xF; if (val1 > val) val = val1; diff --git a/src/native/Native.cpp b/src/native/Native.cpp index 9ef3d3be..55a2d2d8 100644 --- a/src/native/Native.cpp +++ b/src/native/Native.cpp @@ -18,6 +18,8 @@ static u64 g_originalWidth = START_WIDTH;//Size set by the end-user static u64 g_width = START_WIDTH;//Current size static u64 g_height = START_HEIGHT; +static int highres_enabled = 0;//1 if HD texture mode is enabled +static bool highres_hts = true; extern "C" { u64 gfx_width() @@ -139,6 +141,24 @@ extern "C" { RDRAMSize = (word)-1; api().RomOpen(romName); + + config.textureFilter.txHiresEnable = highres_enabled; + wsprintf(config.textureFilter.txCachePath, L"."); + config.textureFilter.txHiresTextureFileStorage = highres_hts ? 1 : 0; + } + + void gfx_switch_to_htc(bool enable) { + highres_hts = !enable; + config.textureFilter.txHiresTextureFileStorage = enable ? 0 : 1; + } + + bool gfx_is_highres_enabled() { + highres_enabled = 1; + return config.textureFilter.txHiresEnable; + } + + void gfx_highres_enable(bool enable) { + config.textureFilter.txHiresEnable = enable; } void gfx_force_43(bool enable) {