Merge branch 'master' into armjit-fpu

Conflicts:
	Core/MIPS/x86/CompFPU.cpp
This commit is contained in:
Henrik Rydgard 2013-02-13 20:47:41 +01:00
commit 30318a4a4d
50 changed files with 4223 additions and 513 deletions

View File

@ -18,6 +18,10 @@
#ifndef _ATOMIC_GCC_H_
#define _ATOMIC_GCC_H_
#ifdef BLACKBERRY
#include <atomic.h>
#endif
#include "Common.h"
// Atomic operations are performed in a single step by the CPU. It is
@ -73,7 +77,11 @@ inline void AtomicStore(volatile u32& dest, u32 value) {
dest = value; // 32-bit writes are always atomic.
}
inline void AtomicStoreRelease(volatile u32& dest, u32 value) {
#ifdef BLACKBERRY
atomic_set(&dest, value);
#else
__sync_lock_test_and_set(&dest, value); // TODO: Wrong! This function is has acquire semantics.
#endif
}
}

View File

@ -41,7 +41,7 @@
#include "FileUtil.h"
#include "../ext/snappy/snappy-c.h"
#ifdef ANDROID
#if defined(ANDROID) || defined(IOS)
namespace std {
using tr1::is_pointer;
}

View File

@ -5,24 +5,20 @@
#define GCC_VER(x,y,z) ((x) * 10000 + (y) * 100 + (z))
#define GCC_VERSION GCC_VER(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
#if GCC_VERSION >= GCC_VER(4,4,0) && __GXX_EXPERIMENTAL_CXX0X__ && !defined(ANDROID) && !defined(__SYMBIAN32__) || defined(__APPLE__)
// GCC 4.4 provides <mutex>
#if (GCC_VERSION >= GCC_VER(4,4,0) && __GXX_EXPERIMENTAL_CXX0X__ || defined(__APPLE__)) \
/* GCC 4.4 provides <mutex>, except on these platforms: */ \
&& !defined(ANDROID) && !defined(__SYMBIAN32__) && !defined(IOS)
#include <mutex>
#else
// partial <mutex> implementation for win32/pthread
#include <algorithm>
#if defined(_WIN32)
// WIN32
#if defined(_WIN32) // WIN32
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#else
// POSIX
#else // POSIX
#include <pthread.h>
#endif
#if (_MSC_VER >= 1600) || (GCC_VERSION >= GCC_VER(4,3,0) && __GXX_EXPERIMENTAL_CXX0X__)

View File

@ -75,6 +75,7 @@ void CConfig::Load(const char *iniFileName)
graphics->Get("DisableG3DLog", &bDisableG3DLog, false);
graphics->Get("VertexCache", &bVertexCache, true);
graphics->Get("FullScreen", &bFullScreen, false);
graphics->Get("StretchToDisplay", &bStretchToDisplay, false);
IniFile::Section *sound = iniFile.GetOrCreateSection("Sound");
sound->Get("Enable", &bEnableSound, true);
@ -132,6 +133,7 @@ void CConfig::Save()
graphics->Set("DisableG3DLog", bDisableG3DLog);
graphics->Set("VertexCache", bVertexCache);
graphics->Set("FullScreen", bFullScreen);
graphics->Set("StretchToDisplay", bStretchToDisplay);
IniFile::Section *sound = iniFile.GetOrCreateSection("Sound");
sound->Set("Enable", bEnableSound);

View File

@ -57,6 +57,8 @@ public:
bool bDrawWireframe;
bool bLinearFiltering;
bool bUseVBO;
bool bStretchToDisplay;
int iWindowZoom; // for Windows
bool SSAntiAliasing; //for Windows, too
bool bDisableG3DLog;

View File

@ -337,7 +337,7 @@ u32 ISOFileSystem::OpenFile(std::string filename, FileAccess access)
return 0;
}
INFO_LOG(FILESYS, "Got a raw sector open: %s, sector %08x, size %08x", filename.c_str(), sectorStart, readSize);
DEBUG_LOG(FILESYS, "Got a raw sector open: %s, sector %08x, size %08x", filename.c_str(), sectorStart, readSize);
u32 newHandle = hAlloc->GetNewHandle();
entry.seekPos = 0;
entry.file = 0;

View File

@ -131,6 +131,12 @@ template<int func(u32, u32)> void WrapI_UU() {
RETURN(retval);
}
template<int func(u32, float, float)> void WrapI_UFF() {
// Not sure about the float arguments.
int retval = func(PARAM(0), currentMIPS->f[0], currentMIPS->f[1]);
RETURN(retval);
}
template<int func(u32, u32, u32)> void WrapI_UUU() {
int retval = func(PARAM(0), PARAM(1), PARAM(2));
RETURN(retval);

View File

@ -86,6 +86,7 @@ static int hCountTotal; //unused
static int vCount;
static int isVblank;
static bool hasSetMode;
// Don't include this in the state, time increases regardless of state.
static double lastFrameTime;
std::vector<WaitVBlankInfo> vblankWaitingThreads;
@ -137,7 +138,6 @@ void __DisplayDoState(PointerWrap &p) {
p.Do(vCount);
p.Do(isVblank);
p.Do(hasSetMode);
p.Do(lastFrameTime);
WaitVBlankInfo wvi(0);
p.Do(vblankWaitingThreads, wvi);
@ -242,7 +242,6 @@ void hleEnterVblank(u64 userdata, int cyclesLate) {
char stats[2048];
sprintf(stats,
"FPS: %0.1f\n"
"Frames: %i\n"
"DL processing time: %0.2f ms\n"
"Kernel processing time: %0.2f ms\n"
@ -260,7 +259,6 @@ void hleEnterVblank(u64 userdata, int cyclesLate) {
"Vertex shaders loaded: %i\n"
"Fragment shaders loaded: %i\n"
"Combined shaders loaded: %i\n",
calculateFPS(),
gpuStats.numFrames,
gpuStats.msProcessingDisplayLists * 1000.0f,
kernelStats.msInSyscalls * 1000.0f,
@ -299,14 +297,19 @@ void hleEnterVblank(u64 userdata, int cyclesLate) {
if (g_Config.bShowFPSCounter) {
char stats[50];
sprintf(stats, "FPS: %0.1f", calculateFPS());
sprintf(stats, "%0.1f", calculateFPS());
float zoom = 0.3f; /// g_Config.iWindowZoom;
float soff = 0.3f;
#ifdef USING_GLES2
float zoom = 0.7f; /// g_Config.iWindowZoom;
float soff = 0.7f;
#else
float zoom = 0.5f; /// g_Config.iWindowZoom;
float soff = 0.5f;
#endif
PPGeBegin();
PPGeDrawText(stats, soff, soff, 0, zoom, 0xCC000000);
PPGeDrawText(stats, -soff, -soff, 0, zoom, 0xCC000000);
PPGeDrawText(stats, 0, 0, 0, zoom, 0xFFFFFFFF);
PPGeDrawText(stats, 476 + soff, 4 + soff, PPGE_ALIGN_RIGHT, zoom, 0xCC000000);
PPGeDrawText(stats, 476 + -soff, 4 -soff, PPGE_ALIGN_RIGHT, zoom, 0xCC000000);
PPGeDrawText(stats, 476, 4, PPGE_ALIGN_RIGHT, zoom, 0xFF30FF30);
PPGeEnd();
}

View File

@ -9,7 +9,7 @@
typedef u32 FontLibraryHandle;
typedef u32 FontHandle;
typedef struct {
struct FontNewLibParams {
u32 userDataAddr;
u32 numFonts;
u32 cacheDataAddr;
@ -23,28 +23,28 @@ typedef struct {
u32 seekFuncAddr;
u32 errorFuncAddr;
u32 ioFinishFuncAddr;
} FontNewLibParams;
};
typedef enum {
typedef enum Family {
FONT_FAMILY_SANS_SERIF = 1,
FONT_FAMILY_SERIF = 2,
} Family;
};
typedef enum {
typedef enum Style {
FONT_STYLE_REGULAR = 1,
FONT_STYLE_ITALIC = 2,
FONT_STYLE_BOLD = 5,
FONT_STYLE_BOLD_ITALIC = 6,
FONT_STYLE_DB = 103, // Demi-Bold / semi-bold
} Style;
};
typedef enum {
typedef enum Language {
FONT_LANGUAGE_JAPANESE = 1,
FONT_LANGUAGE_LATIN = 2,
FONT_LANGUAGE_KOREAN = 3,
} Language;
};
typedef struct {
struct FontStyle {
float fontH;
float fontV;
float fontHRes;
@ -61,9 +61,9 @@ typedef struct {
char fontFileName[64];
u32 fontAttributes;
u32 fontExpire;
} FontStyle;
};
typedef struct {
struct FontInfo {
// Glyph metrics (in 26.6 signed fixed-point).
u32 maxGlyphWidthI;
u32 maxGlyphHeightI;
@ -99,9 +99,9 @@ typedef struct {
u8 BPP; // Font's BPP.
u8 pad[3];
} FontInfo;
};
typedef struct {
struct CharInfo {
u32 bitmapWidth;
u32 bitmapHeight;
u32 bitmapLeft;
@ -118,17 +118,17 @@ typedef struct {
s32 spf26AdvanceH;
s32 spf26AdvanceV;
u8 pad[4];
} CharInfo;
};
typedef enum {
enum FontPixelFormat {
PSP_FONT_PIXELFORMAT_4 = 0,
PSP_FONT_PIXELFORMAT_4_REV = 1,
PSP_FONT_PIXELFORMAT_8 = 2,
PSP_FONT_PIXELFORMAT_24 = 3,
PSP_FONT_PIXELFORMAT_32 = 4
} FontPixelFormat;
};
typedef struct {
struct GlyphImage {
FontPixelFormat pixelFormat;
s32 xPos64;
s32 yPos64;
@ -137,7 +137,7 @@ typedef struct {
u16 bytesPerLine;
u16 pad;
u32 bufferPtr;
} GlyphImage;
};
FontNewLibParams fontLib;
@ -209,17 +209,6 @@ int sceFontClose(u32 fontHandle)
return 0;
}
int sceFontGetNumFontList(u32 libHandle, u32 errorCodePtr)
{
ERROR_LOG(HLE, "sceFontGetNumFontList %x, %x", libHandle, errorCodePtr);
if (Memory::IsValidAddress(errorCodePtr))
{
Memory::Write_U32(0, errorCodePtr);
}
return 1;
}
int sceFontFindOptimumFont(u32 libHandlePtr, u32 fontStylePtr, u32 errorCodePtr)
{
ERROR_LOG(HLE, "sceFontFindOptimumFont %x, %x, %x", libHandlePtr, fontStylePtr, errorCodePtr);
@ -273,11 +262,11 @@ int sceFontGetFontInfo(u32 fontHandle, u32 fontInfoPtr)
fi.fontStyle.fontCountry= 1;
fi.fontStyle.fontExpire= 1;
fi.fontStyle.fontFamily= 1;
//fi.fontStyle.fontFileName="asd";
strcpy(fi.fontStyle.fontFileName, "asd");
fi.fontStyle.fontH=32;
fi.fontStyle.fontHRes=32;
fi.fontStyle.fontLanguage=1;
// fi.fontStyle.fontName="ppsspp";
strcpy(fi.fontStyle.fontName, "ppsspp");
fi.fontStyle.fontRegion=9;
fi.fontStyle.fontV=32;
fi.fontStyle.fontVRes=32;
@ -290,7 +279,7 @@ int sceFontGetFontInfo(u32 fontHandle, u32 fontInfoPtr)
int sceFontGetFontInfoByIndexNumber(u32 libHandle, u32 fontInfoPtr, u32 unknown, u32 fontIndex)
{
ERROR_LOG(HLE, "sceFontGetFontInfoByIndexNumber %x, %x, %x, %x", libHandle, fontInfoPtr, unknown, fontIndex);
ERROR_LOG(HLE, "HACK sceFontGetFontInfoByIndexNumber %x, %x, %x, %x", libHandle, fontInfoPtr, unknown, fontIndex);
// clearly wrong..
return sceFontGetFontInfo(libHandle, fontInfoPtr);
@ -298,13 +287,13 @@ int sceFontGetFontInfoByIndexNumber(u32 libHandle, u32 fontInfoPtr, u32 unknown,
int sceFontGetCharInfo(u32 fontHandle, u32 charCode, u32 charInfoPtr)
{
ERROR_LOG(HLE, "sceFontGetCharInfo %x, %x, %x", fontHandle, charCode, charInfoPtr);
ERROR_LOG(HLE, "HACK sceFontGetCharInfo %x, %x, %x", fontHandle, charCode, charInfoPtr);
if (Memory::IsValidAddress(charInfoPtr))
{
CharInfo pspCharInfo;
memset(&pspCharInfo, 0, sizeof(pspCharInfo));
pspCharInfo.bitmapWidth = 32;
pspCharInfo.bitmapHeight = 32;
pspCharInfo.bitmapWidth = 16;
pspCharInfo.bitmapHeight = 16;
pspCharInfo.spf26Width = pspCharInfo.bitmapWidth << 6;
pspCharInfo.spf26Height = pspCharInfo.bitmapHeight << 6;
@ -316,15 +305,18 @@ int sceFontGetCharInfo(u32 fontHandle, u32 charCode, u32 charInfoPtr)
}
int sceFontGetCharImageRect(u32 fontHandle, u32 charCode, u32 charRectPtr)
// finish this
{
ERROR_LOG(HLE, "sceFontGetCharImageRect %x, %x (%c)", fontHandle, charRectPtr, charCode);
ERROR_LOG(HLE, "HACK sceFontGetCharImageRect %x, %x (%c)", fontHandle, charRectPtr, charCode);
if (Memory::IsValidAddress(charRectPtr)) {
Memory::Write_U16(16, charRectPtr); // character bitmap width in pixels
Memory::Write_U16(16, charRectPtr + 2); // character bitmap height in pixels
}
return 0;
}
int sceFontGetCharGlyphImage(u32 fontHandle, u32 charCode, u32 glyphImagePtr)
{
ERROR_LOG(HLE, "sceFontGetCharGlyphImage %x, %x, %x (%c)", fontHandle, charCode, glyphImagePtr, charCode);
ERROR_LOG(HLE, "HACK sceFontGetCharGlyphImage %x, %x, %x (%c)", fontHandle, charCode, glyphImagePtr, charCode);
int pixelFormat = Memory::Read_U32(glyphImagePtr);
int xPos64 = Memory::Read_U32(glyphImagePtr+4);
@ -332,13 +324,17 @@ int sceFontGetCharGlyphImage(u32 fontHandle, u32 charCode, u32 glyphImagePtr)
int bufWidth = Memory::Read_U16(glyphImagePtr+12);
int bufHeight = Memory::Read_U16(glyphImagePtr+14);
int bytesPerLine = Memory::Read_U16(glyphImagePtr+16);
int buffer =Memory::Read_U32(glyphImagePtr+20);
int buffer = Memory::Read_U32(glyphImagePtr+20);
for (int y= 0; y < bufHeight; y++)
// Small chessboard. Does not respect pixelformat currently...
// Actually should be really easy to substitute in a proper font here...
// could even grab pixel data from the PPGe one.
for (int y = 0; y < bufHeight; y++)
{
for (int x=0; x<bytesPerLine; x++)
for (int x = 0; x < bytesPerLine; x++)
{
Memory::Write_U8(0xff, buffer + (x * y));
Memory::Write_U8((((x >> 1) ^ (y >> 1)) & 1) ? 0xff : 0x00, buffer + (y * bytesPerLine + x));
}
}
@ -360,7 +356,7 @@ int sceFontSetAltCharacterCode(u32 libHandle, u32 charCode)
int sceFontFlush(u32 fontHandle)
{
ERROR_LOG(HLE, "sceFontFlush %x", fontHandle);
DEBUG_LOG(HLE, "sceFontFlush(%i)", fontHandle);
return 0;
}
@ -376,24 +372,48 @@ int sceFontGetFontList(u32 fontLibHandle, u32 fontStylePtr, u32 numFonts)
style.fontHRes = 20 / 64.f;
style.fontVRes = 20 / 64.f;
style.fontStyle = 1;
//style.fontFamily
for (u32 i = 0; i < numFonts; i++)
{
Memory::WriteStruct(fontStylePtr+ (sizeof(style)), &style);
Memory::WriteStruct(fontStylePtr + (sizeof(style)) * i, &style);
}
return 0;
}
int sceFontGetNumFontList(u32 libHandle, u32 errorCodePtr)
{
ERROR_LOG(HLE, "UNIMPL sceFontGetNumFontList %x, %x", libHandle, errorCodePtr);
if (Memory::IsValidAddress(errorCodePtr))
{
Memory::Write_U32(0, errorCodePtr);
}
return 1;
}
int sceFontSetResolution(u32 fontLibHandle, float hRes, float vRes)
{
ERROR_LOG(HLE, "UNIMPL sceFontSetResolution(%i, %f, %f)", fontLibHandle, hRes, vRes);
return 0;
}
int sceFontCalcMemorySize() {
ERROR_LOG(HLE, "UNIMPL sceFontCalcMemorySize()");
return 0;
}
const HLEFunction sceLibFont[] =
{
{0x67f17ed7, WrapU_UU<sceFontNewLib>, "sceFontNewLib"},
{0x574b6fbc, WrapI_U<sceFontDoneLib>, "sceFontDoneLib"},
{0x48293280, 0, "sceFontSetResolution"},
{0x48293280, WrapI_UFF<sceFontSetResolution>, "sceFontSetResolution"},
{0x27f6e642, WrapI_UU<sceFontGetNumFontList>, "sceFontGetNumFontList"},
{0xbc75d85b, WrapI_UUU<sceFontGetFontList>, "sceFontGetFontList"},
{0x099ef33c, WrapI_UUU<sceFontFindOptimumFont>, "sceFontFindOptimumFont"},
{0x681e61a7, WrapI_UUU<sceFontFindFont>, "sceFontFindFont"},
{0x2f67356a, 0, "sceFontCalcMemorySize"},
{0x2f67356a, WrapI_V<sceFontCalcMemorySize>, "sceFontCalcMemorySize"},
{0x5333322d, WrapI_UUUU<sceFontGetFontInfoByIndexNumber>, "sceFontGetFontInfoByIndexNumber"},
{0xa834319d, WrapU_UUUU<sceFontOpen>, "sceFontOpen"},
{0x57fcb733, WrapU_UUUU<sceFontOpenUserFile>, "sceFontOpenUserFile"},

View File

@ -112,8 +112,13 @@ void __GeShutdown()
}
void __GeTriggerInterrupt(int listid, u32 pc, u32 subIntrBase, u16 subIntrToken)
void __GeTriggerInterrupt(int listid, u32 pc, int subIntrBase, u16 subIntrToken)
{
// ClaDun X2 does not expect sceGeListEnqueue to reschedule (which it does not on the PSP.)
// Once PPSSPP's GPU is multithreaded, we can remove this check.
if (subIntrBase < 0)
return;
GeInterruptData intrdata;
intrdata.listid = listid;
intrdata.pc = pc;

View File

@ -39,7 +39,7 @@ void Register_sceGe_user();
void __GeInit();
void __GeDoState(PointerWrap &p);
void __GeShutdown();
void __GeTriggerInterrupt(int listid, u32 pc, u32 subIntrBase, u16 subIntrToken);
void __GeTriggerInterrupt(int listid, u32 pc, int subIntrBase, u16 subIntrToken);
bool __GeHasPendingInterrupt();

View File

@ -27,6 +27,13 @@
#include "../HLE/HLE.h"
#include "../System.h"
#ifdef __APPLE__
using std::isnan;
#endif
#ifdef _MSC_VER
#define isnan _isnan
#endif
#define R(i) (currentMIPS->r[i])
#define RF(i) (*(float*)(&(currentMIPS->r[i])))
#define F(i) (currentMIPS->f[i])
@ -832,33 +839,45 @@ namespace MIPSInt
switch (op & 0xf)
{
case 0: //f
case 1: //un
case 8: //sf
case 9: //ngle
cond = false;
break;
case 1: //un
case 9: //ngle
cond = isnan(F(fs)) || isnan(F(ft));
break;
case 2: //eq
case 10: //seq
case 3: //ueq
case 11: //ngl
cond = (F(fs) == F(ft));
break;
case 3: //ueq
case 11: //ngl
cond = (F(fs) == F(ft)) || isnan(F(fs)) || isnan(F(ft));
break;
case 4: //olt
case 5: //ult
case 12: //lt
case 13: //nge
cond = (F(fs) < F(ft));
break;
case 5: //ult
case 13: //nge
cond = (F(fs) < F(ft)) || isnan(F(fs)) || isnan(F(ft));
break;
case 6: //ole
case 7: //ule
case 14: //le
case 15: //ngt
cond = (F(fs) <= F(ft));
break;
case 7: //ule
case 15: //ngt
cond = (F(fs) <= F(ft)) || isnan(F(fs)) || isnan(F(ft));
break;
default:
_dbg_assert_msg_(CPU,0,"Trying to interpret FPUComp instruction that can't be interpreted");
cond = false;

View File

@ -46,24 +46,27 @@ void Jit::CompFPTriArith(u32 op, void (XEmitter::*arith)(X64Reg reg, OpArg), boo
int ft = _FT;
int fs = _FS;
int fd = _FD;
fpr.SpillLock(ft, fs, fd);
fpr.SpillLock(fd, fs, ft);
if (false && fs == fd)
if (fs == fd)
{
fpr.BindToRegister(fd, true, true);
(this->*arith)(fpr.RX(fd), fpr.R(ft));
}
else
else if (ft == fd && !orderMatters)
{
/*
fpr.BindToRegister(fd, true, true);
if (fd != fs)
(this->*arith)(fpr.RX(fd), fpr.R(fs));
}
else if (ft != fd && fs != fd && ft != fs) {
fpr.BindToRegister(fd, false, true);
MOVSS(fpr.RX(fd), fpr.R(fs));
(this->*arith)(fpr.RX(fd), fpr.R(ft));*/
MOVSS(XMM0, fpr.R(fs));
MOVSS(XMM1, fpr.R(ft));
(this->*arith)(fpr.RX(fd), fpr.R(ft));
}
else {
fpr.BindToRegister(fd, true, true);
(this->*arith)(XMM0, R(XMM1));
MOVSS(XMM0, fpr.R(fs));
(this->*arith)(XMM0, fpr.R(ft));
MOVSS(fpr.RX(fd), R(XMM0));
}
fpr.ReleaseSpillLocks();
@ -148,57 +151,91 @@ static const u64 GC_ALIGNED16(ssOneBits[2]) = {0x0000000100000001ULL, 0x00000001
static const u64 GC_ALIGNED16(ssSignBits2[2]) = {0x8000000080000000ULL, 0x8000000080000000ULL};
static const u64 GC_ALIGNED16(ssNoSignMask[2]) = {0x7FFFFFFF7FFFFFFFULL, 0x7FFFFFFF7FFFFFFFULL};
void Jit::Comp_FPUComp(u32 op) {
// TODO: Doesn't work yet.
DISABLE;
static u32 ssCompareTemp;
enum
{
CMPEQSS = 0,
CMPLTSS = 1,
CMPLESS = 2,
CMPUNORDSS = 3,
CMPNEQSS = 4,
CMPNLTSS = 5,
CMPNLESS = 6,
CMPORDSS = 7,
};
void Jit::CompFPComp(int lhs, int rhs, u8 compare, bool allowNaN)
{
CONDITIONAL_DISABLE;
MOVSS(XMM0, fpr.R(lhs));
CMPSS(XMM0, fpr.R(rhs), compare);
MOVSS(M((void *) &currentMIPS->fpcond), XMM0);
// This means that NaN also means true, e.g. !<> or !>, etc.
if (allowNaN)
{
MOVSS(XMM0, fpr.R(lhs));
CMPSS(XMM0, fpr.R(rhs), CMPUNORDSS);
MOVSS(M((void *) &ssCompareTemp), XMM0);
MOV(32, R(EAX), M((void *) &ssCompareTemp));
OR(32, M((void *) &currentMIPS->fpcond), R(EAX));
}
}
void Jit::Comp_FPUComp(u32 op)
{
CONDITIONAL_DISABLE;
// TODO: Compile this more efficiently by combining with the following branch, which usually is there.
// In that case, probably want to use COMISS rather than CMPSS.
int fs = _FS;
int ft = _FT;
switch (op & 0xf)
{
case 0: //f
case 1: //un
case 8: //sf
case 9: //ngle
// cond = false;
MOV(32, M(&currentMIPS->fpcond), Imm32(0));
MOV(32, M((void *) &currentMIPS->fpcond), Imm32(0));
break;
case 2: //eq // fs == ft
case 1: //un
case 9: //ngle
CompFPComp(fs, ft, CMPUNORDSS);
break;
case 2: //eq
case 10: //seq
CompFPComp(fs, ft, CMPEQSS);
break;
case 3: //ueq
case 11: //ngl
fpr.BindToRegister(fs, true, false);
CMPSS(fpr.RX(fs), fpr.R(ft), 0);
ANDPS(fpr.RX(fs), M((void *)&ssOneBits));
MOVSS(M(&currentMIPS->fpcond), fpr.RX(fs));
CompFPComp(fs, ft, CMPEQSS, true);
break;
case 4: //olt // fs < ft
case 5: //ult
case 4: //olt
case 12: //lt
case 13: //nge
fpr.BindToRegister(fs, true, false);
CMPSS(fpr.RX(fs), fpr.R(ft), 1);
ANDPS(fpr.RX(fs), M((void *)&ssOneBits));
MOVSS(M(&currentMIPS->fpcond), fpr.RX(fs));
CompFPComp(fs, ft, CMPLTSS);
break;
case 6: //ole // fs >= ft (ft < fs)
case 7: //ule
case 5: //ult
case 13: //nge
CompFPComp(ft, fs, CMPNLESS);
break;
case 6: //ole
case 14: //le
CompFPComp(fs, ft, CMPLESS);
break;
case 7: //ule
case 15: //ngt
fpr.BindToRegister(ft, true, false);
CMPSS(fpr.RX(ft), fpr.R(fs), 1);
ANDPS(fpr.RX(ft), M((void *)&ssOneBits));
MOVSS(M(&currentMIPS->fpcond), fpr.RX(ft));
CompFPComp(ft, fs, CMPNLTSS);
break;
default:
_dbg_assert_msg_(CPU,0,"Trying to interpret FPUComp instruction that can't be interpreted");
break;
DISABLE;
}
}

View File

@ -183,6 +183,7 @@ private:
void CompITypeMemWrite(u32 op, u32 bits, void *safeFunc);
void CompFPTriArith(u32 op, void (XEmitter::*arith)(X64Reg reg, OpArg), bool orderMatters);
void CompFPComp(int lhs, int rhs, u8 compare, bool allowNaN = false);
JitBlockCache blocks;
JitOptions jo;

View File

@ -605,11 +605,7 @@ void GLES_GPU::ExecuteOp(u32 op, u32 diff) {
break;
case GE_CMD_FRAMEBUFPTR:
break;
case GE_CMD_FRAMEBUFWIDTH:
break;
case GE_CMD_FRAMEBUFPIXFORMAT:
break;
@ -636,21 +632,13 @@ void GLES_GPU::ExecuteOp(u32 op, u32 diff) {
break;
case GE_CMD_CLUTADDR:
gstate_c.textureChanged = true;
break;
case GE_CMD_CLUTADDRUPPER:
gstate_c.textureChanged = true;
break;
case GE_CMD_LOADCLUT:
gstate_c.textureChanged = true;
// This could be used to "dirty" textures with clut.
break;
case GE_CMD_TEXMAPMODE:
break;
case GE_CMD_TEXSHADELS:
break;
@ -698,6 +686,8 @@ void GLES_GPU::ExecuteOp(u32 op, u32 diff) {
case GE_CMD_AMBIENTCOLOR:
case GE_CMD_AMBIENTALPHA:
if (diff)
shaderManager_->DirtyUniform(DIRTY_AMBIENT);
break;
case GE_CMD_MATERIALAMBIENT:
@ -1065,6 +1055,7 @@ void GLES_GPU::DoState(PointerWrap &p) {
GPUCommon::DoState(p);
textureCache_.Clear(true);
transformDraw_.ClearTrackedVertexArrays();
gstate_c.textureChanged = true;
framebufferManager_.DestroyAllFBOs();

View File

@ -183,13 +183,13 @@ void GenerateFragmentShader(char *buffer)
// Disabled for now until we actually find a need for it.
/*
if (gstate.colorTestEnable & 1) {
if (enableColorTest) {
// TODO: There are some colortestmasks we could handle.
int colorTestFunc = gstate.colortest & 3;
const char *colorTestFuncs[] = { "#", "#", " == ", " != " }; // never/always don't make sense}
int colorTestMask = gstate.colormask;
if (colorTestFuncs[colorTestFunc][0] != '#')
WRITE(p, "if (!(v.rgb %s u_alphacolorref.rgb)) discard;", colorTestFuncs[colorTestFunc]);
WRITE(p, "if (!(v.rgb %s u_alphacolorref.rgb)) discard;\n", colorTestFuncs[colorTestFunc]);
}*/
if (enableFog) {

View File

@ -64,6 +64,41 @@ static bool MaskedEqual(u32 addr1, u32 addr2) {
return (addr1 & 0x3FFFFFF) == (addr2 & 0x3FFFFFF);
}
static void CenterRect(float *x, float *y, float *w, float *h,
float origW, float origH, float frameW, float frameH)
{
if (g_Config.bStretchToDisplay)
{
*x = 0;
*y = 0;
*w = frameW;
*h = frameH;
return;
}
float origRatio = origW/origH;
float frameRatio = frameW/frameH;
if (origRatio > frameRatio)
{
// Image is wider than frame. Center vertically.
float scale = origW / frameW;
*x = 0.0f;
*w = frameW;
*h = frameW / origRatio;
*y = (frameH - *h) / 2.0f;
}
else
{
// Image is taller than frame. Center horizontally.
float scale = origH / frameH;
*y = 0.0f;
*h = frameH;
*w = frameH * origRatio;
*x = (frameW - *w) / 2.0f;
}
}
FramebufferManager::FramebufferManager() :
displayFramebufPtr_(0),
prevDisplayFramebuf_(0),
@ -170,20 +205,23 @@ void FramebufferManager::DrawPixels(const u8 *framebuf, int pixelFormat, int lin
glBindTexture(GL_TEXTURE_2D,backbufTex);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,480,272, GL_RGBA, GL_UNSIGNED_BYTE, convBuf);
DrawActiveTexture(480, 272);
float x, y, w, h;
CenterRect(&x, &y, &w, &h, 480.0f, 272.0f, (float)PSP_CoreParameter().pixelWidth, (float)PSP_CoreParameter().pixelHeight);
DrawActiveTexture(x, y, w, h);
}
void FramebufferManager::DrawActiveTexture(float w, float h, bool flip) {
void FramebufferManager::DrawActiveTexture(float x, float y, float w, float h, bool flip) {
float u2 = 1.0f;
float v1 = flip ? 1.0f : 0.0f;
float v2 = flip ? 0.0f : 1.0f;
const float pos[12] = {0,0,0, w,0,0, w,h,0, 0,h,0};
const float pos[12] = {x,y,0, x+w,y,0, x+w,y+h,0, x,y+h,0};
const float texCoords[8] = {0, v1, u2, v1, u2, v2, 0, v2};
glsl_bind(draw2dprogram);
Matrix4x4 ortho;
ortho.setOrtho(0, 480, 272, 0, -1, 1);
ortho.setOrtho(0, (float)PSP_CoreParameter().pixelWidth, (float)PSP_CoreParameter().pixelHeight, 0, -1, 1);
glUniformMatrix4fv(draw2dprogram->u_viewproj, 1, GL_FALSE, ortho.getReadPtr());
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
@ -369,8 +407,14 @@ void FramebufferManager::CopyDisplayToOutput() {
fbo_bind_color_as_texture(vfb->fbo, 0);
if (resized_) {
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
}
// These are in the output display coordinates
DrawActiveTexture(480, 272, true);
float x, y, w, h;
CenterRect(&x, &y, &w, &h, 480.0f, 272.0f, (float)PSP_CoreParameter().pixelWidth, (float)PSP_CoreParameter().pixelHeight);
DrawActiveTexture(x, y, w, h, true);
if (resized_) {
DestroyAllFBOs();

View File

@ -66,7 +66,7 @@ public:
};
void DrawPixels(const u8 *framebuf, int pixelFormat, int linesize);
void DrawActiveTexture(float w, float h, bool flip = false);
void DrawActiveTexture(float x, float y, float w, float h, bool flip = false);
void DestroyAllFBOs();
void DecimateFBOs();

View File

@ -249,7 +249,7 @@ void LinkedShader::updateUniforms() {
SetColorUniform3(u_texenv, gstate.texenvcolor);
}
if (u_alphacolorref != -1 && (dirtyUniforms & DIRTY_ALPHACOLORREF)) {
SetColorUniform3Alpha(u_alphacolorref, gstate.colortest, (gstate.alphatest >> 8) & 0xFF);
SetColorUniform3Alpha(u_alphacolorref, gstate.colorref, (gstate.alphatest >> 8) & 0xFF);
}
if (u_fogcolor != -1 && (dirtyUniforms & DIRTY_FOGCOLOR)) {
SetColorUniform3(u_fogcolor, gstate.fogcolor);
@ -351,6 +351,7 @@ void ShaderManager::Clear() {
fsCache.clear();
vsCache.clear();
globalDirty = 0xFFFFFFFF;
DirtyShader();
}
void ShaderManager::ClearCache(bool deleteThem)

View File

@ -29,6 +29,7 @@
float maxAnisotropyLevel ;
TextureCache::TextureCache() {
lastBoundTexture = -1;
// TODO: Switch to aligned allocations for alignment. AllocateMemoryPages would do the trick.
// This is 5MB of temporary storage. Might be possible to shrink it.
tmpTexBuf32 = new u32[1024 * 512]; // 2MB
@ -123,7 +124,7 @@ void TextureCache::NotifyFramebuffer(u32 address, FBO *fbo) {
// Must be in VRAM so | 0x04000000 it is.
TexCacheEntry *entry = GetEntryAt(address | 0x04000000);
if (entry) {
// INFO_LOG(HLE, "Render to texture detected at %08x!", address);
DEBUG_LOG(HLE, "Render to texture detected at %08x!", address);
if (!entry->fbo)
entry->fbo = fbo;
// TODO: Delete the original non-fbo texture too.
@ -442,24 +443,6 @@ void TextureCache::UpdateSamplingParams(TexCacheEntry &entry, bool force) {
}
}
// Todo: Make versions of these that do two pixels at a time within a 32-bit register.
// Convert from PSP bit order to GLES bit order
static inline u16 convert565(u16 c) {
return (c >> 11) | (c & 0x07E0) | (c << 11);
}
// Convert from PSP bit order to GLES bit order
static inline u16 convert4444(u16 c) {
return (c >> 12) | ((c >> 4) & 0xF0) | ((c << 4) & 0xF00) | (c << 12);
}
// Convert from PSP bit order to GLES bit order
static inline u16 convert5551(u16 c) {
return ((c & 0x8000) >> 15) | (c << 1);
}
// All these DXT structs are in the reverse order, as compared to PC.
// On PC, alpha comes before color, and interpolants are before the tile data.
@ -575,33 +558,40 @@ static void decodeDXT5Block(u32 *dst, const DXT5Block *src, int pitch) {
}
static void convertColors(u8 *finalBuf, GLuint dstFmt, int numPixels) {
// TODO: All these can be massively sped up with SSE, or even
// somewhat sped up using "manual simd" in 32 or 64-bit gprs.
// TODO: All these can be further sped up with SSE or NEON.
switch (dstFmt) {
case GL_UNSIGNED_SHORT_4_4_4_4:
{
u16 *p = (u16 *)finalBuf;
for (int i = 0; i < numPixels; i++) {
u16 c = p[i];
p[i] = (c >> 12) | ((c >> 4) & 0xF0) | ((c << 4) & 0xF00) | (c << 12);
u32 *p = (u32 *)finalBuf;
for (int i = 0; i < (numPixels + 1) / 2; i++) {
u32 c = p[i];
p[i] = ((c >> 12) & 0x000F000F) |
((c >> 4) & 0x00F000F0) |
((c << 4) & 0x0F000F00) |
((c << 12) & 0xF000F000);
}
}
break;
case GL_UNSIGNED_SHORT_5_5_5_1:
{
u16 *p = (u16 *)finalBuf;
for (int i = 0; i < numPixels; i++) {
u16 c = p[i];
p[i] = ((c & 0x8000) >> 15) | ((c >> 9) & 0x3E) | ((c << 1) & 0x7C0) | ((c << 11) & 0xF800);
u32 *p = (u32 *)finalBuf;
for (int i = 0; i < (numPixels + 1) / 2; i++) {
u32 c = p[i];
p[i] = ((c >> 15) & 0x00010001) |
((c >> 9) & 0x003E003E) |
((c << 1) & 0x07C007C0) |
((c << 11) & 0xF800F800);
}
}
break;
case GL_UNSIGNED_SHORT_5_6_5:
{
u16 *p = (u16 *)finalBuf;
for (int i = 0; i < numPixels; i++) {
u16 c = p[i];
p[i] = (c >> 11) | (c & 0x07E0) | (c << 11);
u32 *p = (u32 *)finalBuf;
for (int i = 0; i < (numPixels + 1) / 2; i++) {
u32 c = p[i];
p[i] = ((c >> 11) & 0x001F001F) |
(c & 0x07E007E0) |
((c << 11) & 0xF800F800);
}
}
break;
@ -613,8 +603,6 @@ static void convertColors(u8 *finalBuf, GLuint dstFmt, int numPixels) {
}
}
int lastBoundTexture = -1;
void TextureCache::StartFrame() {
lastBoundTexture = -1;
Decimate();
@ -653,25 +641,17 @@ static inline u32 MiniHash(const u32 *ptr) {
}
static inline u32 QuickTexHash(u32 addr, int bufw, int w, int h, u32 format) {
int pixToBytes = (bitsPerPixel[format < 11 ? format : 0] + 7) / 8;
int w32 = (w * pixToBytes + 3) / 4;
int pad32 = ((bufw * pixToBytes + 3) / 4) - w32;
u32 sizeInRAM = (bitsPerPixel[format < 11 ? format : 0] * bufw * h / 2) / 8;
const u32 *checkp = (const u32 *) Memory::GetPointer(addr);
u32 check = 0;
for (int y = 0; y < h; ++y) {
for (int x = 0; x < w32; ++x) {
for (u32 i = 0; i < (sizeInRAM * 2) / 4; ++i)
check += *checkp++;
}
checkp += pad32;
}
return check;
}
void TextureCache::SetTexture() {
u32 texaddr = (gstate.texaddr[0] & 0xFFFFF0) | ((gstate.texbufwidth[0]<<8) & 0x0F000000);
if (!Memory::IsValidAddress(texaddr)) {
// Bind a null texture and return.
glBindTexture(GL_TEXTURE_2D, 0);
@ -686,32 +666,19 @@ void TextureCache::SetTexture() {
bool hasClut = formatUsesClut[format];
const u8 *texptr = Memory::GetPointer(texaddr);
u32 clutformat = gstate.clutformat & 3;
u32 clutaddr = GetClutAddr(clutformat == GE_CMODE_32BIT_ABGR8888 ? 4 : 2);
u64 cachekey = texaddr;
if (formatUsesClut[format])
u32 clutformat, clutaddr;
if (hasClut) {
clutformat = gstate.clutformat & 3;
clutaddr = GetClutAddr(clutformat == GE_CMODE_32BIT_ABGR8888 ? 4 : 2);
cachekey |= (u64)clutaddr << 32;
}
int maxLevel = ((gstate.texmode >> 16) & 0x7);
// Adjust maxLevel to actually present levels..
for (int i = 0; i <= maxLevel; i++) {
// If encountering levels pointing to nothing, adjust max level.
u32 levelTexaddr = (gstate.texaddr[i] & 0xFFFFF0) | ((gstate.texbufwidth[i] << 8) & 0x0F000000);
if (!Memory::IsValidAddress(levelTexaddr)) {
maxLevel = i - 1;
break;
}
}
u32 texhash = MiniHash((const u32 *)Memory::GetPointer(texaddr));
int w = 1 << (gstate.texsize[0] & 0xf);
int h = 1 << ((gstate.texsize[0] >> 8) & 0xf);
int bufw = gstate.texbufwidth[0] & 0x3ff;
TexCache::iterator iter = cache.find(cachekey);
TexCacheEntry *entry = NULL;
if (iter != cache.end()) {
@ -737,17 +704,14 @@ void TextureCache::SetTexture() {
bool rehash = entry->status == TexCacheEntry::STATUS_UNRELIABLE;
//TODO: Check more texture parameters, compute real texture hash
if (dim != entry->dim || entry->hash != texhash || entry->format != format)
match = false;
//TODO: Check more clut parameters, compute clut hash
if (match && (format >= GE_TFMT_CLUT4 && format <= GE_TFMT_CLUT32) &&
if (dim != entry->dim ||
entry->hash != texhash ||
entry->format != format ||
entry->maxLevel != maxLevel ||
((format >= GE_TFMT_CLUT4 && format <= GE_TFMT_CLUT32) &&
(entry->clutformat != clutformat ||
entry->clutaddr != clutaddr ||
entry->cluthash != Memory::Read_U32(entry->clutaddr)))
match = false;
if (entry->maxLevel != maxLevel)
entry->cluthash != Memory::Read_U32(entry->clutaddr))))
match = false;
if (match) {
@ -770,6 +734,9 @@ void TextureCache::SetTexture() {
}
if (rehash && entry->status != TexCacheEntry::STATUS_RELIABLE) {
int w = 1 << (gstate.texsize[0] & 0xf);
int h = 1 << ((gstate.texsize[0] >> 8) & 0xf);
int bufw = gstate.texbufwidth[0] & 0x3ff;
u32 check = QuickTexHash(texaddr, bufw, w, h, format);
if (check != entry->fullhash) {
match = false;
@ -794,6 +761,9 @@ void TextureCache::SetTexture() {
return; //Done!
} else {
INFO_LOG(G3D, "Texture different or overwritten, reloading at %08x", texaddr);
if (entry->texture == lastBoundTexture)
lastBoundTexture = -1;
glDeleteTextures(1, &entry->texture);
if (entry->status == TexCacheEntry::STATUS_RELIABLE) {
entry->status = TexCacheEntry::STATUS_HASHING;
@ -808,6 +778,11 @@ void TextureCache::SetTexture() {
entry->status = TexCacheEntry::STATUS_HASHING;
}
int w = 1 << (gstate.texsize[0] & 0xf);
int h = 1 << ((gstate.texsize[0] >> 8) & 0xf);
int bufw = gstate.texbufwidth[0] & 0x3ff;
//we have to decode it
entry->addr = texaddr;
entry->hash = texhash;
@ -817,6 +792,7 @@ void TextureCache::SetTexture() {
entry->maxLevel = maxLevel;
entry->lodBias = 0.0f;
if (format >= GE_TFMT_CLUT4 && format <= GE_TFMT_CLUT32) {
entry->clutformat = clutformat;
entry->clutaddr = GetClutAddr(clutformat == GE_CMODE_32BIT_ABGR8888 ? 4 : 2);
@ -839,6 +815,17 @@ void TextureCache::SetTexture() {
glGenTextures(1, &entry->texture);
glBindTexture(GL_TEXTURE_2D, entry->texture);
lastBoundTexture = entry->texture;
// Adjust maxLevel to actually present levels..
for (int i = 0; i <= maxLevel; i++) {
// If encountering levels pointing to nothing, adjust max level.
u32 levelTexaddr = (gstate.texaddr[i] & 0xFFFFF0) | ((gstate.texbufwidth[i] << 8) & 0x0F000000);
if (!Memory::IsValidAddress(levelTexaddr)) {
maxLevel = i - 1;
break;
}
}
#ifdef USING_GLES2
// GLES2 doesn't have support for a "Max lod" which is critical as PSP games often
@ -850,15 +837,15 @@ void TextureCache::SetTexture() {
// As is usual, GLES3 will solve this problem nicely but wide distribution of that is
// years away.
LoadTextureLevel(*entry, 0);
if (entry->maxLevel > 0)
if (maxLevel > 0)
glGenerateMipmap(GL_TEXTURE_2D);
#else
for (int i = 0; i <= entry->maxLevel; i++) {
for (int i = 0; i <= maxLevel; i++) {
LoadTextureLevel(*entry, i);
}
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, entry->maxLevel);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, maxLevel);
#endif
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, (float)entry->maxLevel);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, (float)maxLevel);
float anisotropyLevel = (float) g_Config.iAnisotropyLevel > maxAnisotropyLevel ? maxAnisotropyLevel : (float) g_Config.iAnisotropyLevel;
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropyLevel);
// NOTICE_LOG(G3D,"AnisotropyLevel = %0.1f , MaxAnisotropyLevel = %0.1f ", anisotropyLevel, maxAnisotropyLevel );

View File

@ -99,5 +99,7 @@ private:
u32 *clutBuf32;
u16 *clutBuf16;
int lastBoundTexture;
};

View File

@ -149,8 +149,46 @@ void TransformDrawEngine::DrawBezier(int ucount, int vcount) {
Flush(); // as our vertex storage here is temporary, it will only survive one draw.
}
// Copy code from bezier. This is not right, but allow to display something.
void TransformDrawEngine::DrawSpline(int ucount, int vcount, int utype, int vtype) {
// TODO
u16 indices[3 * 3 * 6];
// Generate indices for a rectangular mesh.
int c = 0;
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
indices[c++] = y * 4 + x;
indices[c++] = y * 4 + x + 1;
indices[c++] = (y + 1) * 4 + x + 1;
indices[c++] = (y + 1) * 4 + x + 1;
indices[c++] = (y + 1) * 4 + x;
indices[c++] = y * 4 + x;
}
}
// We are free to use the "decoded" buffer here.
// Let's split it into two to get a second buffer, there's enough space.
u8 *decoded2 = decoded + 65536 * 24;
// Alright, now for the vertex data.
// For now, we will simply inject UVs.
float customUV[4 * 4 * 2];
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
customUV[(y * 4 + x) * 2 + 0] = (float)x/3.0f;
customUV[(y * 4 + x) * 2 + 1] = (float)y/3.0f;
}
}
if (!(gstate.vertType & GE_VTYPE_TC_MASK)) {
dec.SetVertexType(gstate.vertType);
u32 newVertType = dec.InjectUVs(decoded2, Memory::GetPointer(gstate_c.vertexAddr), customUV, 16);
SubmitPrim(decoded2, &indices[0], GE_PRIM_TRIANGLES, c, newVertType, GE_VTYPE_IDX_16BIT, 0);
} else {
SubmitPrim(Memory::GetPointer(gstate_c.vertexAddr), &indices[0], GE_PRIM_TRIANGLES, c, gstate.vertType, GE_VTYPE_IDX_16BIT, 0);
}
Flush(); // as our vertex storage here is temporary, it will only survive one draw.
}
// Convenient way to do precomputation to save the parts of the lighting calculation
@ -509,6 +547,14 @@ void TransformDrawEngine::SoftwareTransformAndDraw(
if (gstate.lightingEnable & 1) {
// Don't ignore gstate.lmode - we should send two colors in that case
if (reader.hasColor0()) {
reader.ReadColor0(litColor0);
} else {
litColor0[0] = (gstate.materialambient & 0xFF) / 255.f;
litColor0[1] = ((gstate.materialambient >> 8) & 0xFF) / 255.f;
litColor0[2] = ((gstate.materialambient >> 16) & 0xFF) / 255.f;
litColor0[3] = (gstate.materialalpha & 0xFF) / 255.f;
}
if (gstate.lmode & 1) {
// Separate colors
for (int j = 0; j < 4; j++) {
@ -913,7 +959,6 @@ void TransformDrawEngine::Flush() {
vai->decFmt = dec.GetDecVtxFmt();
vai_[id] = vai;
}
vai->lastFrame = gpuStats.numFrames;
switch (vai->status) {
case VertexArrayInfo::VAI_NEW:
@ -922,7 +967,7 @@ void TransformDrawEngine::Flush() {
u32 dataHash = ComputeHash();
vai->hash = dataHash;
vai->status = VertexArrayInfo::VAI_HASHING;
vai->framesUntilNextFullHash = 0;
vai->drawsUntilNextFullHash = 0;
DecodeVerts(); // writes to indexGen
goto rotateVBO;
}
@ -935,14 +980,8 @@ void TransformDrawEngine::Flush() {
if (vai->lastFrame != gpuStats.numFrames) {
vai->numFrames++;
}
if (vai->framesUntilNextFullHash == 0) {
if (vai->drawsUntilNextFullHash == 0) {
u32 newHash = ComputeHash();
// exponential backoff up to 16 frames
vai->framesUntilNextFullHash = std::min(16, vai->numFrames);
// TODO: tweak
//if (vai->numFrames > 1000) {
// vai->status = VertexArrayInfo::VAI_RELIABLE;
//}
if (newHash != vai->hash) {
vai->status = VertexArrayInfo::VAI_UNRELIABLE;
if (vai->vbo) {
@ -956,8 +995,19 @@ void TransformDrawEngine::Flush() {
DecodeVerts();
goto rotateVBO;
}
if (vai->numVerts > 100) {
// exponential backoff up to 16 draws, then every 24
vai->drawsUntilNextFullHash = std::min(24, vai->numFrames);
} else {
vai->framesUntilNextFullHash--;
// Lower numbers seem much more likely to change.
vai->drawsUntilNextFullHash = 0;
}
// TODO: tweak
//if (vai->numFrames > 1000) {
// vai->status = VertexArrayInfo::VAI_RELIABLE;
//}
} else {
vai->drawsUntilNextFullHash--;
// TODO: "mini-hashing" the first 32 bytes of the vertex/index data or something.
}
@ -1025,6 +1075,8 @@ void TransformDrawEngine::Flush() {
goto rotateVBO;
}
}
vai->lastFrame = gpuStats.numFrames;
} else {
DecodeVerts();
rotateVBO:

View File

@ -58,7 +58,7 @@ public:
numFrames = 0;
lastFrame = gpuStats.numFrames;
numVerts = 0;
framesUntilNextFullHash = 0;
drawsUntilNextFullHash = 0;
}
~VertexArrayInfo();
enum Status {
@ -87,7 +87,7 @@ public:
int numDraws;
int numFrames;
int lastFrame; // So that we can forget.
u16 framesUntilNextFullHash;
u16 drawsUntilNextFullHash;
};

View File

@ -142,6 +142,23 @@ void GPUCommon::PreExecuteOp(u32 op, u32 diff) {
void GPUCommon::DoState(PointerWrap &p) {
p.Do(dlIdGenerator);
p.Do<DisplayList>(dlQueue);
int currentID = currentList == NULL ? 0 : currentList->id;
p.Do(currentID);
if (currentID == 0) {
currentList = 0;
} else {
for (auto it = dlQueue.begin(), end = dlQueue.end(); it != end; ++it) {
if (it->id == currentID) {
currentList = &*it;
break;
}
}
}
p.Do(interruptRunning);
p.Do(prev);
p.Do(stack);
p.Do(stackptr);
p.Do(finished);
p.DoMarker("GPUCommon");
}

View File

@ -44,7 +44,7 @@ protected:
public:
virtual DisplayList* getList(int listid)
{
if(currentList->id == listid)
if (currentList && currentList->id == listid)
return currentList;
for(auto it = dlQueue.begin(); it != dlQueue.end(); ++it)
{

View File

@ -242,7 +242,7 @@ struct GPUStateCache
float lightpos[4][3];
float lightdir[4][3];
float lightatt[4][3];
float lightColor[3][4][3]; //Amtient Diffuse Specular
float lightColor[3][4][3]; // Ambient Diffuse Specular
float morphWeights[8];
u32 curTextureWidth;

View File

@ -6,7 +6,7 @@ CONFIG += staticlib
include(Settings.pri)
INCLUDEPATH += ../native ../Core/MIPS ../Common ../
INCLUDEPATH += ../native ../Core/MIPS ../
arm {
SOURCES += ../Core/MIPS/ARM/*.cpp \ #CoreARM

View File

@ -52,7 +52,10 @@ namespace
static void DrawBackground(float alpha) {
static float xbase[100] = {0};
static float ybase[100] = {0};
if (xbase[0] == 0.0f) {
static int old_dp_xres = dp_xres;
// if window was resized, recalculate animation coordinates
if (xbase[0] == 0.0f || dp_xres != old_dp_xres) {
old_dp_xres = dp_xres;
GMRng rng;
for (int i = 0; i < 100; i++) {
xbase[i] = rng.F() * dp_xres;
@ -316,6 +319,7 @@ void EmuThread::run()
ReapplyGfxState();
UIShader_Prepare();
glViewport(0, 0, pixel_xres, pixel_yres);
UIBegin();
DrawBackground(alpha);

View File

@ -9,7 +9,6 @@ include(Settings.pri)
!mobile_platform: {
SOURCES += ../native/ext/glew/glew.c
HEADERS += ../native/ext/glew/GL/*.h
INCLUDEPATH += ../native/ext/glew
}
# Backtrace
@ -55,7 +54,6 @@ INCLUDEPATH += ../ext/snappy
!symbian: {
SOURCES += ../ext/zlib/*.c
HEADERS += ../ext/zlib/*.h
INCLUDEPATH += ../ext/zlib
}

View File

@ -3,16 +3,17 @@ TARGET = PPSSPPQt
QT += core gui opengl
CONFIG += mobility
MOBILITY += multimedia
win32: QT += multimedia
include(Settings.pri)
# Libs
symbian: LIBS += -lCore.lib -lCommon.lib -lNative.lib -lcone -leikcore -lavkon -lezlib
blackberry: LIBS += -L. -lCore -lCommon -lNative -lscreen -lsocket -lstdc++
win32: LIBS += -L. -lCore -lCommon -lNative -lwinmm -lws2_32 -lkernel32 -luser32 -lgdi32 -lshell32 -lcomctl32 -ldsound -lxinput
win32: LIBS += -L$$OUT_PWD/release -lCore -lCommon -lNative -lwinmm -lws2_32 -lkernel32 -luser32 -lgdi32 -lshell32 -lcomctl32 -ldsound -lxinput
linux: LIBS += -L. -lCore -lCommon -lNative
desktop_ui {
linux:!mobile_platform {
PRE_TARGETDEPS += ./libCommon.a ./libCore.a ./libNative.a
CONFIG += link_pkgconfig
packagesExist(sdl) {
@ -21,9 +22,7 @@ desktop_ui {
}
}
TRANSLATIONS = languages/ppsspp_en.ts \
languages/ppsspp_pl.ts \
languages/ppsspp_fr.ts
TRANSLATIONS = $$files(languages/ppsspp_*.ts)
# Main
SOURCES += ../native/base/QtMain.cpp
@ -39,15 +38,17 @@ SOURCES += ../android/jni/EmuScreen.cpp \
INCLUDEPATH += .. ../Common ../native
# Temporarily only use new UI for Linux desktop
desktop_ui {
mobile_platform {
SOURCES += ../android/jni/NativeApp.cpp
} else {
MOC_DIR = moc
UI_DIR = ui
RCC_DIR = rcc
SOURCES += *.cpp
HEADERS += *.h
FORMS += *.ui
RESOURCES += resources.qrc
} else {
SOURCES += ../android/jni/NativeApp.cpp
INCLUDEPATH += ../Qt
}
# Packaging

View File

@ -1,15 +1,24 @@
DEFINES += USING_QT_UI
blackberry|symbian|contains(MEEGO_EDITION,harmattan): CONFIG += mobile_platform
unix:!blackberry:!symbian:!macx: CONFIG += linux
linux:!mobile_platform: CONFIG += desktop_ui
# Global specific
QMAKE_CXXFLAGS += -Wno-unused-function -Wno-unused-variable -Wno-multichar -Wno-uninitialized -Wno-ignored-qualifiers -Wno-missing-field-initializers -Wno-unused-parameter
QMAKE_CXXFLAGS += -std=c++0x -ffast-math -fno-strict-aliasing
DEFINES -= UNICODE
INCLUDEPATH += ../ext/zlib ../native/ext/glew ../Common
win32-msvc* {
QMAKE_CXXFLAGS_RELEASE += /O2 /arch:SSE2 /fp:fast
DEFINES += _MBCS GLEW_STATIC NOMINMAX
PRECOMPILED_HEADER = ../Windows/stdafx.h
PRECOMPILED_SOURCE = ../Windows/stdafx.cpp
} else {
QMAKE_CXXFLAGS += -Wno-unused-function -Wno-unused-variable -Wno-multichar -Wno-uninitialized -Wno-ignored-qualifiers -Wno-missing-field-initializers -Wno-unused-parameter
QMAKE_CXXFLAGS += -std=c++0x -ffast-math -fno-strict-aliasing
}
# Arch specific
contains(QT_ARCH, i686)|contains(QT_ARCH, x86)|contains(QT_ARCH, x86_64): {
QMAKE_CXXFLAGS += -msse2
contains(QT_ARCH, i686)|contains(QT_ARCH, x86)|contains(QT_ARCH, x86_64)|contains(QT_ARCH, windows): {
!win32-msvc*: QMAKE_CXXFLAGS += -msse2
CONFIG += x86
}
else { # Assume ARM

1009
Qt/languages/ppsspp_cn.ts Normal file

File diff suppressed because it is too large Load Diff

988
Qt/languages/ppsspp_de.ts Normal file
View File

@ -0,0 +1,988 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="de_DE">
<context>
<name>Controls</name>
<message>
<location filename="../controls.ui" line="20"/>
<source>Controls</source>
<comment>Controls window title</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CtrlDisAsmView</name>
<message>
<location filename="../ctrldisasmview.cpp" line="106"/>
<source>Copy &amp;address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrldisasmview.cpp" line="110"/>
<source>Copy instruction (&amp;hex)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrldisasmview.cpp" line="114"/>
<source>Copy instruction (&amp;disasm)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrldisasmview.cpp" line="120"/>
<source>&amp;Run to here</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrldisasmview.cpp" line="124"/>
<source>&amp;Set Next Statement</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrldisasmview.cpp" line="128"/>
<source>&amp;Toggle breakpoint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrldisasmview.cpp" line="132"/>
<source>&amp;Follow branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrldisasmview.cpp" line="142"/>
<source>Go to in &amp;Memory View</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrldisasmview.cpp" line="152"/>
<source>&amp;Rename function...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrldisasmview.cpp" line="240"/>
<source>New function name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrldisasmview.cpp" line="241"/>
<source>New function name:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CtrlMemView</name>
<message>
<location filename="../ctrlmemview.cpp" line="215"/>
<source>Go to in &amp;disasm</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrlmemview.cpp" line="221"/>
<source>&amp;Copy value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrlmemview.cpp" line="225"/>
<source>Dump...</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CtrlRegisterList</name>
<message>
<location filename="../ctrlregisterlist.cpp" line="274"/>
<source>Go to in &amp;memory view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrlregisterlist.cpp" line="278"/>
<source>Go to in &amp;disasm</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrlregisterlist.cpp" line="284"/>
<source>&amp;Copy value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrlregisterlist.cpp" line="288"/>
<source>C&amp;hange...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrlregisterlist.cpp" line="352"/>
<source>Set new value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ctrlregisterlist.cpp" line="353"/>
<source>Set new value:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Debugger_Disasm</name>
<message>
<location filename="../debugger_disasm.ui" line="17"/>
<source>Disassembler</source>
<comment>Window title</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="30"/>
<source>Ctr:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="43"/>
<source>&amp;Go to</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="78"/>
<source>&amp;PC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="91"/>
<source>&amp;LR</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="128"/>
<source>Show VFPU</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="147"/>
<source>Regs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="198"/>
<source>Funcs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="223"/>
<source>&amp;Go</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="236"/>
<source>Stop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="249"/>
<source>Step &amp;Into</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="265"/>
<source>Step &amp;Over</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="278"/>
<source>S&amp;kip</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="291"/>
<source>Next &amp;HLE</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="320"/>
<source>Breakpoints</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="339"/>
<source>Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="362"/>
<source>Clear All</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="372"/>
<source>Callstack</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="382"/>
<source>Display Lists</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="408"/>
<location filename="../debugger_disasm.ui" line="519"/>
<source>Id</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="413"/>
<location filename="../debugger_disasm.ui" line="529"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="418"/>
<source>Start Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="423"/>
<source>Current Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="476"/>
<source>Run</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="483"/>
<source>Step</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="497"/>
<source>Threads</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="524"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="534"/>
<source>Current PC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.ui" line="539"/>
<source>Entry point</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.cpp" line="401"/>
<source>Remove breakpoint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.cpp" line="480"/>
<source>Go to entry point</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.cpp" line="486"/>
<source>Running</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.cpp" line="490"/>
<source>Wait</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.cpp" line="494"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_disasm.cpp" line="626"/>
<source>Show code</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Debugger_Memory</name>
<message>
<location filename="../debugger_memory.ui" line="14"/>
<source>Dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_memory.ui" line="22"/>
<source>Goto:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_memory.ui" line="35"/>
<source>Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_memory.ui" line="41"/>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_memory.ui" line="48"/>
<source>Symbols</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_memory.cpp" line="15"/>
<source>Memory Viewer - %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Debugger_VFPU</name>
<message>
<location filename="../debugger_vfpu.ui" line="14"/>
<source>VFPU</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_vfpu.ui" line="23"/>
<source>Float</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_vfpu.ui" line="28"/>
<source>HalfFloat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_vfpu.ui" line="33"/>
<source>Hex</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_vfpu.ui" line="38"/>
<source>Bytes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_vfpu.ui" line="43"/>
<source>Shorts</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../debugger_vfpu.ui" line="48"/>
<source>Ints</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GamePadDialog</name>
<message>
<location filename="../gamepaddialog.ui" line="14"/>
<source>Gamepad Configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.ui" line="22"/>
<source>GamePad List</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.ui" line="46"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.ui" line="53"/>
<source>Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.ui" line="62"/>
<source>Gamepad Values :</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.ui" line="86"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.ui" line="98"/>
<source>Assign Gamepad input</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.ui" line="108"/>
<source> to PSP button/axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.ui" line="118"/>
<source>Assign</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.ui" line="127"/>
<source>Press buttons on your gamePad to verify mapping :</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="134"/>
<location filename="../gamepaddialog.cpp" line="366"/>
<source>&lt;b&gt;No gamepad&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="146"/>
<source>&lt;b&gt;Unknown gamepad&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="287"/>
<source>Buttons</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="301"/>
<location filename="../gamepaddialog.cpp" line="344"/>
<source>Button %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="304"/>
<source>Axes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="310"/>
<source>%1 Neg</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="317"/>
<source>Axes %1 Neg</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="320"/>
<source>%1 Pos</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="327"/>
<source>Axes %1 Pos</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="331"/>
<source>Hats</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="368"/>
<source>&lt;b&gt;Current gamepad: %1&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../mainwindow.ui" line="20"/>
<source>PPSSPP</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="52"/>
<source>&amp;File</source>
<translation type="unfinished">&amp;Datei</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="66"/>
<source>&amp;Emulation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="81"/>
<source>Debu&amp;g</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="95"/>
<source>&amp;Options</source>
<translation type="unfinished">&amp;Optionen</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="99"/>
<source>&amp;Log Levels</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="103"/>
<source>G3D</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="112"/>
<source>HLE</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="121"/>
<source>Default</source>
<translation type="unfinished">Standard</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="135"/>
<source>Zoom</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="144"/>
<source>Language</source>
<translation type="unfinished">Sprache</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="149"/>
<source>Anisotropic filtering</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="185"/>
<source>&amp;Help</source>
<translation type="unfinished">&amp;Hilfe</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="200"/>
<source>&amp;Open...</source>
<translation type="unfinished">&amp;Öffnen...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="205"/>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Schließen</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="210"/>
<source>-</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="215"/>
<source>Quickload state</source>
<translation type="unfinished">Schnellladen</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="218"/>
<source>F4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="223"/>
<source>Quicksave state</source>
<translation type="unfinished">Schnellspeichern</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="226"/>
<source>F2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="231"/>
<source>&amp;Load State File...</source>
<translation type="unfinished">&amp;Lade Spielstand...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="236"/>
<source>&amp;Save State File...</source>
<translation type="unfinished">&amp;Speichere Spielstand...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="241"/>
<source>E&amp;xit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="246"/>
<source>&amp;Run</source>
<translation type="unfinished">&amp;Starte</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="249"/>
<source>F7</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="254"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="257"/>
<source>F8</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="262"/>
<source>R&amp;eset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="270"/>
<source>&amp;Interpreter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="278"/>
<source>&amp;Slightly Faster Interpreter</source>
<translation type="unfinished">&amp;etwas scnellerer Interpreter</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="286"/>
<source>&amp;Dynarec</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="294"/>
<source>Load &amp;Map File...</source>
<translation type="unfinished">Lade &amp;Map Dateien...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="302"/>
<source>&amp;Save Map File...</source>
<translation type="unfinished">&amp;Speichere Map Dateien...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="310"/>
<source>&amp;Reset Symbol Table</source>
<translation type="unfinished">&amp;Setze Symboltabelle zurück</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="315"/>
<source>&amp;Disassembly</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="318"/>
<source>Ctrl+D</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="326"/>
<source>&amp;Log Console</source>
<translation type="unfinished">&amp;Log Konsole</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="329"/>
<source>Ctrl+L</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="334"/>
<source>Memory &amp;View...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="337"/>
<source>Ctrl+M</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="342"/>
<source>Keyboard &amp;Controls</source>
<translation type="unfinished">Tastatur &amp;Tastenbelegung</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="347"/>
<source>&amp;Toggle Full Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="350"/>
<source>F12</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="358"/>
<source>&amp;Buffered Rendering</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="361"/>
<source>F5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="369"/>
<source>&amp;Hardware Transform</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="372"/>
<source>F6</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="380"/>
<source>&amp;Linear Filtering</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="388"/>
<source>&amp;Wireframe (experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="396"/>
<source>&amp;Display Raw Framebuffer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="404"/>
<source>&amp;Show Debug Statistics</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="412"/>
<source>Screen &amp;1x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="415"/>
<source>Ctrl+1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="423"/>
<source>Screen &amp;2x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="426"/>
<source>Ctrl+2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="434"/>
<source>Screen &amp;3x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="437"/>
<source>Ctrl+3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="445"/>
<source>Screen &amp;4x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="448"/>
<source>Ctrl+4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="456"/>
<source>&amp;Fast Memory (dynarec, unstable)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="464"/>
<source>&amp;Ignore illegal reads/writes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="469"/>
<source>&amp;Go to http://www.ppsspp.org/</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="474"/>
<source>&amp;About PPSSPP...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="482"/>
<source>&amp;Use VBO</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="490"/>
<location filename="../mainwindow.ui" line="522"/>
<location filename="../mainwindow.ui" line="554"/>
<source>Debug</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="498"/>
<location filename="../mainwindow.ui" line="530"/>
<location filename="../mainwindow.ui" line="562"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="506"/>
<location filename="../mainwindow.ui" line="546"/>
<location filename="../mainwindow.ui" line="578"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="514"/>
<location filename="../mainwindow.ui" line="538"/>
<location filename="../mainwindow.ui" line="570"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="583"/>
<source>GamePad Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="588"/>
<source>&amp;Run on load</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="593"/>
<source>D&amp;ump next frame to log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="601"/>
<source>&amp;Vertex Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="606"/>
<source>Memory View Texture...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="614"/>
<source>Simple 2xAA</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="622"/>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="630"/>
<source>2x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="638"/>
<source>4x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="646"/>
<source>8x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="654"/>
<source>16x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="662"/>
<source>Show FPS counter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="840"/>
<source>No translations</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>gamepadMapping</name>
<message>
<location filename="../gamepaddialog.cpp" line="19"/>
<source>Cross</source>
<translation type="unfinished">Kreuz</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="20"/>
<source>Circle</source>
<translation type="unfinished">Kreis</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="21"/>
<source>Square</source>
<translation type="unfinished">Viereck</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="22"/>
<source>Triangle</source>
<translation type="unfinished">Dreieck</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="23"/>
<source>Left Trigger</source>
<translation type="unfinished">Linke Schultertaste</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="24"/>
<source>Right Trigger</source>
<translation type="unfinished">Rechte Schultertaste</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="25"/>
<source>Start</source>
<translation type="unfinished">Start</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="26"/>
<source>Select</source>
<translation type="unfinished">Select</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="27"/>
<source>Up</source>
<translation type="unfinished">Hoch</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="28"/>
<source>Down</source>
<translation type="unfinished">Runter</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="29"/>
<source>Left</source>
<translation type="unfinished">Links</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="30"/>
<source>Right</source>
<translation type="unfinished">Rechts</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="32"/>
<source>Home</source>
<translation type="unfinished">Home</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="35"/>
<source>Stick left</source>
<translation type="unfinished">Analogstick links</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="36"/>
<source>Stick right</source>
<translation type="unfinished">Analogstick rechts</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="37"/>
<source>Stick up</source>
<translation type="unfinished">Analogstick oben</translation>
</message>
<message>
<location filename="../gamepaddialog.cpp" line="38"/>
<source>Stick bottom</source>
<translation type="unfinished">Analogstick unten</translation>
</message>
</context>
</TS>

View File

@ -6,7 +6,7 @@
<message>
<location filename="../controls.ui" line="20"/>
<source>Controls</source>
<comment>Control window title</comment>
<comment>Controls window title</comment>
<translation type="unfinished"></translation>
</message>
</context>
@ -539,320 +539,360 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="172"/>
<location filename="../mainwindow.ui" line="149"/>
<source>Anisotropic filtering</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="185"/>
<source>&amp;Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="187"/>
<location filename="../mainwindow.ui" line="200"/>
<source>&amp;Open...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="192"/>
<location filename="../mainwindow.ui" line="205"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="197"/>
<location filename="../mainwindow.ui" line="210"/>
<source>-</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="202"/>
<location filename="../mainwindow.ui" line="215"/>
<source>Quickload state</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="205"/>
<location filename="../mainwindow.ui" line="218"/>
<source>F4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="210"/>
<location filename="../mainwindow.ui" line="223"/>
<source>Quicksave state</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="213"/>
<location filename="../mainwindow.ui" line="226"/>
<source>F2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="218"/>
<location filename="../mainwindow.ui" line="231"/>
<source>&amp;Load State File...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="223"/>
<location filename="../mainwindow.ui" line="236"/>
<source>&amp;Save State File...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="228"/>
<location filename="../mainwindow.ui" line="241"/>
<source>E&amp;xit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="233"/>
<location filename="../mainwindow.ui" line="246"/>
<source>&amp;Run</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="236"/>
<location filename="../mainwindow.ui" line="249"/>
<source>F7</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="241"/>
<location filename="../mainwindow.ui" line="254"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="244"/>
<location filename="../mainwindow.ui" line="257"/>
<source>F8</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="249"/>
<location filename="../mainwindow.ui" line="262"/>
<source>R&amp;eset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="257"/>
<location filename="../mainwindow.ui" line="270"/>
<source>&amp;Interpreter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="265"/>
<location filename="../mainwindow.ui" line="278"/>
<source>&amp;Slightly Faster Interpreter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="273"/>
<location filename="../mainwindow.ui" line="286"/>
<source>&amp;Dynarec</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="281"/>
<location filename="../mainwindow.ui" line="294"/>
<source>Load &amp;Map File...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="289"/>
<location filename="../mainwindow.ui" line="302"/>
<source>&amp;Save Map File...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="297"/>
<location filename="../mainwindow.ui" line="310"/>
<source>&amp;Reset Symbol Table</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="302"/>
<location filename="../mainwindow.ui" line="315"/>
<source>&amp;Disassembly</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="305"/>
<location filename="../mainwindow.ui" line="318"/>
<source>Ctrl+D</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="313"/>
<location filename="../mainwindow.ui" line="326"/>
<source>&amp;Log Console</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="316"/>
<location filename="../mainwindow.ui" line="329"/>
<source>Ctrl+L</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="321"/>
<location filename="../mainwindow.ui" line="334"/>
<source>Memory &amp;View...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="324"/>
<location filename="../mainwindow.ui" line="337"/>
<source>Ctrl+M</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="329"/>
<location filename="../mainwindow.ui" line="342"/>
<source>Keyboard &amp;Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="334"/>
<location filename="../mainwindow.ui" line="347"/>
<source>&amp;Toggle Full Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="337"/>
<location filename="../mainwindow.ui" line="350"/>
<source>F12</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="345"/>
<location filename="../mainwindow.ui" line="358"/>
<source>&amp;Buffered Rendering</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="348"/>
<location filename="../mainwindow.ui" line="361"/>
<source>F5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="356"/>
<location filename="../mainwindow.ui" line="369"/>
<source>&amp;Hardware Transform</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="359"/>
<location filename="../mainwindow.ui" line="372"/>
<source>F6</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="367"/>
<location filename="../mainwindow.ui" line="380"/>
<source>&amp;Linear Filtering</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="375"/>
<location filename="../mainwindow.ui" line="388"/>
<source>&amp;Wireframe (experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="383"/>
<location filename="../mainwindow.ui" line="396"/>
<source>&amp;Display Raw Framebuffer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="391"/>
<location filename="../mainwindow.ui" line="404"/>
<source>&amp;Show Debug Statistics</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="399"/>
<location filename="../mainwindow.ui" line="412"/>
<source>Screen &amp;1x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="402"/>
<location filename="../mainwindow.ui" line="415"/>
<source>Ctrl+1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="410"/>
<location filename="../mainwindow.ui" line="423"/>
<source>Screen &amp;2x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="413"/>
<location filename="../mainwindow.ui" line="426"/>
<source>Ctrl+2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="421"/>
<location filename="../mainwindow.ui" line="434"/>
<source>Screen &amp;3x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="424"/>
<location filename="../mainwindow.ui" line="437"/>
<source>Ctrl+3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="432"/>
<location filename="../mainwindow.ui" line="445"/>
<source>Screen &amp;4x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="435"/>
<location filename="../mainwindow.ui" line="448"/>
<source>Ctrl+4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="443"/>
<location filename="../mainwindow.ui" line="456"/>
<source>&amp;Fast Memory (dynarec, unstable)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="451"/>
<location filename="../mainwindow.ui" line="464"/>
<source>&amp;Ignore illegal reads/writes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="456"/>
<location filename="../mainwindow.ui" line="469"/>
<source>&amp;Go to http://www.ppsspp.org/</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="461"/>
<location filename="../mainwindow.ui" line="474"/>
<source>&amp;About PPSSPP...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="466"/>
<location filename="../mainwindow.ui" line="482"/>
<source>&amp;Use VBO</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="474"/>
<location filename="../mainwindow.ui" line="506"/>
<location filename="../mainwindow.ui" line="538"/>
<location filename="../mainwindow.ui" line="490"/>
<location filename="../mainwindow.ui" line="522"/>
<location filename="../mainwindow.ui" line="554"/>
<source>Debug</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="482"/>
<location filename="../mainwindow.ui" line="514"/>
<location filename="../mainwindow.ui" line="546"/>
<location filename="../mainwindow.ui" line="498"/>
<location filename="../mainwindow.ui" line="530"/>
<location filename="../mainwindow.ui" line="562"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="490"/>
<location filename="../mainwindow.ui" line="530"/>
<location filename="../mainwindow.ui" line="562"/>
<location filename="../mainwindow.ui" line="506"/>
<location filename="../mainwindow.ui" line="546"/>
<location filename="../mainwindow.ui" line="578"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="498"/>
<location filename="../mainwindow.ui" line="522"/>
<location filename="../mainwindow.ui" line="554"/>
<location filename="../mainwindow.ui" line="514"/>
<location filename="../mainwindow.ui" line="538"/>
<location filename="../mainwindow.ui" line="570"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="567"/>
<location filename="../mainwindow.ui" line="583"/>
<source>GamePad Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="572"/>
<location filename="../mainwindow.ui" line="588"/>
<source>&amp;Run on load</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="577"/>
<location filename="../mainwindow.ui" line="593"/>
<source>D&amp;ump next frame to log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="582"/>
<location filename="../mainwindow.ui" line="601"/>
<source>&amp;Vertex Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="587"/>
<location filename="../mainwindow.ui" line="606"/>
<source>Memory View Texture...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="843"/>
<location filename="../mainwindow.ui" line="614"/>
<source>Simple 2xAA</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="622"/>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="630"/>
<source>2x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="638"/>
<source>4x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="646"/>
<source>8x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="654"/>
<source>16x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="662"/>
<source>Show FPS counter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="840"/>
<source>No translations</source>
<translation type="unfinished"></translation>
</message>

View File

@ -6,7 +6,7 @@
<message>
<location filename="../controls.ui" line="20"/>
<source>Controls</source>
<comment>Control window title</comment>
<comment>Controls window title</comment>
<translation type="unfinished"></translation>
</message>
</context>
@ -539,320 +539,360 @@
<translation>Langue</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="172"/>
<location filename="../mainwindow.ui" line="149"/>
<source>Anisotropic filtering</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="185"/>
<source>&amp;Help</source>
<translation>&amp;Aide</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="187"/>
<location filename="../mainwindow.ui" line="200"/>
<source>&amp;Open...</source>
<translation>&amp;Ouvrir...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="192"/>
<location filename="../mainwindow.ui" line="205"/>
<source>&amp;Close</source>
<translation>&amp;Fermer</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="197"/>
<location filename="../mainwindow.ui" line="210"/>
<source>-</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="202"/>
<location filename="../mainwindow.ui" line="215"/>
<source>Quickload state</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="205"/>
<location filename="../mainwindow.ui" line="218"/>
<source>F4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="210"/>
<location filename="../mainwindow.ui" line="223"/>
<source>Quicksave state</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="213"/>
<location filename="../mainwindow.ui" line="226"/>
<source>F2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="218"/>
<location filename="../mainwindow.ui" line="231"/>
<source>&amp;Load State File...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="223"/>
<location filename="../mainwindow.ui" line="236"/>
<source>&amp;Save State File...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="228"/>
<location filename="../mainwindow.ui" line="241"/>
<source>E&amp;xit</source>
<translation>&amp;Quitter</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="233"/>
<location filename="../mainwindow.ui" line="246"/>
<source>&amp;Run</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="236"/>
<location filename="../mainwindow.ui" line="249"/>
<source>F7</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="241"/>
<location filename="../mainwindow.ui" line="254"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="244"/>
<location filename="../mainwindow.ui" line="257"/>
<source>F8</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="249"/>
<location filename="../mainwindow.ui" line="262"/>
<source>R&amp;eset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="257"/>
<location filename="../mainwindow.ui" line="270"/>
<source>&amp;Interpreter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="265"/>
<location filename="../mainwindow.ui" line="278"/>
<source>&amp;Slightly Faster Interpreter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="273"/>
<location filename="../mainwindow.ui" line="286"/>
<source>&amp;Dynarec</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="281"/>
<location filename="../mainwindow.ui" line="294"/>
<source>Load &amp;Map File...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="289"/>
<location filename="../mainwindow.ui" line="302"/>
<source>&amp;Save Map File...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="297"/>
<location filename="../mainwindow.ui" line="310"/>
<source>&amp;Reset Symbol Table</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="302"/>
<location filename="../mainwindow.ui" line="315"/>
<source>&amp;Disassembly</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="305"/>
<location filename="../mainwindow.ui" line="318"/>
<source>Ctrl+D</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="313"/>
<location filename="../mainwindow.ui" line="326"/>
<source>&amp;Log Console</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="316"/>
<location filename="../mainwindow.ui" line="329"/>
<source>Ctrl+L</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="321"/>
<location filename="../mainwindow.ui" line="334"/>
<source>Memory &amp;View...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="324"/>
<location filename="../mainwindow.ui" line="337"/>
<source>Ctrl+M</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="329"/>
<location filename="../mainwindow.ui" line="342"/>
<source>Keyboard &amp;Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="334"/>
<location filename="../mainwindow.ui" line="347"/>
<source>&amp;Toggle Full Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="337"/>
<location filename="../mainwindow.ui" line="350"/>
<source>F12</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="345"/>
<location filename="../mainwindow.ui" line="358"/>
<source>&amp;Buffered Rendering</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="348"/>
<location filename="../mainwindow.ui" line="361"/>
<source>F5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="356"/>
<location filename="../mainwindow.ui" line="369"/>
<source>&amp;Hardware Transform</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="359"/>
<location filename="../mainwindow.ui" line="372"/>
<source>F6</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="367"/>
<location filename="../mainwindow.ui" line="380"/>
<source>&amp;Linear Filtering</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="375"/>
<location filename="../mainwindow.ui" line="388"/>
<source>&amp;Wireframe (experimental)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="383"/>
<location filename="../mainwindow.ui" line="396"/>
<source>&amp;Display Raw Framebuffer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="391"/>
<location filename="../mainwindow.ui" line="404"/>
<source>&amp;Show Debug Statistics</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="399"/>
<location filename="../mainwindow.ui" line="412"/>
<source>Screen &amp;1x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="402"/>
<location filename="../mainwindow.ui" line="415"/>
<source>Ctrl+1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="410"/>
<location filename="../mainwindow.ui" line="423"/>
<source>Screen &amp;2x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="413"/>
<location filename="../mainwindow.ui" line="426"/>
<source>Ctrl+2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="421"/>
<location filename="../mainwindow.ui" line="434"/>
<source>Screen &amp;3x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="424"/>
<location filename="../mainwindow.ui" line="437"/>
<source>Ctrl+3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="432"/>
<location filename="../mainwindow.ui" line="445"/>
<source>Screen &amp;4x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="435"/>
<location filename="../mainwindow.ui" line="448"/>
<source>Ctrl+4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="443"/>
<location filename="../mainwindow.ui" line="456"/>
<source>&amp;Fast Memory (dynarec, unstable)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="451"/>
<location filename="../mainwindow.ui" line="464"/>
<source>&amp;Ignore illegal reads/writes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="456"/>
<location filename="../mainwindow.ui" line="469"/>
<source>&amp;Go to http://www.ppsspp.org/</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="461"/>
<location filename="../mainwindow.ui" line="474"/>
<source>&amp;About PPSSPP...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="466"/>
<location filename="../mainwindow.ui" line="482"/>
<source>&amp;Use VBO</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="474"/>
<location filename="../mainwindow.ui" line="506"/>
<location filename="../mainwindow.ui" line="538"/>
<location filename="../mainwindow.ui" line="490"/>
<location filename="../mainwindow.ui" line="522"/>
<location filename="../mainwindow.ui" line="554"/>
<source>Debug</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="482"/>
<location filename="../mainwindow.ui" line="514"/>
<location filename="../mainwindow.ui" line="546"/>
<location filename="../mainwindow.ui" line="498"/>
<location filename="../mainwindow.ui" line="530"/>
<location filename="../mainwindow.ui" line="562"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="490"/>
<location filename="../mainwindow.ui" line="530"/>
<location filename="../mainwindow.ui" line="562"/>
<location filename="../mainwindow.ui" line="506"/>
<location filename="../mainwindow.ui" line="546"/>
<location filename="../mainwindow.ui" line="578"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="498"/>
<location filename="../mainwindow.ui" line="522"/>
<location filename="../mainwindow.ui" line="554"/>
<location filename="../mainwindow.ui" line="514"/>
<location filename="../mainwindow.ui" line="538"/>
<location filename="../mainwindow.ui" line="570"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="567"/>
<location filename="../mainwindow.ui" line="583"/>
<source>GamePad Controls</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="572"/>
<location filename="../mainwindow.ui" line="588"/>
<source>&amp;Run on load</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="577"/>
<location filename="../mainwindow.ui" line="593"/>
<source>D&amp;ump next frame to log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="582"/>
<location filename="../mainwindow.ui" line="601"/>
<source>&amp;Vertex Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="587"/>
<location filename="../mainwindow.ui" line="606"/>
<source>Memory View Texture...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="843"/>
<location filename="../mainwindow.ui" line="614"/>
<source>Simple 2xAA</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="622"/>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="630"/>
<source>2x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="638"/>
<source>4x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="646"/>
<source>8x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="654"/>
<source>16x</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="662"/>
<source>Show FPS counter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="840"/>
<source>No translations</source>
<translation type="unfinished"></translation>
</message>

View File

@ -6,8 +6,8 @@
<message>
<location filename="../controls.ui" line="20"/>
<source>Controls</source>
<comment>Control window title</comment>
<translation>Układ klawiszy</translation>
<comment>Controls window title</comment>
<translation type="unfinished">Układ klawiszy</translation>
</message>
</context>
<context>
@ -539,320 +539,360 @@
<translation>Język</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="172"/>
<location filename="../mainwindow.ui" line="149"/>
<source>Anisotropic filtering</source>
<translation>Filtrowanie anizotropowe</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="185"/>
<source>&amp;Help</source>
<translation>Pomo&amp;c</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="187"/>
<location filename="../mainwindow.ui" line="200"/>
<source>&amp;Open...</source>
<translation>&amp;Otwórz...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="192"/>
<location filename="../mainwindow.ui" line="205"/>
<source>&amp;Close</source>
<translation>&amp;Zamknij</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="197"/>
<location filename="../mainwindow.ui" line="210"/>
<source>-</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.ui" line="202"/>
<location filename="../mainwindow.ui" line="215"/>
<source>Quickload state</source>
<translation>Wczytaj stan</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="205"/>
<location filename="../mainwindow.ui" line="218"/>
<source>F4</source>
<translation>F4</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="210"/>
<location filename="../mainwindow.ui" line="223"/>
<source>Quicksave state</source>
<translation>Zapisz stan</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="213"/>
<location filename="../mainwindow.ui" line="226"/>
<source>F2</source>
<translation>F2</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="218"/>
<location filename="../mainwindow.ui" line="231"/>
<source>&amp;Load State File...</source>
<translation>&amp;Wczytaj plik stanu...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="223"/>
<location filename="../mainwindow.ui" line="236"/>
<source>&amp;Save State File...</source>
<translation>&amp;Zapisz plik stanu...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="228"/>
<location filename="../mainwindow.ui" line="241"/>
<source>E&amp;xit</source>
<translation>Wyj&amp;</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="233"/>
<location filename="../mainwindow.ui" line="246"/>
<source>&amp;Run</source>
<translation>&amp;Uruchom</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="236"/>
<location filename="../mainwindow.ui" line="249"/>
<source>F7</source>
<translation>F7</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="241"/>
<location filename="../mainwindow.ui" line="254"/>
<source>&amp;Pause</source>
<translation>&amp;Pauza</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="244"/>
<location filename="../mainwindow.ui" line="257"/>
<source>F8</source>
<translation>F8</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="249"/>
<location filename="../mainwindow.ui" line="262"/>
<source>R&amp;eset</source>
<translation>&amp;Reset</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="257"/>
<location filename="../mainwindow.ui" line="270"/>
<source>&amp;Interpreter</source>
<translation>&amp;Interpreter</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="265"/>
<location filename="../mainwindow.ui" line="278"/>
<source>&amp;Slightly Faster Interpreter</source>
<translation>&amp;Szybszy interpreter</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="273"/>
<location filename="../mainwindow.ui" line="286"/>
<source>&amp;Dynarec</source>
<translation>R&amp;ekompilacja (Dynarec)</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="281"/>
<location filename="../mainwindow.ui" line="294"/>
<source>Load &amp;Map File...</source>
<translation>&amp;Wczytaj plik mapy...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="289"/>
<location filename="../mainwindow.ui" line="302"/>
<source>&amp;Save Map File...</source>
<translation>&amp;Zapisz plik mapy...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="297"/>
<location filename="../mainwindow.ui" line="310"/>
<source>&amp;Reset Symbol Table</source>
<translation>Zresetuj &amp;tablicę symboli</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="302"/>
<location filename="../mainwindow.ui" line="315"/>
<source>&amp;Disassembly</source>
<translation>&amp;Deasembler</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="305"/>
<location filename="../mainwindow.ui" line="318"/>
<source>Ctrl+D</source>
<translation>Ctrl+D</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="313"/>
<location filename="../mainwindow.ui" line="326"/>
<source>&amp;Log Console</source>
<translation>&amp;Konsola logowania</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="316"/>
<location filename="../mainwindow.ui" line="329"/>
<source>Ctrl+L</source>
<translation>Ctrl+L</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="321"/>
<location filename="../mainwindow.ui" line="334"/>
<source>Memory &amp;View...</source>
<translation>Widok &amp;pamięci...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="324"/>
<location filename="../mainwindow.ui" line="337"/>
<source>Ctrl+M</source>
<translation>Ctrl+M</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="329"/>
<location filename="../mainwindow.ui" line="342"/>
<source>Keyboard &amp;Controls</source>
<translation>Ustawienia &amp;klawiatury</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="334"/>
<location filename="../mainwindow.ui" line="347"/>
<source>&amp;Toggle Full Screen</source>
<translation>&amp;Pełny ekran</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="337"/>
<location filename="../mainwindow.ui" line="350"/>
<source>F12</source>
<translation>F12</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="345"/>
<location filename="../mainwindow.ui" line="358"/>
<source>&amp;Buffered Rendering</source>
<translation>&amp;Buforowane renderowanie</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="348"/>
<location filename="../mainwindow.ui" line="361"/>
<source>F5</source>
<translation>F5</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="356"/>
<location filename="../mainwindow.ui" line="369"/>
<source>&amp;Hardware Transform</source>
<translation>Sprzętowa &amp;transformacja</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="359"/>
<location filename="../mainwindow.ui" line="372"/>
<source>F6</source>
<translation>F6</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="367"/>
<location filename="../mainwindow.ui" line="380"/>
<source>&amp;Linear Filtering</source>
<translation>Filtrowanie &amp;liniowe</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="375"/>
<location filename="../mainwindow.ui" line="388"/>
<source>&amp;Wireframe (experimental)</source>
<translation>&amp;Widok siatki (eksperymentalny)</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="383"/>
<location filename="../mainwindow.ui" line="396"/>
<source>&amp;Display Raw Framebuffer</source>
<translation>Wyświetl &amp;surowy framebuffer</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="391"/>
<location filename="../mainwindow.ui" line="404"/>
<source>&amp;Show Debug Statistics</source>
<translation>Pokaż statystyki &amp;emulacji</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="399"/>
<location filename="../mainwindow.ui" line="412"/>
<source>Screen &amp;1x</source>
<translation>&amp;1x</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="402"/>
<location filename="../mainwindow.ui" line="415"/>
<source>Ctrl+1</source>
<translation>Ctrl+1</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="410"/>
<location filename="../mainwindow.ui" line="423"/>
<source>Screen &amp;2x</source>
<translation>&amp;2x</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="413"/>
<location filename="../mainwindow.ui" line="426"/>
<source>Ctrl+2</source>
<translation>Ctrl+2</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="421"/>
<location filename="../mainwindow.ui" line="434"/>
<source>Screen &amp;3x</source>
<translation>&amp;3x</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="424"/>
<location filename="../mainwindow.ui" line="437"/>
<source>Ctrl+3</source>
<translation>Ctrl+3</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="432"/>
<location filename="../mainwindow.ui" line="445"/>
<source>Screen &amp;4x</source>
<translation>&amp;4x</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="435"/>
<location filename="../mainwindow.ui" line="448"/>
<source>Ctrl+4</source>
<translation>Ctrl+4</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="443"/>
<location filename="../mainwindow.ui" line="456"/>
<source>&amp;Fast Memory (dynarec, unstable)</source>
<translation>S&amp;zybka pamięć (wymagany Dynarec, niestabilne)</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="451"/>
<location filename="../mainwindow.ui" line="464"/>
<source>&amp;Ignore illegal reads/writes</source>
<translation>&amp;Ignoruj nieprawidłowe odczyty/zapisy</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="456"/>
<location filename="../mainwindow.ui" line="469"/>
<source>&amp;Go to http://www.ppsspp.org/</source>
<translation>&amp;Idź do http://www.ppsspp.org</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="461"/>
<location filename="../mainwindow.ui" line="474"/>
<source>&amp;About PPSSPP...</source>
<translation>&amp;O PPSSPP...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="466"/>
<location filename="../mainwindow.ui" line="482"/>
<source>&amp;Use VBO</source>
<translation>Użyj &amp;VBO</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="474"/>
<location filename="../mainwindow.ui" line="506"/>
<location filename="../mainwindow.ui" line="538"/>
<location filename="../mainwindow.ui" line="490"/>
<location filename="../mainwindow.ui" line="522"/>
<location filename="../mainwindow.ui" line="554"/>
<source>Debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="482"/>
<location filename="../mainwindow.ui" line="514"/>
<location filename="../mainwindow.ui" line="546"/>
<location filename="../mainwindow.ui" line="498"/>
<location filename="../mainwindow.ui" line="530"/>
<location filename="../mainwindow.ui" line="562"/>
<source>Warning</source>
<translation>Ostrzeżenia</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="490"/>
<location filename="../mainwindow.ui" line="530"/>
<location filename="../mainwindow.ui" line="562"/>
<location filename="../mainwindow.ui" line="506"/>
<location filename="../mainwindow.ui" line="546"/>
<location filename="../mainwindow.ui" line="578"/>
<source>Error</source>
<translation>Błędy</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="498"/>
<location filename="../mainwindow.ui" line="522"/>
<location filename="../mainwindow.ui" line="554"/>
<location filename="../mainwindow.ui" line="514"/>
<location filename="../mainwindow.ui" line="538"/>
<location filename="../mainwindow.ui" line="570"/>
<source>Info</source>
<translation>Info</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="567"/>
<location filename="../mainwindow.ui" line="583"/>
<source>GamePad Controls</source>
<translation>Ustawienia pada</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="572"/>
<location filename="../mainwindow.ui" line="588"/>
<source>&amp;Run on load</source>
<translation>Uruchom po &amp;załadowaniu</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="577"/>
<location filename="../mainwindow.ui" line="593"/>
<source>D&amp;ump next frame to log</source>
<translation>Z&amp;rzuć następną ramkę do logu</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="582"/>
<location filename="../mainwindow.ui" line="601"/>
<source>&amp;Vertex Cache</source>
<translation>&amp;Cache wierzchołków</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="587"/>
<location filename="../mainwindow.ui" line="606"/>
<source>Memory View Texture...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="843"/>
<location filename="../mainwindow.ui" line="614"/>
<source>Simple 2xAA</source>
<translation>Prosty antyaliasing 2x</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="622"/>
<source>Off</source>
<translation>Wyłączone</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="630"/>
<source>2x</source>
<translation>2x</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="638"/>
<source>4x</source>
<translation>4x</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="646"/>
<source>8x</source>
<translation>8x</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="654"/>
<source>16x</source>
<translation>16x</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="662"/>
<source>Show FPS counter</source>
<translation>Pokaż licznik FPS</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="840"/>
<source>No translations</source>
<translation>Brak tłumaczeń</translation>
</message>

1009
Qt/languages/ppsspp_tc.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -38,18 +38,15 @@ MainWindow::MainWindow(QWidget *parent) :
gamePadDlg = new GamePadDialog(&input_state, this);
#endif
SetPlaying(0);
host = new QtHost(this);
w = ui->widget;
w->init(&input_state);
w->resize(pixel_xres, pixel_yres);
w->setMinimumSize(pixel_xres, pixel_yres);
w->setMaximumSize(pixel_xres, pixel_yres);
QObject::connect( w, SIGNAL(doubleClick()), this, SLOT(on_action_OptionsFullScreen_triggered()) );
emugl = ui->widget;
emugl->init(&input_state);
emugl->resize(pixel_xres, pixel_yres);
emugl->setMinimumSize(pixel_xres, pixel_yres);
emugl->setMaximumSize(pixel_xres, pixel_yres);
QObject::connect( emugl, SIGNAL(doubleClick()), this, SLOT(on_action_OptionsFullScreen_triggered()) );
createLanguageMenu();
UpdateMenus();
int zoom = g_Config.iWindowZoom;
@ -57,19 +54,20 @@ MainWindow::MainWindow(QWidget *parent) :
if (zoom > 4) zoom = 4;
SetZoom(zoom);
EmuThread_Start(w);
EmuThread_Start(emugl);
if (!fileToStart.isNull())
{
SetPlaying(fileToStart);
//Update();
SetGameTitle(fileToStart);
UpdateMenus();
EmuThread_StartGame(fileToStart);
}
if (!fileToStart.isNull() && stateToLoad != NULL)
if (stateToLoad != NULL)
SaveState::Load(stateToLoad);
}
else
SetGameTitle("");
}
MainWindow::~MainWindow()
@ -164,26 +162,17 @@ void NativeInit(int argc, const char *argv[], const char *savegame_directory, co
g_Config.memCardDirectory = std::string(getenv("HOME"))+"/.ppsspp/";
g_Config.flashDirectory = g_Config.memCardDirectory+"/flash/";
LogManager::Init();
if (fileToLog != NULL)
LogManager::GetInstance()->ChangeFileLog(fileToLog);
//LogManager::GetInstance()->GetConsoleListener()->Open(hideLog, 150, 120, "PPSSPP Debug Console");
LogManager::GetInstance()->SetLogLevel(LogTypes::G3D, LogTypes::LERROR);
}
void MainWindow::SetPlaying(QString text)
{
if (text == 0)
{
QString title = "PPSSPP " + QString(PPSSPP_VERSION_STR);
setWindowTitle(title);
}
else
{
QString title = "PPSSPP " + QString(PPSSPP_VERSION_STR) + "-" + text;
setWindowTitle(title);
}
LogManager::GetInstance()->SetLogLevel(LogTypes::G3D, LogTypes::LERROR);
#if !defined(USING_GLES2)
// Start Desktop UI
MainWindow* mainWindow = new MainWindow();
mainWindow->show();
#endif
}
void MainWindow::SetNextState(CoreState state)
@ -191,6 +180,15 @@ void MainWindow::SetNextState(CoreState state)
nextState = state;
}
void MainWindow::SetGameTitle(QString text)
{
QString title = "PPSSPP " + QString(PPSSPP_VERSION_STR);
if (text != "")
title += QString(" - %1").arg(text);
setWindowTitle(title);
}
void MainWindow::BrowseAndBoot(void)
{
QString filename = QFileDialog::getOpenFileName(NULL, "Load File", g_Config.currentDirectory.c_str(), "PSP ROMs (*.pbp *.elf *.iso *.cso *.prx)");
@ -245,6 +243,12 @@ void MainWindow::UpdateMenus()
ui->action_EmulationRunLoad->setChecked(g_Config.bAutoRun);
ui->action_OptionsUseVBO->setChecked(g_Config.bUseVBO);
ui->action_OptionsVertexCache->setChecked(g_Config.bVertexCache);
ui->action_AFOff->setChecked(g_Config.iAnisotropyLevel == 0);
ui->action_AF2x->setChecked(g_Config.iAnisotropyLevel == 2);
ui->action_AF4x->setChecked(g_Config.iAnisotropyLevel == 4);
ui->action_AF8x->setChecked(g_Config.iAnisotropyLevel == 8);
ui->action_AF16x->setChecked(g_Config.iAnisotropyLevel == 16);
ui->action_Show_FPS_counter->setChecked(g_Config.bShowFPSCounter);
bool enable = !Core_IsStepping() ? false : true;
ui->action_EmulationRun->setEnabled(g_State.bEmuThreadStarted ? enable : false);
@ -261,6 +265,9 @@ void MainWindow::UpdateMenus()
ui->action_CPUInterpreter->setEnabled(enable);
ui->action_CPUFastInterpreter->setEnabled(enable);
ui->action_EmulationStop->setEnabled(!enable);
ui->action_DebugDumpFrame->setEnabled(!enable);
ui->action_DebugDisassembly->setEnabled(!enable);
ui->action_DebugMemoryView->setEnabled(!enable);
ui->action_OptionsScreen1x->setChecked(0 == (g_Config.iWindowZoom - 1));
ui->action_OptionsScreen2x->setChecked(1 == (g_Config.iWindowZoom - 1));
@ -292,9 +299,9 @@ void MainWindow::SetZoom(float zoom) {
dp_xres = pixel_xres;
dp_yres = pixel_yres;
w->resize(pixel_xres, pixel_yres);
w->setMinimumSize(pixel_xres, pixel_yres);
w->setMaximumSize(pixel_xres, pixel_yres);
emugl->resize(pixel_xres, pixel_yres);
emugl->setMinimumSize(pixel_xres, pixel_yres);
emugl->setMaximumSize(pixel_xres, pixel_yres);
ui->centralwidget->setFixedSize(pixel_xres, pixel_yres);
ui->centralwidget->resize(pixel_xres, pixel_yres);
@ -339,8 +346,7 @@ void MainWindow::on_action_EmulationStop_triggered()
memoryWindow->close();
EmuThread_StopGame();
SetPlaying(0);
Update();
SetGameTitle("");
UpdateMenus();
}
@ -596,8 +602,8 @@ void MainWindow::on_action_OptionsFullScreen_triggered()
ui->statusbar->setVisible(false);
// Remove constraint
w->setMinimumSize(0, 0);
w->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
emugl->setMinimumSize(0, 0);
emugl->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
ui->centralwidget->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
@ -820,7 +826,7 @@ void MainWindow::loadLanguage(const QString& language)
QLocale locale = QLocale(currentLanguage);
QLocale::setDefault(locale);
QString languageName = QLocale::languageToString(locale.language());
switchTranslator(translator, QString("languages/ppsspp_%1.qm").arg(language));
switchTranslator(translator, QString(":/languages/ppsspp_%1.qm").arg(language));
}
}
@ -833,10 +839,7 @@ void MainWindow::createLanguageMenu()
QString defaultLocale = QLocale::system().name();
defaultLocale.truncate(defaultLocale.lastIndexOf('_'));
languagePath = QApplication::applicationDirPath();
languagePath.append("/languages");
QDir langDir(languagePath);
QStringList fileNames = langDir.entryList(QStringList("ppsspp_*.qm"));
QStringList fileNames = QDir(":/languages").entryList(QStringList("ppsspp_*.qm"));
if (fileNames.size() == 0)
{
@ -853,8 +856,11 @@ void MainWindow::createLanguageMenu()
locale.truncate(locale.lastIndexOf('.'));
locale.remove(0, locale.indexOf('_') + 1);
//QString language = QLocale::languageToString(QLocale(locale).language());
#if QT_VERSION >= 0x040800
QString language = QLocale(locale).nativeLanguageName();
#else
QString language = QLocale::languageToString(QLocale(locale).language());
#endif
QAction *action = new QAction(language, this);
action->setCheckable(true);
action->setData(locale);
@ -946,3 +952,45 @@ void MainWindow::on_action_OptionsUseVBO_triggered()
g_Config.bUseVBO = !g_Config.bUseVBO;
UpdateMenus();
}
void MainWindow::on_action_Simple_2xAA_triggered()
{
g_Config.SSAntiAliasing = !g_Config.SSAntiAliasing;
UpdateMenus();
}
void MainWindow::on_action_AFOff_triggered()
{
g_Config.iAnisotropyLevel = 0;
UpdateMenus();
}
void MainWindow::on_action_AF2x_triggered()
{
g_Config.iAnisotropyLevel = 2;
UpdateMenus();
}
void MainWindow::on_action_AF4x_triggered()
{
g_Config.iAnisotropyLevel = 4;
UpdateMenus();
}
void MainWindow::on_action_AF8x_triggered()
{
g_Config.iAnisotropyLevel = 8;
UpdateMenus();
}
void MainWindow::on_action_AF16x_triggered()
{
g_Config.iAnisotropyLevel = 16;
UpdateMenus();
}
void MainWindow::on_action_Show_FPS_counter_triggered()
{
g_Config.bShowFPSCounter = !g_Config.bShowFPSCounter;
UpdateMenus();
}

View File

@ -29,7 +29,7 @@ public:
void Create(int argc, const char *argv[], const char *savegame_directory, const char *external_directory, const char *installID);
void BrowseAndBoot();
void SetNextState(CoreState state);
void SetPlaying(QString text);
void SetGameTitle(QString text);
Debugger_Disasm* GetDialogDisasm() { return dialogDisasm; }
Debugger_Memory* GetDialogMemory() { return memoryWindow; }
@ -153,6 +153,20 @@ private slots:
void on_action_OptionsUseVBO_triggered();
void on_action_Simple_2xAA_triggered();
void on_action_AFOff_triggered();
void on_action_AF2x_triggered();
void on_action_AF4x_triggered();
void on_action_AF8x_triggered();
void on_action_AF16x_triggered();
void on_action_Show_FPS_counter_triggered();
private:
void loadLanguage(const QString &language);
void createLanguageMenu();
@ -165,7 +179,7 @@ private:
Ui::MainWindow *ui;
QtEmuGL* w;
QtEmuGL* emugl;
CoreState nextState;
InputState input_state;

View File

@ -144,6 +144,16 @@
<string>Language</string>
</property>
</widget>
<widget class="QMenu" name="menuAnisotropic_filtering">
<property name="title">
<string>Anisotropic filtering</string>
</property>
<addaction name="action_AFOff"/>
<addaction name="action_AF2x"/>
<addaction name="action_AF4x"/>
<addaction name="action_AF8x"/>
<addaction name="action_AF16x"/>
</widget>
<addaction name="action_OptionsControls"/>
<addaction name="action_OptionsGamePadControls"/>
<addaction name="separator"/>
@ -151,12 +161,15 @@
<addaction name="action_OptionsBufferedRendering"/>
<addaction name="action_OptionsHardwareTransform"/>
<addaction name="action_OptionsLinearFiltering"/>
<addaction name="action_Simple_2xAA"/>
<addaction name="menuAnisotropic_filtering"/>
<addaction name="action_OptionsUseVBO"/>
<addaction name="action_OptionsVertexCache"/>
<addaction name="separator"/>
<addaction name="action_OptionsWireframe"/>
<addaction name="action_OptionsDisplayRawFramebuffer"/>
<addaction name="action_OptionsShowDebugStatistics"/>
<addaction name="action_Show_FPS_counter"/>
<addaction name="separator"/>
<addaction name="menu_Log_Levels"/>
<addaction name="separator"/>
@ -462,6 +475,9 @@
</property>
</action>
<action name="action_OptionsUseVBO">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>&amp;Use VBO</string>
</property>
@ -578,6 +594,9 @@
</property>
</action>
<action name="action_OptionsVertexCache">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>&amp;Vertex Cache</string>
</property>
@ -587,6 +606,62 @@
<string>Memory View Texture...</string>
</property>
</action>
<action name="action_Simple_2xAA">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Simple 2xAA</string>
</property>
</action>
<action name="action_AFOff">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Off</string>
</property>
</action>
<action name="action_AF2x">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>2x</string>
</property>
</action>
<action name="action_AF4x">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>4x</string>
</property>
</action>
<action name="action_AF8x">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>8x</string>
</property>
</action>
<action name="action_AF16x">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>16x</string>
</property>
</action>
<action name="action_Show_FPS_counter">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Show FPS counter</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>

View File

@ -17,4 +17,10 @@
<file alias="breakpointDisable">resources/stop1.ico</file>
<file alias="breakpoint">resources/icon1.ico</file>
</qresource>
<qresource prefix="/">
<file>languages/ppsspp_cn.qm</file>
<file>languages/ppsspp_en.qm</file>
<file>languages/ppsspp_fr.qm</file>
<file>languages/ppsspp_pl.qm</file>
</qresource>
</RCC>

View File

@ -100,15 +100,30 @@ to get Eclipse to rebuild the project.
Also note that the `Visual Studio` generators aren't compatible with compilers
other than Microsoft's, but `NMake Makefiles` works fine.
Building for iOS
----------------
Note: This does not work yet.
Create a `build-ios` directory and inside it run:
cmake -DCMAKE_TOOLCHAIN_FILE=../ios/ios.toolchain.cmake -GXcode ..
Then open the generated project in Xcode.
For more information, see: http://code.google.com/p/ios-cmake/wiki/HowTo
Building for Blackberry
-----------------------
To build for Blackberry, you must first have the [latest Native SDK][blackberry-ndk] installed.
To set up your environment for cross-compiling you must then use:
source ~/bbndk/bbndk-env.sh
Finally, you are ready to compile. Go to ppsspp/Blackberry/ and run:
./build.sh
If you are on Windows, you will need GNU and CMake to run the bash script.

View File

@ -441,6 +441,12 @@ namespace MainWindow
UpdateMenus();
break;
case ID_OPTIONS_STRETCHDISPLAY:
g_Config.bStretchToDisplay = !g_Config.bStretchToDisplay;
UpdateMenus();
gpu->Resized(); // easy way to force a clear...
break;
case ID_FILE_EXIT:
DestroyWindow(hWnd);
break;
@ -705,6 +711,7 @@ namespace MainWindow
CHECKITEM(ID_OPTIONS_FASTMEMORY, g_Config.bFastMemory);
CHECKITEM(ID_OPTIONS_LINEARFILTERING, g_Config.bLinearFiltering);
CHECKITEM(ID_OPTIONS_SIMPLE2XSSAA, g_Config.SSAntiAliasing);
CHECKITEM(ID_OPTIONS_STRETCHDISPLAY, g_Config.bStretchToDisplay);
CHECKITEM(ID_EMULATION_RUNONLOAD, g_Config.bAutoRun);
CHECKITEM(ID_OPTIONS_USEVBO, g_Config.bUseVBO);
CHECKITEM(ID_OPTIONS_DISABLEG3DLOG, g_Config.bDisableG3DLog);

View File

@ -253,6 +253,7 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Toggle Full Screen\tF12", ID_OPTIONS_FULLSCREEN
MENUITEM "&Buffered Rendering\tF5", ID_OPTIONS_BUFFEREDRENDERING
MENUITEM "&Stretch to display", ID_OPTIONS_STRETCHDISPLAY
MENUITEM "&Hardware Transform\tF6", ID_OPTIONS_HARDWARETRANSFORM
MENUITEM "&Linear Filtering", ID_OPTIONS_LINEARFILTERING
MENUITEM "Si&mple 2x SSAA", ID_OPTIONS_SIMPLE2XSSAA

View File

@ -259,6 +259,7 @@
#define ID_OPTIONS_DISABLEG3DLOG 40135
#define ID_OPTIONS_VERTEXCACHE 40136
#define ID_OPTIONS_SHOWFPS 40137
#define ID_OPTIONS_STRETCHDISPLAY 40138
#define IDC_STATIC -1
// Next default values for new objects
@ -266,7 +267,7 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 233
#define _APS_NEXT_COMMAND_VALUE 40138
#define _APS_NEXT_COMMAND_VALUE 40139
#define _APS_NEXT_CONTROL_VALUE 1163
#define _APS_NEXT_SYMED_VALUE 101
#endif

View File

@ -32,6 +32,9 @@ TouchButton buttonLeft(&ui_atlas, I_DIR, I_ARROW, PAD_BUTTON_LEFT, 0);
TouchButton buttonUp(&ui_atlas, I_DIR, I_ARROW, PAD_BUTTON_UP, 90);
TouchButton buttonRight(&ui_atlas, I_DIR, I_ARROW, PAD_BUTTON_RIGHT, 180);
TouchButton buttonDown(&ui_atlas, I_DIR, I_ARROW, PAD_BUTTON_DOWN, 270);
#ifdef __SYMBIAN32__
TouchButton buttonPause(&ui_atlas, I_RECT, I_ARROW, PAD_BUTTON_BACK, 90);
#endif
TouchStick leftStick(&ui_atlas, I_STICKBG, I_STICK, 0);
@ -72,6 +75,10 @@ void LayoutGamepad(int w, int h)
buttonLShoulder.setPos(button_spacing + 10 * controlScale, 15 * controlScale, controlScale);
buttonRShoulder.setPos(w - button_spacing - 10 * controlScale, 15 * controlScale, controlScale);
#ifdef __SYMBIAN32__
buttonPause.setPos(halfW, 15 * controlScale, controlScale);
#endif
leftStick.setPos(stickX, stickY, controlScale);
}
@ -94,6 +101,10 @@ void UpdateGamepad(InputState &input_state)
buttonLShoulder.update(input_state);
buttonRShoulder.update(input_state);
#ifdef __SYMBIAN32__
buttonPause.update(input_state);
#endif
if (g_Config.bShowAnalogStick)
leftStick.update(input_state);
}
@ -117,6 +128,10 @@ void DrawGamepad(DrawBuffer &db)
buttonLShoulder.draw(db, color, colorOverlay);
buttonRShoulder.draw(db, color, colorOverlay);
#ifdef __SYMBIAN32__
buttonPause.draw(db, color, colorOverlay);
#endif
if (g_Config.bShowAnalogStick)
leftStick.draw(db, color);
}

View File

@ -170,7 +170,7 @@ void MenuScreen::render() {
VLinear vlinear(dp_xres + xoff, 95, 20);
if (UIButton(GEN_ID, vlinear, w, "Load...", ALIGN_RIGHT)) {
#if defined(USING_QT_UI) && defined(__SYMBIAN32__)
#if defined(USING_QT_UI)
QString fileName = QFileDialog::getOpenFileName(NULL, "Load ROM", g_Config.currentDirectory.c_str(), "PSP ROMs (*.iso *.cso *.pbp *.elf)");
if (QFile::exists(fileName)) {
QDir newPath;
@ -245,6 +245,11 @@ void InGameMenuScreen::render() {
int x = 30;
int y = 50;
UICheckBox(GEN_ID, x, y += 50, "Show Debug Statistics", ALIGN_TOPLEFT, &g_Config.bShowDebugStats);
UICheckBox(GEN_ID, x, y += 50, "Show FPS", ALIGN_TOPLEFT, &g_Config.bShowFPSCounter);
// TODO: Maybe shouldn't show this if the screen ratios are very close...
UICheckBox(GEN_ID, x, y += 50, "Stretch to display", ALIGN_TOPLEFT, &g_Config.bStretchToDisplay);
UICheckBox(GEN_ID, x, y += 50, "Hardware Transform", ALIGN_TOPLEFT, &g_Config.bHardwareTransform);
// TODO: Add UI for more than one slot.
@ -461,7 +466,8 @@ static const char *credits[] =
"Android SDK + NDK",
#elif defined(BLACKBERRY)
"Blackberry NDK",
#elif defined(USING_QT_UI)
#endif
#if defined(USING_QT_UI)
"Qt",
#else
"SDL",

View File

@ -89,6 +89,7 @@ void UIShader_Prepare()
glstate.depthTest.disable();
glstate.scissorTest.disable();
glstate.stencilTest.disable();
glstate.dither.enable();
glstate.blend.enable();
glstate.blendFunc.set(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

190
ios/ios.toolchain.cmake Normal file
View File

@ -0,0 +1,190 @@
# This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake
# files which are included with CMake 2.8.4
# It has been altered for iOS development
# Options:
#
# IOS_PLATFORM = OS (default) or SIMULATOR
# This decides if SDKS will be selected from the iPhoneOS.platform or iPhoneSimulator.platform folders
# OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch.
# SIMULATOR - used to build for the Simulator platforms, which have an x86 arch.
#
# CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer folder
# By default this location is automatcially chosen based on the IOS_PLATFORM value above.
# If set manually, it will override the default location and force the user of a particular Developer Platform
#
# CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder
# By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value.
# In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path.
# If set manually, this will force the use of a specific SDK version
# Macros:
#
# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE)
# A convenience macro for setting xcode specific properties on targets
# example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1")
#
# find_host_package (PROGRAM ARGS)
# A macro used to find executable programs on the host system, not within the iOS environment.
# Thanks to the android-cmake project for providing the command
# Standard settings
set (CMAKE_SYSTEM_NAME Darwin)
set (CMAKE_SYSTEM_VERSION 1)
set (UNIX True)
set (APPLE True)
set (IOS True)
# Determine the cmake host system version so we know where to find the iOS SDKs
find_program (CMAKE_UNAME uname /bin /usr/bin /usr/local/bin)
if (CMAKE_UNAME)
exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
string (REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
endif (CMAKE_UNAME)
# Force the compilers to gcc for iOS
include (CMakeForceCompiler)
CMAKE_FORCE_C_COMPILER (gcc gcc)
CMAKE_FORCE_CXX_COMPILER (g++ g++)
# Skip the platform compiler checks for cross compiling
set (CMAKE_CXX_COMPILER_WORKS TRUE)
set (CMAKE_C_COMPILER_WORKS TRUE)
# All iOS/Darwin specific settings - some may be redundant
set (CMAKE_SHARED_LIBRARY_PREFIX "lib")
set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
set (CMAKE_SHARED_MODULE_PREFIX "lib")
set (CMAKE_SHARED_MODULE_SUFFIX ".so")
set (CMAKE_MODULE_EXISTS 1)
set (CMAKE_DL_LIBS "")
set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
# Hidden visibilty is required for cxx on iOS
set (CMAKE_C_FLAGS_INIT "")
set (CMAKE_CXX_FLAGS_INIT "-headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden")
set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
set (CMAKE_PLATFORM_HAS_INSTALLNAME 1)
set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names")
set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names")
set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a")
# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree
# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache
# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun)
# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex
if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
# Setup iOS platform unless specified manually with IOS_PLATFORM
if (NOT DEFINED IOS_PLATFORM)
set (IOS_PLATFORM "OS")
endif (NOT DEFINED IOS_PLATFORM)
set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
# Check the platform selection and setup for developer root
if (${IOS_PLATFORM} STREQUAL "OS")
set (IOS_PLATFORM_LOCATION "iPhoneOS.platform")
# This causes the installers to properly locate the output libraries
set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos")
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
# This causes the installers to properly locate the output libraries
set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
else (${IOS_PLATFORM} STREQUAL "OS")
message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please choose OS or SIMULATOR")
endif (${IOS_PLATFORM} STREQUAL "OS")
# Setup iOS developer location unless specified manually with CMAKE_IOS_DEVELOPER_ROOT
# Note Xcode 4.3 changed the installation location, choose the most recent one available
set (XCODE_POST_43_ROOT "/Applications/Xcode.app/Contents/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
set (XCODE_PRE_43_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
if (EXISTS ${XCODE_POST_43_ROOT})
set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT})
elseif(EXISTS ${XCODE_PRE_43_ROOT})
set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT})
endif (EXISTS ${XCODE_POST_43_ROOT})
endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform")
# Find and use the most recent iOS sdk unless specified manually with CMAKE_IOS_SDK_ROOT
if (NOT DEFINED CMAKE_IOS_SDK_ROOT)
file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*")
if (_CMAKE_IOS_SDKS)
list (SORT _CMAKE_IOS_SDKS)
list (REVERSE _CMAKE_IOS_SDKS)
list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT)
else (_CMAKE_IOS_SDKS)
message (FATAL_ERROR "No iOS SDK's found in default seach path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.")
endif (_CMAKE_IOS_SDKS)
message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}")
endif (NOT DEFINED CMAKE_IOS_SDK_ROOT)
set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK")
# Set the sysroot default to the most recent SDK
set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support")
# set the architecture for iOS
# NOTE: Currently both ARCHS_STANDARD_32_BIT and ARCHS_UNIVERSAL_IPHONE_OS set armv7 only, so set both manually
if (${IOS_PLATFORM} STREQUAL "OS")
set (IOS_ARCH armv6 armv7)
else (${IOS_PLATFORM} STREQUAL "OS")
set (IOS_ARCH i386)
endif (${IOS_PLATFORM} STREQUAL "OS")
set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE string "Build architecture for iOS")
# Set the find root to the iOS developer roots and to user defined paths
set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE string "iOS find search path root")
# default to searching for frameworks first
set (CMAKE_FIND_FRAMEWORK FIRST)
# set up the default search directories for frameworks
set (CMAKE_SYSTEM_FRAMEWORK_PATH
${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks
${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks
${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks
)
# only search the iOS sdks, not the remainder of the host filesystem
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# This little macro lets you set any XCode specific property
macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
endmacro (set_xcode_property)
# This macro lets you find executable programs on the host system
macro (find_host_package)
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
set (IOS FALSE)
find_package(${ARGN})
set (IOS TRUE)
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
endmacro (find_host_package)

2
native

@ -1 +1 @@
Subproject commit 3caced8524c06cabcf968942a7780d80337de7bf
Subproject commit f5e7bd5a9c3e4b39a4eac71b577f06ad54f2bc96