Add most Japanese kanji, the brute force way.

Hope everything supports 2048x2048 textures.
This commit is contained in:
Henrik Rydgard 2013-04-18 14:59:00 +02:00
parent 32f344d6bd
commit 42e4dc897e
17 changed files with 43858 additions and 1039 deletions

File diff suppressed because it is too large Load diff

View file

@ -169,8 +169,8 @@ static void ReadClut32(u32 *clutBuf32) {
} }
} }
void *TextureCache::UnswizzleFromMem(u32 texaddr, u32 bytesPerPixel, u32 level) { void *TextureCache::UnswizzleFromMem(u32 texaddr, u32 bufw, u32 bytesPerPixel, u32 level) {
const u32 rowWidth = (bytesPerPixel > 0) ? ((gstate.texbufwidth[level] & 0x3FF) * bytesPerPixel) : ((gstate.texbufwidth[level] & 0x3FF) / 2); const u32 rowWidth = (bytesPerPixel > 0) ? (bufw * bytesPerPixel) : ((bufw & 0x3FF) / 2);
const u32 pitch = rowWidth / 4; const u32 pitch = rowWidth / 4;
const int bxc = rowWidth / 16; const int bxc = rowWidth / 16;
int byc = ((1 << ((gstate.texsize[level] >> 8) & 0xf)) + 7) / 8; int byc = ((1 << ((gstate.texsize[level] >> 8) & 0xf)) + 7) / 8;
@ -260,7 +260,12 @@ inline void DeIndexTextureNoSwizzle(ClutT *dest, const u32 texaddr, int length,
} }
void *TextureCache::readIndexedTex(int level, u32 texaddr, int bytesPerIndex) { void *TextureCache::readIndexedTex(int level, u32 texaddr, int bytesPerIndex) {
int length = (gstate.texbufwidth[level] & 0x3FF) * (1 << ((gstate.texsize[level] >> 8) & 0xf)); // Special rules for kernel textures (PPGe):
int mask = 0x3FF;
if (texaddr < 0x08800000)
mask = 0x1FFF;
int bufw = gstate.texbufwidth[level] & mask;
int length = bufw * (1 << ((gstate.texsize[level] >> 8) & 0xf));
void *buf = NULL; void *buf = NULL;
switch ((gstate.clutformat & 3)) { switch ((gstate.clutformat & 3)) {
case GE_CMODE_16BIT_BGR5650: case GE_CMODE_16BIT_BGR5650:
@ -286,7 +291,7 @@ void *TextureCache::readIndexedTex(int level, u32 texaddr, int bytesPerIndex) {
} }
} else { } else {
const u16 *clut = clutBuf16; const u16 *clut = clutBuf16;
UnswizzleFromMem(texaddr, bytesPerIndex, level); UnswizzleFromMem(texaddr, bufw, bytesPerIndex, level);
switch (bytesPerIndex) { switch (bytesPerIndex) {
case 1: case 1:
DeIndexTexture(tmpTexBuf16.data(), (u8 *) tmpTexBuf32.data(), length, clut); DeIndexTexture(tmpTexBuf16.data(), (u8 *) tmpTexBuf32.data(), length, clut);
@ -327,7 +332,7 @@ void *TextureCache::readIndexedTex(int level, u32 texaddr, int bytesPerIndex) {
buf = tmpTexBuf32.data(); buf = tmpTexBuf32.data();
} else { } else {
const u32 *clut = clutBuf32; const u32 *clut = clutBuf32;
UnswizzleFromMem(texaddr, bytesPerIndex, level); UnswizzleFromMem(texaddr, bufw, bytesPerIndex, level);
// Since we had to unswizzle to tmpTexBuf32, let's output to tmpTexBuf16. // Since we had to unswizzle to tmpTexBuf32, let's output to tmpTexBuf16.
tmpTexBuf16.resize(length * 2); tmpTexBuf16.resize(length * 2);
u32 *dest32 = (u32 *) tmpTexBuf16.data(); u32 *dest32 = (u32 *) tmpTexBuf16.data();
@ -902,8 +907,10 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level)
u32 texaddr = (gstate.texaddr[level] & 0xFFFFF0) | ((gstate.texbufwidth[level] << 8) & 0x0F000000); u32 texaddr = (gstate.texaddr[level] & 0xFFFFF0) | ((gstate.texbufwidth[level] << 8) & 0x0F000000);
int bufw = gstate.texbufwidth[level] & 0x3ff; int mask = 0x3ff;
if (texaddr < 0x08800000)
mask = 0x1FFF;
int bufw = gstate.texbufwidth[level] & mask;
int w = 1 << (gstate.texsize[level] & 0xf); int w = 1 << (gstate.texsize[level] & 0xf);
int h = 1 << ((gstate.texsize[level] >> 8) & 0xf); int h = 1 << ((gstate.texsize[level] >> 8) & 0xf);
@ -934,7 +941,7 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level)
tmpTexBuf16[i + 1] = clut[GetClutIndex((index >> 4) & 0xf) + clutSharingOffset]; tmpTexBuf16[i + 1] = clut[GetClutIndex((index >> 4) & 0xf) + clutSharingOffset];
} }
} else { } else {
UnswizzleFromMem(texaddr, 0, level); UnswizzleFromMem(texaddr, bufw, 0, level);
for (int i = 0, j = 0; i < bufw * h; i += 8, j++) for (int i = 0, j = 0; i < bufw * h; i += 8, j++)
{ {
u32 n = tmpTexBuf32[j]; u32 n = tmpTexBuf32[j];
@ -951,6 +958,7 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level)
case GE_CMODE_32BIT_ABGR8888: case GE_CMODE_32BIT_ABGR8888:
{ {
tmpTexBuf32.resize(bufw * h);
ReadClut32(clutBuf32); ReadClut32(clutBuf32);
const u32 *clut = clutBuf32; const u32 *clut = clutBuf32;
u32 clutSharingOff = 0;//gstate.mipmapShareClut ? 0 : level * 16; u32 clutSharingOff = 0;//gstate.mipmapShareClut ? 0 : level * 16;
@ -964,7 +972,7 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level)
} }
} else { } else {
u32 pixels = bufw * h; u32 pixels = bufw * h;
UnswizzleFromMem(texaddr, 0, level); UnswizzleFromMem(texaddr, bufw, 0, level);
for (int i = pixels - 8, j = (pixels / 8) - 1; i >= 0; i -= 8, j--) { for (int i = pixels - 8, j = (pixels / 8) - 1; i >= 0; i -= 8, j--) {
u32 n = tmpTexBuf32[j]; u32 n = tmpTexBuf32[j];
for (int k = 0; k < 8; k++) { for (int k = 0; k < 8; k++) {
@ -1021,7 +1029,7 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level)
finalBuf = tmpTexBuf16.data(); finalBuf = tmpTexBuf16.data();
} }
else else
finalBuf = UnswizzleFromMem(texaddr, 2, level); finalBuf = UnswizzleFromMem(texaddr, bufw, 2, level);
break; break;
case GE_TFMT_8888: case GE_TFMT_8888:
@ -1033,7 +1041,7 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level)
finalBuf = tmpTexBuf32.data(); finalBuf = tmpTexBuf32.data();
} }
else else
finalBuf = UnswizzleFromMem(texaddr, 4, level); finalBuf = UnswizzleFromMem(texaddr, bufw, 4, level);
break; break;
case GE_TFMT_DXT1: case GE_TFMT_DXT1:
@ -1168,7 +1176,8 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
const u8 *texptr = Memory::GetPointer(texaddr); const u8 *texptr = Memory::GetPointer(texaddr);
int bufw = gstate.texbufwidth[0] & 0x3ff; int mask = texaddr < 0x08800000 ? 0x1FFF : 0x3ff;
int bufw = gstate.texbufwidth[0] & mask;
int w = 1 << (gstate.texsize[0] & 0xf); int w = 1 << (gstate.texsize[0] & 0xf);
int h = 1 << ((gstate.texsize[0]>>8) & 0xf); int h = 1 << ((gstate.texsize[0]>>8) & 0xf);
@ -1206,7 +1215,7 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
tmpTexBuf16[i + 1] = clut[GetClutIndex((index >> 4) & 0xf) + clutSharingOff]; tmpTexBuf16[i + 1] = clut[GetClutIndex((index >> 4) & 0xf) + clutSharingOff];
} }
} else { } else {
UnswizzleFromMem(texaddr, 0, level); UnswizzleFromMem(texaddr, bufw, 0, level);
for (int i = 0, j = 0; i < bufw * h; i += 8, j++) for (int i = 0, j = 0; i < bufw * h; i += 8, j++)
{ {
u32 n = tmpTexBuf32[j]; u32 n = tmpTexBuf32[j];
@ -1236,7 +1245,7 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
} }
} else { } else {
u32 pixels = bufw * h; u32 pixels = bufw * h;
UnswizzleFromMem(texaddr, 0, level); UnswizzleFromMem(texaddr, bufw, 0, level);
for (int i = pixels - 8, j = (pixels / 8) - 1; i >= 0; i -= 8, j--) { for (int i = pixels - 8, j = (pixels / 8) - 1; i >= 0; i -= 8, j--) {
u32 n = tmpTexBuf32[j]; u32 n = tmpTexBuf32[j];
for (int k = 0; k < 8; k++) { for (int k = 0; k < 8; k++) {
@ -1293,7 +1302,7 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
finalBuf = tmpTexBuf16.data(); finalBuf = tmpTexBuf16.data();
} }
else else
finalBuf = UnswizzleFromMem(texaddr, 2, level); finalBuf = UnswizzleFromMem(texaddr, bufw, 2, level);
break; break;
case GE_TFMT_8888: case GE_TFMT_8888:
@ -1305,7 +1314,7 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
finalBuf = tmpTexBuf32.data(); finalBuf = tmpTexBuf32.data();
} }
else else
finalBuf = UnswizzleFromMem(texaddr, 4, level); finalBuf = UnswizzleFromMem(texaddr, bufw, 4, level);
break; break;
case GE_TFMT_DXT1: case GE_TFMT_DXT1:

View file

@ -87,7 +87,7 @@ private:
}; };
void Decimate(); // Run this once per frame to get rid of old textures. void Decimate(); // Run this once per frame to get rid of old textures.
void *UnswizzleFromMem(u32 texaddr, u32 bytesPerPixel, u32 level); void *UnswizzleFromMem(u32 texaddr, u32 bufw, u32 bytesPerPixel, u32 level);
void *readIndexedTex(int level, u32 texaddr, int bytesPerIndex); void *readIndexedTex(int level, u32 texaddr, int bytesPerIndex);
void UpdateSamplingParams(TexCacheEntry &entry, bool force); void UpdateSamplingParams(TexCacheEntry &entry, bool force);
void LoadTextureLevel(TexCacheEntry &entry, int level); void LoadTextureLevel(TexCacheEntry &entry, int level);

View file

@ -665,27 +665,21 @@ void SystemScreen::render() {
UICheckBox(GEN_ID, x, y += stride, s->T("Show Debug Statistics"), ALIGN_TOPLEFT, &g_Config.bShowDebugStats); UICheckBox(GEN_ID, x, y += stride, s->T("Show Debug Statistics"), ALIGN_TOPLEFT, &g_Config.bShowDebugStats);
UICheckBox(GEN_ID, x, y += stride, s->T("Show FPS"), ALIGN_TOPLEFT, &g_Config.bShowFPSCounter); UICheckBox(GEN_ID, x, y += stride, s->T("Show FPS"), ALIGN_TOPLEFT, &g_Config.bShowFPSCounter);
// TODO: Make a dynamic language selector that looks for INI files. VLinear vlang(600, 70, 10);
VLinear vlang(500, 70, 10); // TODO: Make a dynamic language selector that looks for INI files.
if (UIButton(GEN_ID, vlang, LARGE_BUTTON_WIDTH, 0, "English", ALIGN_TOPLEFT)) { #define NUMLANGS 6
g_Config.languageIni = "en_US"; static const char *langs[NUMLANGS] = {"English", "Swedish", "German", "Chinese", "Japanese", "Russian"};
static const char *langCodes[NUMLANGS] = {"en_US", "sv_SE", "de_DE", "zh_CN", "ja_JA", "ru_RU"};
for (int i = 0; i < 6; i++) {
if (UIButton(GEN_ID_LOOP(i), vlang, LARGE_BUTTON_WIDTH, 0, langs[i], ALIGN_TOPLEFT)) {
g_Config.languageIni = langCodes[i];
i18nrepo.LoadIni(g_Config.languageIni); i18nrepo.LoadIni(g_Config.languageIni);
// After this, g and s are no longer valid. Let's return, some flicker is okay. // After this, g and s are no longer valid. Let's return, some flicker is okay.
g = GetI18NCategory("General"); g = GetI18NCategory("General");
s = GetI18NCategory("System"); s = GetI18NCategory("System");
} }
if (UIButton(GEN_ID, vlang, LARGE_BUTTON_WIDTH, 0, "Swedish", ALIGN_TOPLEFT)) {
g_Config.languageIni = "sv_SE";
i18nrepo.LoadIni(g_Config.languageIni);
g = GetI18NCategory("General");
s = GetI18NCategory("System");
}
if (UIButton(GEN_ID, vlang, LARGE_BUTTON_WIDTH, 0, "German", ALIGN_TOPLEFT)) {
g_Config.languageIni = "de_DE";
i18nrepo.LoadIni(g_Config.languageIni);
g = GetI18NCategory("General");
s = GetI18NCategory("System");
} }
UIEnd(); UIEnd();
} }

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,5 +1,5 @@
1024 2048
font UBUNTU24 C:/Windows/Fonts/KozGoPro-Medium.otf UWhk 30 font UBUNTU24 C:/Windows/Fonts/KozGoPro-Medium.otf UWhkcRG 30
font UBUNTU48 source_assets/font/zrnic.ttf UW 55 font UBUNTU48 source_assets/font/zrnic.ttf UW 55
image SOLIDWHITE white.png copy image SOLIDWHITE white.png copy
image I_CROSS source_assets/image/cross.png copy image I_CROSS source_assets/image/cross.png copy

View file

@ -1,8 +1,9 @@
[MainMenu] [MainMenu]
Credits = Credits Credits = Credits
Exit = Quit Exit = Exit
Load = Load... Load = Load...
Settings = Settings Settings = Settings
Recent = Recent
[Developer] [Developer]
Dump frame to log = Dump frame to log Dump frame to log = Dump frame to log
Load language ini = Load language ini Load language ini = Load language ini
@ -28,3 +29,21 @@ Fast Memory = Fast Memory (unstable)
Show Debug Statistics = Show Debug Statistics Show Debug Statistics = Show Debug Statistics
Show FPS = Show FPS Show FPS = Show FPS
System Settings = System Settings System Settings = System Settings
[Audio]
Audio Settings = Audio Settings
Enable Sound = Enable Sound
[Controls]
Controls Settings = Controls Settings
OnScreen = On-Screen Touch Controls
Tilt = Tilt to Analog (horizontal)
[Graphics]
2X = 2x Render Resolution
Buffered Rendering = Buffered Rendering
Frame Skipping = Frame Skipping
Graphics Settings = Graphics Settings
Hardware Transform = Hardware Transform
Linear Filtering = Linear Filtering
Media Engine = Media Engine
Mipmapping = Mipmapping
Stream VBO = Stream VBO
Vertex Cache = Vertex Cache

49
lang/ja_JA.ini Normal file
View file

@ -0,0 +1,49 @@
[MainMenu]
Credits = Credits
Exit = 終了する
Load = Load...
Settings = 設定
Recent = Recent
[Developer]
Dump frame to log = Dump frame to log
Load language ini = Load language ini
Run CPU tests = Run CPU tests
Save language ini = Save language ini
[General]
Back = Back
[MainSettings]
Audio = Audio
AudioDesc = Adjust Audio Settings
Controls = Controls
ControlsDesc = On Screen Controls, Large Buttons
Developer = Developer
DeveloperDesc = Run CPU test, Dump Next Frame Log
Graphics = Graphics
GraphicsDesc = Change graphics options
Settings = Settings
System = System
SystemDesc = Turn on Dynarec (JIT), Fast Memory
[System]
Dynarec = Dynarec (JIT)
Fast Memory = Fast Memory (unstable)
Show Debug Statistics = Show Debug Statistics
Show FPS = Show FPS
System Settings = System Settings
[Audio]
Audio Settings = Audio Settings
Enable Sound = Enable Sound
[Controls]
Controls Settings = Controls Settings
OnScreen = On-Screen Touch Controls
Tilt = Tilt to Analog (horizontal)
[Graphics]
2X = 2x Render Resolution
Buffered Rendering = Buffered Rendering
Frame Skipping = Frame Skipping
Graphics Settings = Graphics Settings
Hardware Transform = Hardware Transform
Linear Filtering = Linear Filtering
Media Engine = Media Engine
Mipmapping = Mipmapping
Stream VBO = Stream VBO
Vertex Cache = Vertex Cache

49
lang/ru_RU.ini Normal file
View file

@ -0,0 +1,49 @@
[MainMenu]
Credits = Credits
Exit = Выход
Load = Load...
Settings = настройки
Recent = Recent
[Developer]
Dump frame to log = Dump frame to log
Load language ini = Load language ini
Run CPU tests = Run CPU tests
Save language ini = Save language ini
[General]
Back = Back
[MainSettings]
Audio = Audio
AudioDesc = Adjust Audio Settings
Controls = Controls
ControlsDesc = On Screen Controls, Large Buttons
Developer = Developer
DeveloperDesc = Run CPU test, Dump Next Frame Log
Graphics = Graphics
GraphicsDesc = Change graphics options
Settings = Settings
System = System
SystemDesc = Turn on Dynarec (JIT), Fast Memory
[System]
Dynarec = Dynarec (JIT)
Fast Memory = Fast Memory (unstable)
Show Debug Statistics = Show Debug Statistics
Show FPS = Show FPS
System Settings = System Settings
[Audio]
Audio Settings = Audio Settings
Enable Sound = Enable Sound
[Controls]
Controls Settings = Controls Settings
OnScreen = On-Screen Touch Controls
Tilt = Tilt to Analog (horizontal)
[Graphics]
2X = 2x Render Resolution
Buffered Rendering = Buffered Rendering
Frame Skipping = Frame Skipping
Graphics Settings = Graphics Settings
Hardware Transform = Hardware Transform
Linear Filtering = Linear Filtering
Media Engine = Media Engine
Mipmapping = Mipmapping
Stream VBO = Stream VBO
Vertex Cache = Vertex Cache

View file

@ -5,7 +5,7 @@ Credits = Om
Exit = Avsluta Exit = Avsluta
Load = Ladda... Load = Ladda...
Settings = Inställningar Settings = Inställningar
Recent = Recent Recent = Senaste
[Developer] [Developer]
Dump frame to log = Dumpa frame till logg Dump frame to log = Dumpa frame till logg
Load language ini = Ladda språk-ini Load language ini = Ladda språk-ini

49
lang/zh_CN.ini Normal file
View file

@ -0,0 +1,49 @@
[MainMenu]
Credits = Credits
Exit = Exit
Load = Load...
Settings = Settings
Recent = Recent
[Developer]
Dump frame to log = Dump frame to log
Load language ini = Load language ini
Run CPU tests = Run CPU tests
Save language ini = Save language ini
[General]
Back = Back
[MainSettings]
Audio = Audio
AudioDesc = Adjust Audio Settings
Controls = Controls
ControlsDesc = On Screen Controls, Large Buttons
Developer = Developer
DeveloperDesc = Run CPU test, Dump Next Frame Log
Graphics = Graphics
GraphicsDesc = Change graphics options
Settings = Settings
System = System
SystemDesc = Turn on Dynarec (JIT), Fast Memory
[System]
Dynarec = Dynarec (JIT)
Fast Memory = Fast Memory (unstable)
Show Debug Statistics = Show Debug Statistics
Show FPS = Show FPS
System Settings = System Settings
[Audio]
Audio Settings = Audio Settings
Enable Sound = Enable Sound
[Controls]
Controls Settings = Controls Settings
OnScreen = On-Screen Touch Controls
Tilt = Tilt to Analog (horizontal)
[Graphics]
2X = 2x Render Resolution
Buffered Rendering = Buffered Rendering
Frame Skipping = Frame Skipping
Graphics Settings = Graphics Settings
Hardware Transform = Hardware Transform
Linear Filtering = Linear Filtering
Media Engine = Media Engine
Mipmapping = Mipmapping
Stream VBO = Stream VBO
Vertex Cache = Vertex Cache

2
native

@ -1 +1 @@
Subproject commit 43b78be9dd5d343a2133e42501ba9b56552c9d4e Subproject commit 3494d9282d1319c7ea982f7d6e4fb7687a151046

View file

@ -1,5 +1,5 @@
512 2048
font UBUNTU24 C:/Windows/Fonts/KozGoPro-Medium.otf UWkh 24 font UBUNTU24 C:/Windows/Fonts/KozGoPro-Medium.otf UWkhcGR 24
image I_CROSS source_assets/image/cross.png copy image I_CROSS source_assets/image/cross.png copy
image I_CIRCLE source_assets/image/circle.png copy image I_CIRCLE source_assets/image/circle.png copy
image I_SQUARE source_assets/image/square.png copy image I_SQUARE source_assets/image/square.png copy