1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Merge pull request #9 from blawar/hd-textures

HD Texture Support
This commit is contained in:
Blake Warner 2022-03-25 01:42:20 -04:00 committed by GitHub
commit 2bd852508c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 51 additions and 9 deletions

View File

@ -560,7 +560,11 @@ TxFileStorage::TxFileStorage(uint32 options,
void TxFileStorage::buildFullPath() 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; tx_wstring filename = _cachePath + OSAL_DIR_SEPARATOR_STR + _filename;
#endif
wcstombs(cbuf, filename.c_str(), MAX_PATH * 2); wcstombs(cbuf, filename.c_str(), MAX_PATH * 2);
_fullPath = cbuf; _fullPath = cbuf;
} }
@ -743,7 +747,7 @@ bool TxFileStorage::add(Checksum checksum, GHQTexInfo *info, int dataSize)
return true; return true;
} }
bool TxFileStorage::get(Checksum checksum, GHQTexInfo *info) bool TxFileStorage::get(Checksum checksum, GHQTexInfo* info)
{ {
if (!checksum || _storage.empty()) if (!checksum || _storage.empty())
return false; return false;

View File

@ -50,6 +50,12 @@ struct Checksum
operator uint64() { operator uint64() {
return _checksum; return _checksum;
} }
bool operator ==(const Checksum& rhs) {
return _checksum == rhs._checksum;
}
bool operator !=(const Checksum& rhs) {
return _checksum != rhs._checksum;
}
}; };
class TxCacheImpl; class TxCacheImpl;

View File

@ -38,6 +38,11 @@
#include <malloc.h> #include <malloc.h>
#endif #endif
#define SWAP32(data) \
( (((data) >> 24) & 0x000000FF) | (((data) >> 8) & 0x0000FF00) | \
(((data) << 8) & 0x00FF0000) | (((data) << 24) & 0xFF000000) )
/* /*
* Utilities * 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), * (unsigned short)(rdp.tiles[tile].format << 8 | rdp.tiles[tile].size),
* bpl); * bpl);
*/ */
uint32 uint32
TxUtil::RiceCRC32(const uint8* src, int width, int height, int size, int rowStride) TxUtil::RiceCRC32(const uint8* src, int width, int height, int size, int rowStride)
{ {
@ -193,6 +199,11 @@ loop1:
while (x >= 0) while (x >= 0)
{ {
esi = *(uint32*)(src + x); esi = *(uint32*)(src + x);
#ifdef NATIVE
esi = SWAP32(esi);
#endif
esi ^= x; esi ^= x;
crc32Ret = (crc32Ret << 4) + ((crc32Ret >> 28) & 15); crc32Ret = (crc32Ret << 4) + ((crc32Ret >> 28) & 15);
@ -215,17 +226,18 @@ loop1:
static static
uint8 CalculateMaxCI8b(const uint8* src, uint32 width, uint32 height, uint32 rowStride) uint8 CalculateMaxCI8b(const uint8* src, uint32 width, uint32 height, uint32 rowStride)
{ {
uint8 val = 0; uint8 max = 0;
for (uint32 y = 0; y < height; ++y) { for (uint32 y = 0; y < height; ++y) {
const uint8 * buf = src + rowStride * y; const uint8 * buf = src + rowStride * y;
for (uint32 x = 0; x<width; ++x) { for (uint32 x = 0; x < width; ++x) {
if (buf[x] > val) if (buf[x] > max)
val = buf[x]; max = buf[x];
if (val == 0xFF) if (max == 0xFF)
return 0xFF; return 0xFF;
} }
} }
return val; return max;
} }
static static
@ -236,7 +248,7 @@ uint8 CalculateMaxCI4b(const uint8* src, uint32 width, uint32 height, uint32 row
width >>= 1; width >>= 1;
for (uint32 y = 0; y < height; ++y) { for (uint32 y = 0; y < height; ++y) {
const uint8 * buf = src + rowStride * y; const uint8 * buf = src + rowStride * y;
for (uint32 x = 0; x<width; ++x) { for (uint32 x = 0; x < width; ++x) {
val1 = buf[x] >> 4; val1 = buf[x] >> 4;
val2 = buf[x] & 0xF; val2 = buf[x] & 0xF;
if (val1 > val) val = val1; if (val1 > val) val = val1;

View File

@ -18,6 +18,8 @@
static u64 g_originalWidth = START_WIDTH;//Size set by the end-user static u64 g_originalWidth = START_WIDTH;//Size set by the end-user
static u64 g_width = START_WIDTH;//Current size static u64 g_width = START_WIDTH;//Current size
static u64 g_height = START_HEIGHT; 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" { extern "C" {
u64 gfx_width() u64 gfx_width()
@ -139,6 +141,24 @@ extern "C" {
RDRAMSize = (word)-1; RDRAMSize = (word)-1;
api().RomOpen(romName); 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) { void gfx_force_43(bool enable) {