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) {
const u32 rowWidth = (bytesPerPixel > 0) ? ((gstate.texbufwidth[level] & 0x3FF) * bytesPerPixel) : ((gstate.texbufwidth[level] & 0x3FF) / 2);
void *TextureCache::UnswizzleFromMem(u32 texaddr, u32 bufw, u32 bytesPerPixel, u32 level) {
const u32 rowWidth = (bytesPerPixel > 0) ? (bufw * bytesPerPixel) : ((bufw & 0x3FF) / 2);
const u32 pitch = rowWidth / 4;
const int bxc = rowWidth / 16;
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) {
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;
switch ((gstate.clutformat & 3)) {
case GE_CMODE_16BIT_BGR5650:
@ -286,7 +291,7 @@ void *TextureCache::readIndexedTex(int level, u32 texaddr, int bytesPerIndex) {
}
} else {
const u16 *clut = clutBuf16;
UnswizzleFromMem(texaddr, bytesPerIndex, level);
UnswizzleFromMem(texaddr, bufw, bytesPerIndex, level);
switch (bytesPerIndex) {
case 1:
DeIndexTexture(tmpTexBuf16.data(), (u8 *) tmpTexBuf32.data(), length, clut);
@ -327,7 +332,7 @@ void *TextureCache::readIndexedTex(int level, u32 texaddr, int bytesPerIndex) {
buf = tmpTexBuf32.data();
} else {
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.
tmpTexBuf16.resize(length * 2);
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);
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 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];
}
} else {
UnswizzleFromMem(texaddr, 0, level);
UnswizzleFromMem(texaddr, bufw, 0, level);
for (int i = 0, j = 0; i < bufw * h; i += 8, j++)
{
u32 n = tmpTexBuf32[j];
@ -951,6 +958,7 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level)
case GE_CMODE_32BIT_ABGR8888:
{
tmpTexBuf32.resize(bufw * h);
ReadClut32(clutBuf32);
const u32 *clut = clutBuf32;
u32 clutSharingOff = 0;//gstate.mipmapShareClut ? 0 : level * 16;
@ -964,7 +972,7 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level)
}
} else {
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--) {
u32 n = tmpTexBuf32[j];
for (int k = 0; k < 8; k++) {
@ -1021,7 +1029,7 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level)
finalBuf = tmpTexBuf16.data();
}
else
finalBuf = UnswizzleFromMem(texaddr, 2, level);
finalBuf = UnswizzleFromMem(texaddr, bufw, 2, level);
break;
case GE_TFMT_8888:
@ -1033,7 +1041,7 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level)
finalBuf = tmpTexBuf32.data();
}
else
finalBuf = UnswizzleFromMem(texaddr, 4, level);
finalBuf = UnswizzleFromMem(texaddr, bufw, 4, level);
break;
case GE_TFMT_DXT1:
@ -1168,7 +1176,8 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
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 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];
}
} else {
UnswizzleFromMem(texaddr, 0, level);
UnswizzleFromMem(texaddr, bufw, 0, level);
for (int i = 0, j = 0; i < bufw * h; i += 8, j++)
{
u32 n = tmpTexBuf32[j];
@ -1236,7 +1245,7 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
}
} else {
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--) {
u32 n = tmpTexBuf32[j];
for (int k = 0; k < 8; k++) {
@ -1293,7 +1302,7 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
finalBuf = tmpTexBuf16.data();
}
else
finalBuf = UnswizzleFromMem(texaddr, 2, level);
finalBuf = UnswizzleFromMem(texaddr, bufw, 2, level);
break;
case GE_TFMT_8888:
@ -1305,7 +1314,7 @@ bool TextureCache::DecodeTexture(u8* output, GPUgstate state)
finalBuf = tmpTexBuf32.data();
}
else
finalBuf = UnswizzleFromMem(texaddr, 4, level);
finalBuf = UnswizzleFromMem(texaddr, bufw, 4, level);
break;
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 *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 UpdateSamplingParams(TexCacheEntry &entry, bool force);
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 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);
if (UIButton(GEN_ID, vlang, LARGE_BUTTON_WIDTH, 0, "English", ALIGN_TOPLEFT)) {
g_Config.languageIni = "en_US";
i18nrepo.LoadIni(g_Config.languageIni);
// After this, g and s are no longer valid. Let's return, some flicker is okay.
g = GetI18NCategory("General");
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");
// TODO: Make a dynamic language selector that looks for INI files.
#define NUMLANGS 6
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);
// After this, g and s are no longer valid. Let's return, some flicker is okay.
g = GetI18NCategory("General");
s = GetI18NCategory("System");
}
}
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
font UBUNTU24 C:/Windows/Fonts/KozGoPro-Medium.otf UWhk 30
2048
font UBUNTU24 C:/Windows/Fonts/KozGoPro-Medium.otf UWhkcRG 30
font UBUNTU48 source_assets/font/zrnic.ttf UW 55
image SOLIDWHITE white.png copy
image I_CROSS source_assets/image/cross.png copy

View file

@ -1,8 +1,9 @@
[MainMenu]
Credits = Credits
Exit = Quit
Exit = Exit
Load = Load...
Settings = Settings
Recent = Recent
[Developer]
Dump frame to log = Dump frame to log
Load language ini = Load language ini
@ -28,3 +29,21 @@ 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/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
Load = Ladda...
Settings = Inställningar
Recent = Recent
Recent = Senaste
[Developer]
Dump frame to log = Dumpa frame till logg
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
font UBUNTU24 C:/Windows/Fonts/KozGoPro-Medium.otf UWkh 24
2048
font UBUNTU24 C:/Windows/Fonts/KozGoPro-Medium.otf UWkhcGR 24
image I_CROSS source_assets/image/cross.png copy
image I_CIRCLE source_assets/image/circle.png copy
image I_SQUARE source_assets/image/square.png copy