mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-30 19:24:23 +01:00
Merge branch 'master' into config_openxr_update
This commit is contained in:
commit
13ca232fc0
111 files changed
+5411
-832
No files matched your search
+7
-5
@@ -884,7 +884,7 @@ add_library(cityhash STATIC
|
||||
ext/cityhash/city.h
|
||||
ext/cityhash/citycrc.h
|
||||
)
|
||||
include_directories(ext/cityhash)
|
||||
target_include_directories(cityhash PRIVATE ext/cityhash)
|
||||
|
||||
if(NOT MSVC)
|
||||
# These can be fast even for debug.
|
||||
@@ -1360,7 +1360,7 @@ add_library(kirk STATIC
|
||||
ext/libkirk/kirk_engine.c
|
||||
ext/libkirk/kirk_engine.h
|
||||
)
|
||||
include_directories(ext/libkirk)
|
||||
target_include_directories(kirk PRIVATE ext/libkirk)
|
||||
|
||||
add_library(sfmt19937 STATIC
|
||||
ext/sfmt19937/SFMT.c
|
||||
@@ -1369,19 +1369,20 @@ add_library(sfmt19937 STATIC
|
||||
ext/sfmt19937/SFMT-params.h
|
||||
ext/sfmt19937/SFMT-params19937.h
|
||||
)
|
||||
include_directories(ext/sfmt19937)
|
||||
target_compile_definitions(sfmt19937 PRIVATE SFMT_MEXP=19937)
|
||||
target_include_directories(sfmt19937 PRIVATE ext/sfmt19937)
|
||||
|
||||
add_library(xbrz STATIC
|
||||
ext/xbrz/xbrz.cpp
|
||||
ext/xbrz/xbrz.h
|
||||
)
|
||||
include_directories(ext/xbrz)
|
||||
target_include_directories(xbrz PRIVATE ext/xbrz)
|
||||
|
||||
add_library(xxhash STATIC
|
||||
ext/xxhash.c
|
||||
ext/xxhash.h
|
||||
)
|
||||
include_directories(ext/xxhash)
|
||||
target_include_directories(xxhash PRIVATE ext/xxhash)
|
||||
|
||||
set(CoreExtra)
|
||||
set(CoreExtraLibs)
|
||||
@@ -2067,6 +2068,7 @@ if(USE_SYSTEM_ZSTD)
|
||||
target_link_libraries(${CoreLibName} ${ZSTD_LIBRARY})
|
||||
else()
|
||||
set(ZSTD_BUILD_PROGRAMS OFF CACHE BOOL "we don't need zstd programs" FORCE)
|
||||
set(ZSTD_LEGACY_SUPPORT OFF CACHE BOOL "we don't use any old zstd files" FORCE)
|
||||
add_subdirectory(ext/zstd/build/cmake EXCLUDE_FROM_ALL)
|
||||
set(CoreExtraLibs ${CoreExtraLibs} libzstd_static)
|
||||
include_directories(ext/zstd/lib)
|
||||
|
||||
@@ -16,3 +16,9 @@ typedef unsigned int Color;
|
||||
inline Color darkenColor(Color color) {
|
||||
return (color & 0xFF000000) | ((color >> 1) & 0x7F7F7F);
|
||||
}
|
||||
|
||||
inline Color lightenColor(Color color) {
|
||||
color = ~color;
|
||||
color = (color & 0xFF000000) | ((color >> 1) & 0x7F7F7F);
|
||||
return ~color;
|
||||
}
|
||||
@@ -101,6 +101,14 @@ inline u16 RGBA8888ToRGBA5551(u32 value) {
|
||||
return (u16)(r | g | b | a);
|
||||
}
|
||||
|
||||
// Used in fast sprite path.
|
||||
inline u16 RGBA8888ToRGBA555X(u32 value) {
|
||||
u32 r = (value >> 3) & 0x1F;
|
||||
u32 g = (value >> 6) & (0x1F << 5);
|
||||
u32 b = (value >> 9) & (0x1F << 10);
|
||||
return (u16)(r | g | b);
|
||||
}
|
||||
|
||||
inline u16 RGBA8888ToRGBA4444(u32 value) {
|
||||
const u32 c = value >> 4;
|
||||
const u16 r = (c >> 0) & 0x000F;
|
||||
@@ -110,6 +118,14 @@ inline u16 RGBA8888ToRGBA4444(u32 value) {
|
||||
return r | g | b | a;
|
||||
}
|
||||
|
||||
inline u16 RGBA8888ToRGBA444X(u32 value) {
|
||||
const u32 c = value >> 4;
|
||||
const u16 r = (c >> 0) & 0x000F;
|
||||
const u16 g = (c >> 4) & 0x00F0;
|
||||
const u16 b = (c >> 8) & 0x0F00;
|
||||
return r | g | b;
|
||||
}
|
||||
|
||||
// convert image to 8888, parallelizable
|
||||
// TODO: Implement these in terms of the conversion functions below.
|
||||
void convert4444_gl(u16* data, u32* out, int width, int l, int u);
|
||||
|
||||
@@ -174,6 +174,19 @@ std::string* Section::GetLine(const char* key, std::string* valueOut, std::strin
|
||||
return 0;
|
||||
}
|
||||
|
||||
const std::string* Section::GetLine(const char* key, std::string* valueOut, std::string* commentOut) const
|
||||
{
|
||||
for (std::vector<std::string>::const_iterator iter = lines.begin(); iter != lines.end(); ++iter)
|
||||
{
|
||||
const std::string& line = *iter;
|
||||
std::string lineKey;
|
||||
ParseLine(line, &lineKey, valueOut, commentOut);
|
||||
if (!strcasecmp(lineKey.c_str(), key))
|
||||
return &line;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Section::Set(const char* key, uint32_t newValue) {
|
||||
Set(key, StringFromFormat("0x%08x", newValue).c_str());
|
||||
}
|
||||
@@ -218,7 +231,7 @@ void Section::Set(const char* key, const std::string& newValue, const std::strin
|
||||
Delete(key);
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, std::string* value, const char* defaultValue)
|
||||
bool Section::Get(const char* key, std::string* value, const char* defaultValue) const
|
||||
{
|
||||
const std::string* line = GetLine(key, value, 0);
|
||||
if (!line)
|
||||
@@ -275,7 +288,7 @@ void Section::AddComment(const std::string &comment) {
|
||||
lines.emplace_back("# " + comment);
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, std::vector<std::string>& values)
|
||||
bool Section::Get(const char* key, std::vector<std::string>& values) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@@ -303,7 +316,7 @@ bool Section::Get(const char* key, std::vector<std::string>& values)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, int* value, int defaultValue)
|
||||
bool Section::Get(const char* key, int* value, int defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@@ -313,7 +326,7 @@ bool Section::Get(const char* key, int* value, int defaultValue)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, uint32_t* value, uint32_t defaultValue)
|
||||
bool Section::Get(const char* key, uint32_t* value, uint32_t defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@@ -323,7 +336,7 @@ bool Section::Get(const char* key, uint32_t* value, uint32_t defaultValue)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, uint64_t* value, uint64_t defaultValue)
|
||||
bool Section::Get(const char* key, uint64_t* value, uint64_t defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@@ -333,7 +346,7 @@ bool Section::Get(const char* key, uint64_t* value, uint64_t defaultValue)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, bool* value, bool defaultValue)
|
||||
bool Section::Get(const char* key, bool* value, bool defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@@ -343,7 +356,7 @@ bool Section::Get(const char* key, bool* value, bool defaultValue)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, float* value, float defaultValue)
|
||||
bool Section::Get(const char* key, float* value, float defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
@@ -353,7 +366,7 @@ bool Section::Get(const char* key, float* value, float defaultValue)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Section::Get(const char* key, double* value, double defaultValue)
|
||||
bool Section::Get(const char* key, double* value, double defaultValue) const
|
||||
{
|
||||
std::string temp;
|
||||
bool retval = Get(key, &temp, 0);
|
||||
|
||||
@@ -25,14 +25,16 @@ public:
|
||||
|
||||
std::map<std::string, std::string> ToMap() const;
|
||||
|
||||
std::string* GetLine(const char* key, std::string* valueOut, std::string* commentOut);
|
||||
std::string *GetLine(const char* key, std::string* valueOut, std::string* commentOut);
|
||||
const std::string *GetLine(const char* key, std::string* valueOut, std::string* commentOut) const;
|
||||
|
||||
void Set(const char* key, const char* newValue);
|
||||
void Set(const char* key, const std::string& newValue, const std::string& defaultValue);
|
||||
|
||||
void Set(const std::string &key, const std::string &value) {
|
||||
Set(key.c_str(), value.c_str());
|
||||
}
|
||||
bool Get(const char* key, std::string* value, const char* defaultValue);
|
||||
bool Get(const char* key, std::string* value, const char* defaultValue) const;
|
||||
|
||||
void Set(const char* key, uint32_t newValue);
|
||||
void Set(const char* key, uint64_t newValue);
|
||||
@@ -57,13 +59,13 @@ public:
|
||||
|
||||
void AddComment(const std::string &comment);
|
||||
|
||||
bool Get(const char* key, int* value, int defaultValue = 0);
|
||||
bool Get(const char* key, uint32_t* value, uint32_t defaultValue = 0);
|
||||
bool Get(const char* key, uint64_t* value, uint64_t defaultValue = 0);
|
||||
bool Get(const char* key, bool* value, bool defaultValue = false);
|
||||
bool Get(const char* key, float* value, float defaultValue = false);
|
||||
bool Get(const char* key, double* value, double defaultValue = false);
|
||||
bool Get(const char* key, std::vector<std::string>& values);
|
||||
bool Get(const char* key, int* value, int defaultValue = 0) const;
|
||||
bool Get(const char* key, uint32_t* value, uint32_t defaultValue = 0) const;
|
||||
bool Get(const char* key, uint64_t* value, uint64_t defaultValue = 0) const;
|
||||
bool Get(const char* key, bool* value, bool defaultValue = false) const;
|
||||
bool Get(const char* key, float* value, float defaultValue = false) const;
|
||||
bool Get(const char* key, double* value, double defaultValue = false) const;
|
||||
bool Get(const char* key, std::vector<std::string>& values) const;
|
||||
|
||||
bool operator < (const Section& other) const {
|
||||
return name_ < other.name_;
|
||||
|
||||
@@ -46,9 +46,8 @@ void DoSet(PointerWrap &p, std::set<T> &x) {
|
||||
Do(p, *itr++);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
ERROR_LOG(SAVESTATE, "Savestate error: invalid mode %d.", p.mode);
|
||||
case PointerWrap::MODE_NOOP:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ PointerWrapSection PointerWrap::Section(const char *title, int minVer, int ver)
|
||||
return PointerWrapSection(*this, -1, title);
|
||||
}
|
||||
if (!checkpoints_[curCheckpoint_].Matches(marker, offset)) {
|
||||
WARN_LOG(SAVESTATE, "Checkpoint mismatch during write! Section %s but expected %s, offset %d but expected %d", title, marker, offset, (int)checkpoints_[curCheckpoint_].offset);
|
||||
WARN_LOG(SAVESTATE, "Checkpoint mismatch during write! Section %s but expected %s, offset %d but expected %d", title, marker, (int)offset, (int)checkpoints_[curCheckpoint_].offset);
|
||||
if (curCheckpoint_ > 1) {
|
||||
WARN_LOG(SAVESTATE, "Previous checkpoint: %s (%d)", checkpoints_[curCheckpoint_ - 1].title, (int)checkpoints_[curCheckpoint_ - 1].offset);
|
||||
}
|
||||
@@ -171,6 +171,7 @@ void Do(PointerWrap &p, std::string &x) {
|
||||
case PointerWrap::MODE_READ: x = (char*)*p.ptr; break;
|
||||
case PointerWrap::MODE_WRITE: memcpy(*p.ptr, x.c_str(), stringLen); break;
|
||||
case PointerWrap::MODE_MEASURE: break;
|
||||
case PointerWrap::MODE_NOOP: break;
|
||||
case PointerWrap::MODE_VERIFY: _dbg_assert_msg_(!strcmp(x.c_str(), (char*)*p.ptr), "Savestate verification failure: \"%s\" != \"%s\" (at %p).\n", x.c_str(), (char *)*p.ptr, p.ptr); break;
|
||||
}
|
||||
(*p.ptr) += stringLen;
|
||||
@@ -198,6 +199,7 @@ void Do(PointerWrap &p, std::wstring &x) {
|
||||
case PointerWrap::MODE_READ: x = read(); break;
|
||||
case PointerWrap::MODE_WRITE: memcpy(*p.ptr, x.c_str(), stringLen); break;
|
||||
case PointerWrap::MODE_MEASURE: break;
|
||||
case PointerWrap::MODE_NOOP: break;
|
||||
case PointerWrap::MODE_VERIFY: _dbg_assert_msg_(x == read(), "Savestate verification failure: \"%ls\" != \"%ls\" (at %p).\n", x.c_str(), read().c_str(), p.ptr); break;
|
||||
}
|
||||
(*p.ptr) += stringLen;
|
||||
@@ -225,6 +227,7 @@ void Do(PointerWrap &p, std::u16string &x) {
|
||||
case PointerWrap::MODE_READ: x = read(); break;
|
||||
case PointerWrap::MODE_WRITE: memcpy(*p.ptr, x.c_str(), stringLen); break;
|
||||
case PointerWrap::MODE_MEASURE: break;
|
||||
case PointerWrap::MODE_NOOP: break;
|
||||
case PointerWrap::MODE_VERIFY: _dbg_assert_msg_(x == read(), "Savestate verification failure: (at %p).\n", p.ptr); break;
|
||||
}
|
||||
(*p.ptr) += stringLen;
|
||||
|
||||
+43
-8
@@ -312,10 +312,6 @@ void PopupScreen::TriggerFinish(DialogResult result) {
|
||||
}
|
||||
}
|
||||
|
||||
void PopupScreen::resized() {
|
||||
RecreateViews();
|
||||
}
|
||||
|
||||
void PopupScreen::CreateViews() {
|
||||
using namespace UI;
|
||||
UIContext &dc = *screenManager()->getUIContext();
|
||||
@@ -336,7 +332,9 @@ void PopupScreen::CreateViews() {
|
||||
box_->SetDropShadowExpand(std::max(dp_xres, dp_yres));
|
||||
|
||||
View *title = new PopupHeader(title_);
|
||||
box_->Add(title);
|
||||
if (HasTitleBar()) {
|
||||
box_->Add(title);
|
||||
}
|
||||
|
||||
CreatePopupContents(box_);
|
||||
root_->SetDefaultFocusView(box_);
|
||||
@@ -403,6 +401,39 @@ UI::EventReturn ListPopupScreen::OnListChoice(UI::EventParams &e) {
|
||||
|
||||
namespace UI {
|
||||
|
||||
PopupContextMenuScreen::PopupContextMenuScreen(const ContextMenuItem *items, size_t itemCount, I18NCategory *category, UI::View *sourceView)
|
||||
: PopupScreen("", "", ""), items_(items), itemCount_(itemCount), category_(category), sourceView_(sourceView)
|
||||
{
|
||||
enabled_.resize(itemCount, true);
|
||||
SetPopupOrigin(sourceView);
|
||||
}
|
||||
|
||||
void PopupContextMenuScreen::CreatePopupContents(UI::ViewGroup *parent) {
|
||||
for (size_t i = 0; i < itemCount_; i++) {
|
||||
if (items_[i].imageID) {
|
||||
Choice *choice = new Choice(category_->T(items_[i].text), ImageID(items_[i].imageID));
|
||||
parent->Add(choice);
|
||||
if (enabled_[i]) {
|
||||
choice->OnClick.Add([=](EventParams &p) {
|
||||
TriggerFinish(DR_OK);
|
||||
p.a = (uint32_t)i;
|
||||
OnChoice.Dispatch(p);
|
||||
return EVENT_DONE;
|
||||
});
|
||||
}
|
||||
else {
|
||||
choice->SetEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Hacky: Override the position to look like a popup menu.
|
||||
AnchorLayoutParams *ap = (AnchorLayoutParams *)parent->GetLayoutParams();
|
||||
ap->center = false;
|
||||
ap->left = sourceView_->GetBounds().x;
|
||||
ap->top = sourceView_->GetBounds().y2();
|
||||
}
|
||||
|
||||
std::string ChopTitle(const std::string &title) {
|
||||
size_t pos = title.find('\n');
|
||||
if (pos != title.npos) {
|
||||
@@ -814,7 +845,7 @@ void AbstractChoiceWithValueDisplay::GetContentDimensionsBySpec(const UIContext
|
||||
const std::string valueText = ValueText();
|
||||
int paddingX = 12;
|
||||
// Assume we want at least 20% of the size for the label, at a minimum.
|
||||
float availWidth = (horiz.size - paddingX * 2) * 0.8f;
|
||||
float availWidth = (horiz.size - paddingX * 2) * (text_.empty() ? 1.0f : 0.8f);
|
||||
if (availWidth < 0) {
|
||||
availWidth = 65535.0f;
|
||||
}
|
||||
@@ -826,11 +857,15 @@ void AbstractChoiceWithValueDisplay::GetContentDimensionsBySpec(const UIContext
|
||||
valueW += paddingX;
|
||||
|
||||
// Give the choice itself less space to grow in, so it shrinks if needed.
|
||||
MeasureSpec horizLabel = horiz;
|
||||
horizLabel.size -= valueW;
|
||||
// MeasureSpec horizLabel = horiz;
|
||||
// horizLabel.size -= valueW;
|
||||
Choice::GetContentDimensionsBySpec(dc, horiz, vert, w, h);
|
||||
|
||||
w += valueW;
|
||||
// Fill out anyway if there's space.
|
||||
if (horiz.type == AT_MOST && w < horiz.size) {
|
||||
w = horiz.size;
|
||||
}
|
||||
h = std::max(h, valueH);
|
||||
}
|
||||
|
||||
|
||||
+36
-4
@@ -76,7 +76,6 @@ public:
|
||||
virtual bool isTransparent() const override { return true; }
|
||||
virtual bool touch(const TouchInput &touch) override;
|
||||
virtual bool key(const KeyInput &key) override;
|
||||
virtual void resized() override;
|
||||
|
||||
virtual void TriggerFinish(DialogResult result) override;
|
||||
|
||||
@@ -91,6 +90,7 @@ protected:
|
||||
virtual bool ShowButtons() const { return true; }
|
||||
virtual bool CanComplete(DialogResult result) { return true; }
|
||||
virtual void OnCompleted(DialogResult result) {}
|
||||
virtual bool HasTitleBar() const { return true; }
|
||||
const std::string &Title() { return title_; }
|
||||
|
||||
virtual void update() override;
|
||||
@@ -250,7 +250,7 @@ public:
|
||||
Event OnChange;
|
||||
|
||||
private:
|
||||
virtual void OnCompleted(DialogResult result) override;
|
||||
void OnCompleted(DialogResult result) override;
|
||||
TextEdit *edit_;
|
||||
std::string *value_;
|
||||
std::string textEditValue_;
|
||||
@@ -258,13 +258,45 @@ private:
|
||||
int maxLen_;
|
||||
};
|
||||
|
||||
// TODO: Break out a lot of popup stuff from UIScreen.h.
|
||||
|
||||
struct ContextMenuItem {
|
||||
const char *text;
|
||||
const char *imageID;
|
||||
};
|
||||
|
||||
// Once a selection has been made,
|
||||
class PopupContextMenuScreen : public PopupScreen {
|
||||
public:
|
||||
PopupContextMenuScreen(const ContextMenuItem *items, size_t itemCount, I18NCategory *category, UI::View *sourceView);
|
||||
void CreatePopupContents(ViewGroup *parent) override;
|
||||
|
||||
const char *tag() const override { return "ContextMenuPopup"; }
|
||||
|
||||
void SetEnabled(size_t index, bool enabled) {
|
||||
enabled_[index] = enabled;
|
||||
}
|
||||
|
||||
UI::Event OnChoice;
|
||||
|
||||
protected:
|
||||
bool HasTitleBar() const { return false; }
|
||||
|
||||
private:
|
||||
const ContextMenuItem *items_;
|
||||
size_t itemCount_;
|
||||
I18NCategory *category_;
|
||||
UI::View *sourceView_;
|
||||
std::vector<bool> enabled_;
|
||||
};
|
||||
|
||||
class AbstractChoiceWithValueDisplay : public UI::Choice {
|
||||
public:
|
||||
AbstractChoiceWithValueDisplay(const std::string &text, LayoutParams *layoutParams = nullptr)
|
||||
: Choice(text, layoutParams) {
|
||||
}
|
||||
|
||||
virtual void Draw(UIContext &dc) override;
|
||||
void Draw(UIContext &dc) override;
|
||||
void GetContentDimensionsBySpec(const UIContext &dc, MeasureSpec horiz, MeasureSpec vert, float &w, float &h) const override;
|
||||
|
||||
protected:
|
||||
@@ -463,8 +495,8 @@ public:
|
||||
private:
|
||||
std::string ValueText() const override;
|
||||
|
||||
int *iValue_ = nullptr;
|
||||
std::string *sValue_ = nullptr;
|
||||
int *iValue_ = nullptr;
|
||||
const char *category_ = nullptr;
|
||||
std::string (*translateCallback_)(const char *value) = nullptr;
|
||||
};
|
||||
|
||||
+65
-17
@@ -16,6 +16,7 @@
|
||||
#include "Common/System/System.h"
|
||||
#include "Common/TimeUtil.h"
|
||||
#include "Common/StringUtils.h"
|
||||
#include "Common/Log.h"
|
||||
|
||||
namespace UI {
|
||||
|
||||
@@ -24,7 +25,6 @@ static constexpr float MIN_TEXT_SCALE = 0.8f;
|
||||
static constexpr float MAX_ITEM_SIZE = 65535.0f;
|
||||
|
||||
void MeasureBySpec(Size sz, float contentWidth, MeasureSpec spec, float *measured) {
|
||||
*measured = sz;
|
||||
if (sz == WRAP_CONTENT) {
|
||||
if (spec.type == UNSPECIFIED)
|
||||
*measured = contentWidth;
|
||||
@@ -40,6 +40,8 @@ void MeasureBySpec(Size sz, float contentWidth, MeasureSpec spec, float *measure
|
||||
*measured = spec.size;
|
||||
} else if (spec.type == EXACTLY || (spec.type == AT_MOST && *measured > spec.size)) {
|
||||
*measured = spec.size;
|
||||
} else {
|
||||
*measured = sz;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -413,6 +415,7 @@ void ClickableItem::GetContentDimensions(const UIContext &dc, float &w, float &h
|
||||
|
||||
ClickableItem::ClickableItem(LayoutParams *layoutParams) : Clickable(layoutParams) {
|
||||
if (!layoutParams) {
|
||||
// The default LayoutParams assigned by View::View defaults to WRAP_CONTENT/WRAP_CONTENT.
|
||||
if (layoutParams_->width == WRAP_CONTENT)
|
||||
layoutParams_->width = FILL_PARENT;
|
||||
}
|
||||
@@ -497,6 +500,7 @@ void Choice::Draw(UIContext &dc) {
|
||||
|
||||
if (image_.isValid()) {
|
||||
const AtlasImage *image = dc.Draw()->GetAtlas()->getImage(image_);
|
||||
_dbg_assert_(image);
|
||||
paddingX += image->w + 6;
|
||||
availWidth -= image->w + 6;
|
||||
// TODO: Use scale rotation and flip here as well (DrawImageRotated is always ALIGN_CENTER for now)
|
||||
@@ -696,28 +700,55 @@ void CheckBox::Draw(UIContext &dc) {
|
||||
if (!IsEnabled()) {
|
||||
style = dc.theme->itemDisabledStyle;
|
||||
}
|
||||
if (HasFocus()) {
|
||||
style = dc.theme->itemFocusedStyle;
|
||||
}
|
||||
if (down_) {
|
||||
style = dc.theme->itemDownStyle;
|
||||
ImageID image = Toggled() ? dc.theme->checkOn : dc.theme->checkOff;
|
||||
|
||||
// In image mode, light up instead of showing a checkbox.
|
||||
if (imageID_.isValid()) {
|
||||
image = imageID_;
|
||||
if (Toggled()) {
|
||||
if (HasFocus()) {
|
||||
style = dc.theme->itemDownStyle;
|
||||
} else {
|
||||
style = dc.theme->itemFocusedStyle;
|
||||
}
|
||||
} else {
|
||||
if (HasFocus()) {
|
||||
style = dc.theme->itemDownStyle;
|
||||
} else {
|
||||
style = dc.theme->itemStyle;
|
||||
}
|
||||
}
|
||||
|
||||
if (down_) {
|
||||
style.background.color = lightenColor(style.background.color);
|
||||
}
|
||||
|
||||
} else {
|
||||
if (HasFocus()) {
|
||||
style = dc.theme->itemFocusedStyle;
|
||||
}
|
||||
if (down_) {
|
||||
style = dc.theme->itemDownStyle;
|
||||
}
|
||||
}
|
||||
|
||||
dc.SetFontStyle(dc.theme->uiFont);
|
||||
|
||||
ClickableItem::Draw(dc);
|
||||
DrawBG(dc, style);
|
||||
|
||||
ImageID image = Toggled() ? dc.theme->checkOn : dc.theme->checkOff;
|
||||
float imageW, imageH;
|
||||
dc.Draw()->MeasureImage(image, &imageW, &imageH);
|
||||
|
||||
const int paddingX = 12;
|
||||
// Padding right of the checkbox image too.
|
||||
const float availWidth = bounds_.w - paddingX * 2 - imageW - paddingX;
|
||||
float scale = CalculateTextScale(dc, availWidth);
|
||||
|
||||
dc.SetFontScale(scale, scale);
|
||||
Bounds textBounds(bounds_.x + paddingX, bounds_.y, availWidth, bounds_.h);
|
||||
dc.DrawTextRect(text_.c_str(), textBounds, style.fgColor, ALIGN_VCENTER | FLAG_WRAP_TEXT);
|
||||
if (!text_.empty()) {
|
||||
float scale = CalculateTextScale(dc, availWidth);
|
||||
dc.SetFontScale(scale, scale);
|
||||
Bounds textBounds(bounds_.x + paddingX, bounds_.y, availWidth, bounds_.h);
|
||||
dc.DrawTextRect(text_.c_str(), textBounds, style.fgColor, ALIGN_VCENTER | FLAG_WRAP_TEXT);
|
||||
}
|
||||
dc.Draw()->DrawImage(image, bounds_.x2() - paddingX, bounds_.centerY(), 1.0f, style.fgColor, ALIGN_RIGHT | ALIGN_VCENTER);
|
||||
dc.SetFontScale(1.0f, 1.0f);
|
||||
}
|
||||
@@ -743,24 +774,41 @@ float CheckBox::CalculateTextScale(const UIContext &dc, float availWidth) const
|
||||
|
||||
void CheckBox::GetContentDimensions(const UIContext &dc, float &w, float &h) const {
|
||||
ImageID image = Toggled() ? dc.theme->checkOn : dc.theme->checkOff;
|
||||
if (imageID_.isValid()) {
|
||||
image = imageID_;
|
||||
}
|
||||
|
||||
float imageW, imageH;
|
||||
dc.Draw()->MeasureImage(image, &imageW, &imageH);
|
||||
|
||||
const int paddingX = 12;
|
||||
|
||||
if (imageID_.isValid()) {
|
||||
w = imageW + paddingX * 2;
|
||||
h = std::max(imageH, ITEM_HEIGHT);
|
||||
return;
|
||||
}
|
||||
|
||||
// The below code is kinda wacky, we shouldn't involve bounds_ here.
|
||||
|
||||
// Padding right of the checkbox image too.
|
||||
float availWidth = bounds_.w - paddingX * 2 - imageW - paddingX;
|
||||
if (availWidth < 0.0f) {
|
||||
// Let it have as much space as it needs.
|
||||
availWidth = MAX_ITEM_SIZE;
|
||||
}
|
||||
float scale = CalculateTextScale(dc, availWidth);
|
||||
|
||||
float actualWidth, actualHeight;
|
||||
Bounds availBounds(0, 0, availWidth, bounds_.h);
|
||||
dc.MeasureTextRect(dc.theme->uiFont, scale, scale, text_.c_str(), (int)text_.size(), availBounds, &actualWidth, &actualHeight, ALIGN_VCENTER | FLAG_WRAP_TEXT);
|
||||
if (!text_.empty()) {
|
||||
float scale = CalculateTextScale(dc, availWidth);
|
||||
|
||||
float actualWidth, actualHeight;
|
||||
Bounds availBounds(0, 0, availWidth, bounds_.h);
|
||||
dc.MeasureTextRect(dc.theme->uiFont, scale, scale, text_.c_str(), (int)text_.size(), availBounds, &actualWidth, &actualHeight, ALIGN_VCENTER | FLAG_WRAP_TEXT);
|
||||
h = std::max(actualHeight, ITEM_HEIGHT);
|
||||
} else {
|
||||
h = std::max(imageH, ITEM_HEIGHT);
|
||||
}
|
||||
w = bounds_.w;
|
||||
h = std::max(actualHeight, ITEM_HEIGHT);
|
||||
}
|
||||
|
||||
void BitCheckBox::Toggle() {
|
||||
|
||||
+8
-1
@@ -827,11 +827,17 @@ private:
|
||||
|
||||
class CheckBox : public ClickableItem {
|
||||
public:
|
||||
CheckBox(bool *toggle, const std::string &text, const std::string &smallText = "", LayoutParams *layoutParams = 0)
|
||||
CheckBox(bool *toggle, const std::string &text, const std::string &smallText = "", LayoutParams *layoutParams = nullptr)
|
||||
: ClickableItem(layoutParams), toggle_(toggle), text_(text), smallText_(smallText) {
|
||||
OnClick.Handle(this, &CheckBox::OnClicked);
|
||||
}
|
||||
|
||||
// Image-only "checkbox", lights up instead of showing a checkmark.
|
||||
CheckBox(bool *toggle, ImageID imageID, LayoutParams *layoutParams = nullptr)
|
||||
: ClickableItem(layoutParams), toggle_(toggle), imageID_(imageID) {
|
||||
OnClick.Handle(this, &CheckBox::OnClicked);
|
||||
}
|
||||
|
||||
void Draw(UIContext &dc) override;
|
||||
std::string DescribeText() const override;
|
||||
void GetContentDimensions(const UIContext &dc, float &w, float &h) const override;
|
||||
@@ -846,6 +852,7 @@ private:
|
||||
bool *toggle_;
|
||||
std::string text_;
|
||||
std::string smallText_;
|
||||
ImageID imageID_;
|
||||
};
|
||||
|
||||
class BitCheckBox : public CheckBox {
|
||||
|
||||
+18
-5
@@ -100,7 +100,11 @@ bool ViewGroup::Touch(const TouchInput &input) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return any;
|
||||
if (clickableBackground_) {
|
||||
return any || bounds_.Contains(input.x, input.y);
|
||||
} else {
|
||||
return any;
|
||||
}
|
||||
}
|
||||
|
||||
void ViewGroup::Query(float x, float y, std::vector<View *> &list) {
|
||||
@@ -510,8 +514,9 @@ void LinearLayout::Measure(const UIContext &dc, MeasureSpec horiz, MeasureSpec v
|
||||
float sum = 0.0f;
|
||||
float maxOther = 0.0f;
|
||||
float totalWeight = 0.0f;
|
||||
float weightSum = 0.0f;
|
||||
float weightZeroSum = 0.0f;
|
||||
|
||||
float weightSum = 0.0f; // Total sum of weights
|
||||
float weightZeroSum = 0.0f; // Sum of sizes of things with weight 0.0, a bit confusingly named
|
||||
|
||||
int numVisible = 0;
|
||||
|
||||
@@ -589,8 +594,11 @@ void LinearLayout::Measure(const UIContext &dc, MeasureSpec horiz, MeasureSpec v
|
||||
for (View *view : views_) {
|
||||
if (view->GetVisibility() == V_GONE)
|
||||
continue;
|
||||
const LinearLayoutParams *linLayoutParams = view->GetLayoutParams()->As<LinearLayoutParams>();
|
||||
// FILL_PARENT is not appropriate in this direction. It gets ignored though.
|
||||
// We have a bit too many of these due to the hack in the ClickableItem constructor.
|
||||
// _dbg_assert_(view->GetLayoutParams()->width != UI::FILL_PARENT);
|
||||
|
||||
const LinearLayoutParams *linLayoutParams = view->GetLayoutParams()->As<LinearLayoutParams>();
|
||||
if (linLayoutParams && linLayoutParams->weight > 0.0f) {
|
||||
Margins margins = defaultMargins_;
|
||||
if (linLayoutParams->HasMargins())
|
||||
@@ -634,8 +642,11 @@ void LinearLayout::Measure(const UIContext &dc, MeasureSpec horiz, MeasureSpec v
|
||||
for (View *view : views_) {
|
||||
if (view->GetVisibility() == V_GONE)
|
||||
continue;
|
||||
const LinearLayoutParams *linLayoutParams = view->GetLayoutParams()->As<LinearLayoutParams>();
|
||||
// FILL_PARENT is not appropriate in this direction. It gets ignored though.
|
||||
// We have a bit too many of these due to the hack in the ClickableItem constructor.
|
||||
// _dbg_assert_(view->GetLayoutParams()->height != UI::FILL_PARENT);
|
||||
|
||||
const LinearLayoutParams *linLayoutParams = view->GetLayoutParams()->As<LinearLayoutParams>();
|
||||
if (linLayoutParams && linLayoutParams->weight > 0.0f) {
|
||||
Margins margins = defaultMargins_;
|
||||
if (linLayoutParams->HasMargins())
|
||||
@@ -645,6 +656,7 @@ void LinearLayout::Measure(const UIContext &dc, MeasureSpec horiz, MeasureSpec v
|
||||
h = MeasureSpec(AT_MOST, measuredWidth_);
|
||||
float unit = (allowedHeight - weightZeroSum) / weightSum;
|
||||
if (weightSum == 0.0f) {
|
||||
// We must have gotten an inf.
|
||||
unit = 1.0f;
|
||||
}
|
||||
MeasureSpec v(AT_MOST, unit * linLayoutParams->weight - margins.vert());
|
||||
@@ -1589,6 +1601,7 @@ StickyChoice *ChoiceStrip::Choice(int index) {
|
||||
return static_cast<StickyChoice *>(views_[index]);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
ListView::ListView(ListAdaptor *a, std::set<int> hidden, LayoutParams *layoutParams)
|
||||
: ScrollView(ORIENT_VERTICAL, layoutParams), adaptor_(a), maxHeight_(0), hidden_(hidden) {
|
||||
|
||||
|
||||
@@ -78,6 +78,7 @@ public:
|
||||
void SetHasDropShadow(bool has) { hasDropShadow_ = has; }
|
||||
void SetDropShadowExpand(float s) { dropShadowExpand_ = s; }
|
||||
void SetExclusiveTouch(bool exclusive) { exclusiveTouch_ = exclusive; }
|
||||
void SetClickableBackground(bool clickableBackground) { clickableBackground_ = clickableBackground; }
|
||||
|
||||
void Lock() { modifyLock_.lock(); }
|
||||
void Unlock() { modifyLock_.unlock(); }
|
||||
@@ -96,6 +97,7 @@ protected:
|
||||
Drawable bg_;
|
||||
float dropShadowExpand_ = 0.0f;
|
||||
bool hasDropShadow_ = false;
|
||||
bool clickableBackground_ = false;
|
||||
bool clip_ = false;
|
||||
bool exclusiveTouch_ = false;
|
||||
};
|
||||
|
||||
@@ -141,7 +141,7 @@ void InitVROnAndroid(void* vm, void* activity, const char* system, int version,
|
||||
//Set platform flags
|
||||
if (strcmp(vendor, "PICO") == 0) {
|
||||
VR_SetPlatformFLag(VR_PLATFORM_CONTROLLER_PICO, true);
|
||||
VR_SetPlatformFLag(VR_PLATFORM_PICO_INIT, true);
|
||||
VR_SetPlatformFLag(VR_PLATFORM_INSTANCE_EXT, true);
|
||||
} else if ((strcmp(vendor, "META") == 0) || (strcmp(vendor, "OCULUS") == 0)) {
|
||||
VR_SetPlatformFLag(VR_PLATFORM_CONTROLLER_QUEST, true);
|
||||
VR_SetPlatformFLag(VR_PLATFORM_PERFORMANCE_EXT, true);
|
||||
|
||||
+4
-55
@@ -9,34 +9,6 @@
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
enum ConfigsSetEXT {
|
||||
UNREAL_VERSION = 0,
|
||||
TRACKING_ORIGIN,
|
||||
OPENGL_NOERROR,
|
||||
ENABLE_SIX_DOF,
|
||||
PRESENTATION_FLAG,
|
||||
ENABLE_CPT,
|
||||
PLATFORM,
|
||||
FOVEATION_LEVEL,
|
||||
SET_DISPLAY_RATE = 8,
|
||||
MRC_TEXTURE_ID = 9,
|
||||
};
|
||||
|
||||
enum PxrTrackingDof {
|
||||
PXR_TRACKING_3DOF = 0,
|
||||
PXR_TRACKING_6DOF = 1
|
||||
};
|
||||
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrSetEngineVersionPico)(XrInstance instance,const char* version);
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrStartCVControllerThreadPico)(XrInstance instance,int headSensorState, int handSensorState);
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrStopCVControllerThreadPico)(XrInstance instance,int headSensorState, int handSensorState);
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrSetConfigPICO) (XrSession instance, enum ConfigsSetEXT configIndex, const char *configData);
|
||||
|
||||
PFN_xrSetConfigPICO pfnXrSetConfigPICO = nullptr;
|
||||
PFN_xrSetEngineVersionPico pfnXrSetEngineVersionPico = nullptr;
|
||||
PFN_xrStartCVControllerThreadPico pfnXrStartCVControllerThreadPico = nullptr;
|
||||
PFN_xrStopCVControllerThreadPico pfnXrStopCVControllerThreadPico = nullptr;
|
||||
|
||||
static bool vr_platform[VR_PLATFORM_MAX];
|
||||
static engine_t vr_engine;
|
||||
int vr_initialized = 0;
|
||||
@@ -76,18 +48,13 @@ void VR_Init( void* system, const char* name, int version ) {
|
||||
}
|
||||
extensions.push_back(XR_KHR_COMPOSITION_LAYER_CYLINDER_EXTENSION_NAME);
|
||||
#ifdef ANDROID
|
||||
if (VR_GetPlatformFlag(VR_PLATFORM_INSTANCE_EXT)) {
|
||||
extensions.push_back(XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME);
|
||||
}
|
||||
if (VR_GetPlatformFlag(VR_PLATFORM_PERFORMANCE_EXT)) {
|
||||
extensions.push_back(XR_EXT_PERFORMANCE_SETTINGS_EXTENSION_NAME);
|
||||
extensions.push_back(XR_KHR_ANDROID_THREAD_SETTINGS_EXTENSION_NAME);
|
||||
}
|
||||
if (VR_GetPlatformFlag(VR_PLATFORM_PICO_INIT)) {
|
||||
extensions.push_back(XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME);
|
||||
extensions.push_back("XR_PICO_android_controller_function_ext_enable");
|
||||
extensions.push_back("XR_PICO_view_state_ext_enable");
|
||||
extensions.push_back("XR_PICO_frame_end_info_ext");
|
||||
extensions.push_back("XR_PICO_configs_ext");
|
||||
extensions.push_back("XR_PICO_reset_sensor");
|
||||
}
|
||||
#endif
|
||||
|
||||
// Create the OpenXR instance.
|
||||
@@ -112,7 +79,7 @@ void VR_Init( void* system, const char* name, int version ) {
|
||||
|
||||
#ifdef ANDROID
|
||||
XrInstanceCreateInfoAndroidKHR instanceCreateInfoAndroid = {XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR};
|
||||
if (VR_GetPlatformFlag(VR_PLATFORM_PICO_INIT)) {
|
||||
if (VR_GetPlatformFlag(VR_PLATFORM_INSTANCE_EXT)) {
|
||||
ovrJava* java = (ovrJava*)system;
|
||||
instanceCreateInfoAndroid.applicationVM = java->Vm;
|
||||
instanceCreateInfoAndroid.applicationActivity = java->ActivityObject;
|
||||
@@ -129,15 +96,6 @@ void VR_Init( void* system, const char* name, int version ) {
|
||||
|
||||
XRLoadInstanceFunctions(vr_engine.appState.Instance);
|
||||
|
||||
if (VR_GetPlatformFlag(VR_PLATFORM_PICO_INIT)) {
|
||||
xrGetInstanceProcAddr(vr_engine.appState.Instance, "xrSetEngineVersionPico", (PFN_xrVoidFunction*)(&pfnXrSetEngineVersionPico));
|
||||
xrGetInstanceProcAddr(vr_engine.appState.Instance, "xrStartCVControllerThreadPico", (PFN_xrVoidFunction*)(&pfnXrStartCVControllerThreadPico));
|
||||
xrGetInstanceProcAddr(vr_engine.appState.Instance, "xrStopCVControllerThreadPico", (PFN_xrVoidFunction*)(&pfnXrStopCVControllerThreadPico));
|
||||
xrGetInstanceProcAddr(vr_engine.appState.Instance,"xrSetConfigPICO", (PFN_xrVoidFunction*)(&pfnXrSetConfigPICO));
|
||||
if (pfnXrSetEngineVersionPico != nullptr) pfnXrSetEngineVersionPico(vr_engine.appState.Instance, "2.8.0.1");
|
||||
if (pfnXrStartCVControllerThreadPico != nullptr) pfnXrStartCVControllerThreadPico(vr_engine.appState.Instance, PXR_TRACKING_6DOF, PXR_TRACKING_6DOF);
|
||||
}
|
||||
|
||||
XrInstanceProperties instanceInfo;
|
||||
instanceInfo.type = XR_TYPE_INSTANCE_PROPERTIES;
|
||||
instanceInfo.next = NULL;
|
||||
@@ -196,12 +154,6 @@ void VR_Init( void* system, const char* name, int version ) {
|
||||
|
||||
void VR_Destroy( engine_t* engine ) {
|
||||
if (engine == &vr_engine) {
|
||||
if (VR_GetPlatformFlag(VR_PLATFORM_PICO_INIT)) {
|
||||
if (pfnXrStopCVControllerThreadPico != nullptr) {
|
||||
pfnXrStopCVControllerThreadPico(engine->appState.Instance, PXR_TRACKING_6DOF, PXR_TRACKING_6DOF);
|
||||
}
|
||||
}
|
||||
|
||||
xrDestroyInstance(engine->appState.Instance);
|
||||
ovrApp_Destroy(&engine->appState);
|
||||
}
|
||||
@@ -246,9 +198,6 @@ void VR_EnterVR( engine_t* engine, XrGraphicsBindingVulkanKHR* graphicsBindingVu
|
||||
ALOGE("Failed to create XR session: %d.", initResult);
|
||||
exit(1);
|
||||
}
|
||||
if (VR_GetPlatformFlag(VR_PLATFORM_PICO_INIT)) {
|
||||
pfnXrSetConfigPICO(engine->appState.Session, TRACKING_ORIGIN, "1");
|
||||
}
|
||||
|
||||
// Create a space to the first path
|
||||
XrReferenceSpaceCreateInfo spaceCreateInfo = {};
|
||||
|
||||
+1
-1
@@ -121,8 +121,8 @@ typedef struct {
|
||||
enum VRPlatformFlag {
|
||||
VR_PLATFORM_CONTROLLER_PICO,
|
||||
VR_PLATFORM_CONTROLLER_QUEST,
|
||||
VR_PLATFORM_INSTANCE_EXT,
|
||||
VR_PLATFORM_PERFORMANCE_EXT,
|
||||
VR_PLATFORM_PICO_INIT,
|
||||
VR_PLATFORM_RENDERER_VULKAN,
|
||||
VR_PLATFORM_TRACKING_FLOOR,
|
||||
VR_PLATFORM_MAX
|
||||
|
||||
+15
-10
@@ -1127,9 +1127,10 @@ static int DefaultSystemParamLanguage() {
|
||||
int defaultLang = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH;
|
||||
if (g_Config.bFirstRun) {
|
||||
// TODO: Be smart about same language, different country
|
||||
auto langValuesMapping = GetLangValuesMapping();
|
||||
if (langValuesMapping.find(g_Config.sLanguageIni) != langValuesMapping.end()) {
|
||||
defaultLang = langValuesMapping[g_Config.sLanguageIni].second;
|
||||
auto &langValuesMapping = g_Config.GetLangValuesMapping();
|
||||
auto iter = langValuesMapping.find(g_Config.sLanguageIni);
|
||||
if (iter != langValuesMapping.end()) {
|
||||
defaultLang = iter->second.second;
|
||||
}
|
||||
}
|
||||
return defaultLang;
|
||||
@@ -1276,14 +1277,12 @@ Config::~Config() {
|
||||
delete private_;
|
||||
}
|
||||
|
||||
std::map<std::string, std::pair<std::string, int>> GetLangValuesMapping() {
|
||||
std::map<std::string, std::pair<std::string, int>> langValuesMapping;
|
||||
void Config::LoadLangValuesMapping() {
|
||||
IniFile mapping;
|
||||
mapping.LoadFromVFS("langregion.ini");
|
||||
std::vector<std::string> keys;
|
||||
mapping.GetKeys("LangRegionNames", keys);
|
||||
|
||||
|
||||
std::map<std::string, int> langCodeMapping;
|
||||
langCodeMapping["JAPANESE"] = PSP_SYSTEMPARAM_LANGUAGE_JAPANESE;
|
||||
langCodeMapping["ENGLISH"] = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH;
|
||||
@@ -1298,8 +1297,8 @@ std::map<std::string, std::pair<std::string, int>> GetLangValuesMapping() {
|
||||
langCodeMapping["CHINESE_TRADITIONAL"] = PSP_SYSTEMPARAM_LANGUAGE_CHINESE_TRADITIONAL;
|
||||
langCodeMapping["CHINESE_SIMPLIFIED"] = PSP_SYSTEMPARAM_LANGUAGE_CHINESE_SIMPLIFIED;
|
||||
|
||||
Section *langRegionNames = mapping.GetOrCreateSection("LangRegionNames");
|
||||
Section *systemLanguage = mapping.GetOrCreateSection("SystemLanguage");
|
||||
const Section *langRegionNames = mapping.GetOrCreateSection("LangRegionNames");
|
||||
const Section *systemLanguage = mapping.GetOrCreateSection("SystemLanguage");
|
||||
|
||||
for (size_t i = 0; i < keys.size(); i++) {
|
||||
std::string langName;
|
||||
@@ -1309,9 +1308,15 @@ std::map<std::string, std::pair<std::string, int>> GetLangValuesMapping() {
|
||||
int iLangCode = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH;
|
||||
if (langCodeMapping.find(langCode) != langCodeMapping.end())
|
||||
iLangCode = langCodeMapping[langCode];
|
||||
langValuesMapping[keys[i]] = std::make_pair(langName, iLangCode);
|
||||
langValuesMapping_[keys[i]] = std::make_pair(langName, iLangCode);
|
||||
}
|
||||
return langValuesMapping;
|
||||
}
|
||||
|
||||
const std::map<std::string, std::pair<std::string, int>> &Config::GetLangValuesMapping() {
|
||||
if (langValuesMapping_.empty()) {
|
||||
LoadLangValuesMapping();
|
||||
}
|
||||
return langValuesMapping_;
|
||||
}
|
||||
|
||||
void Config::Reload() {
|
||||
|
||||
+4
-1
@@ -568,21 +568,24 @@ public:
|
||||
bool HasRecentIsos() const;
|
||||
void ClearRecentIsos();
|
||||
|
||||
const std::map<std::string, std::pair<std::string, int>> &GetLangValuesMapping();
|
||||
|
||||
protected:
|
||||
void LoadStandardControllerIni();
|
||||
void LoadLangValuesMapping();
|
||||
|
||||
private:
|
||||
bool reload_ = false;
|
||||
std::string gameId_;
|
||||
std::string gameIdTitle_;
|
||||
std::vector<std::string> recentIsos;
|
||||
std::map<std::string, std::pair<std::string, int>> langValuesMapping_;
|
||||
Path iniFilename_;
|
||||
Path controllerIniFilename_;
|
||||
Path searchPath_;
|
||||
ConfigPrivate *private_ = nullptr;
|
||||
};
|
||||
|
||||
std::map<std::string, std::pair<std::string, int>> GetLangValuesMapping();
|
||||
std::string CreateRandMAC();
|
||||
|
||||
// TODO: Find a better place for this.
|
||||
|
||||
@@ -346,7 +346,7 @@ int PSPOskDialog::Init(u32 oskPtr) {
|
||||
inputChars += c;
|
||||
}
|
||||
|
||||
languageMapping = GetLangValuesMapping();
|
||||
languageMapping = g_Config.GetLangValuesMapping();
|
||||
|
||||
// Eat any keys pressed before the dialog inited.
|
||||
UpdateButtons();
|
||||
|
||||
@@ -335,6 +335,8 @@ static void DoMemoryVoid(PointerWrap &p, uint32_t start, uint32_t size) {
|
||||
_dbg_assert_msg_(d[i] == storage[i], "Savestate verification failure: %d (0x%X) (at %p) != %d (0x%X) (at %p).\n", d[i], d[i], &d[i], storage[i], storage[i], &storage[i]);
|
||||
}, 0, size, 128);
|
||||
break;
|
||||
case PointerWrap::MODE_NOOP:
|
||||
break;
|
||||
}
|
||||
storage += size;
|
||||
}
|
||||
|
||||
@@ -19,11 +19,11 @@
|
||||
// Postprocessing shader manager
|
||||
// For FXAA, "Natural", bloom, B&W, cross processing and whatnot.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "Common/Data/Format/IniFile.h"
|
||||
|
||||
struct ShaderInfo {
|
||||
Path iniFile; // which ini file was this definition in? So we can write settings back later
|
||||
std::string section; // ini file section. This is saved.
|
||||
|
||||
@@ -173,11 +173,6 @@ u32 GPU_GLES::CheckGPUFeatures() const {
|
||||
if (gl_extensions.ARB_texture_float || gl_extensions.OES_texture_float)
|
||||
features |= GPU_USE_TEXTURE_FLOAT;
|
||||
|
||||
// The Phantasy Star hack :(
|
||||
if (PSP_CoreParameter().compat.flags().DepthRangeHack && (features & GPU_USE_ACCURATE_DEPTH) == 0) {
|
||||
features |= GPU_USE_DEPTH_RANGE_HACK;
|
||||
}
|
||||
|
||||
if (!draw_->GetShaderLanguageDesc().bitwiseOps) {
|
||||
features |= GPU_USE_FRAGMENT_TEST_CACHE;
|
||||
}
|
||||
|
||||
@@ -319,38 +319,6 @@ static inline void FlipProjMatrix(Matrix4x4 &in, bool useBufferedRendering) {
|
||||
in[8] = -in[8];
|
||||
in[12] = -in[12];
|
||||
}
|
||||
|
||||
// In Phantasy Star Portable 2, depth range sometimes goes negative and is clamped by glDepthRange to 0,
|
||||
// causing graphics clipping glitch (issue #1788). This hack modifies the projection matrix to work around it.
|
||||
if (gstate_c.Use(GPU_USE_DEPTH_RANGE_HACK)) {
|
||||
float zScale = gstate.getViewportZScale() / 65535.0f;
|
||||
float zCenter = gstate.getViewportZCenter() / 65535.0f;
|
||||
|
||||
// if far depth range < 0
|
||||
if (zCenter + zScale < 0.0f) {
|
||||
// if perspective projection
|
||||
if (in[11] < 0.0f) {
|
||||
float depthMax = gstate.getDepthRangeMax() / 65535.0f;
|
||||
float depthMin = gstate.getDepthRangeMin() / 65535.0f;
|
||||
|
||||
float a = in[10];
|
||||
float b = in[14];
|
||||
|
||||
float n = b / (a - 1.0f);
|
||||
float f = b / (a + 1.0f);
|
||||
|
||||
f = (n * f) / (n + ((zCenter + zScale) * (n - f) / (depthMax - depthMin)));
|
||||
|
||||
a = (n + f) / (n - f);
|
||||
b = (2.0f * n * f) / (n - f);
|
||||
|
||||
if (!my_isnan(a) && !my_isnan(b)) {
|
||||
in[10] = a;
|
||||
in[14] = b;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool GuessVRDrawingHUD(bool is2D, bool flatScreen) {
|
||||
|
||||
@@ -3537,6 +3537,11 @@ u32 GPUCommon::CheckGPUFeatures() const {
|
||||
features |= GPU_USE_CLEAR_RAM_HACK;
|
||||
}
|
||||
|
||||
// Even without depth clamp, force accurate depth on for some games that break without it.
|
||||
if (PSP_CoreParameter().compat.flags().DepthRangeHack) {
|
||||
features |= GPU_USE_ACCURATE_DEPTH;
|
||||
}
|
||||
|
||||
return features;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -265,7 +265,7 @@ protected:
|
||||
void DeviceLost() override;
|
||||
void DeviceRestore() override;
|
||||
|
||||
void ClearCacheNextFrame();
|
||||
void ClearCacheNextFrame() override;
|
||||
|
||||
virtual void CheckRenderResized();
|
||||
|
||||
|
||||
+3
-3
@@ -375,7 +375,7 @@ static const char *const gpuUseFlagNames[32] = {
|
||||
"GPU_USE_VS_RANGE_CULLING",
|
||||
"GPU_USE_BLEND_MINMAX",
|
||||
"GPU_USE_LOGIC_OP",
|
||||
"GPU_USE_DEPTH_RANGE_HACK",
|
||||
"N/A",
|
||||
"GPU_USE_TEXTURE_NPOT",
|
||||
"GPU_USE_ANISOTROPY",
|
||||
"GPU_USE_CLEAR_RAM_HACK",
|
||||
@@ -388,7 +388,7 @@ static const char *const gpuUseFlagNames[32] = {
|
||||
"GPU_USE_DEPTH_TEXTURE",
|
||||
"GPU_USE_ACCURATE_DEPTH",
|
||||
"GPU_USE_GS_CULLING",
|
||||
"GPU_USE_REVERSE_COLOR_ORDER",
|
||||
"N/A",
|
||||
"GPU_USE_FRAMEBUFFER_FETCH",
|
||||
"GPU_SCALE_DEPTH_FROM_24BIT_TO_16BIT",
|
||||
"GPU_ROUND_FRAGMENT_DEPTH_TO_16BIT",
|
||||
@@ -409,4 +409,4 @@ const char *GpuUseFlagToString(int useFlag) {
|
||||
} else {
|
||||
return "N/A";
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -478,7 +478,7 @@ enum {
|
||||
GPU_USE_VS_RANGE_CULLING = FLAG_BIT(3),
|
||||
GPU_USE_BLEND_MINMAX = FLAG_BIT(4),
|
||||
GPU_USE_LOGIC_OP = FLAG_BIT(5),
|
||||
GPU_USE_DEPTH_RANGE_HACK = FLAG_BIT(6),
|
||||
// Bit 6 is free.
|
||||
GPU_USE_TEXTURE_NPOT = FLAG_BIT(7),
|
||||
GPU_USE_ANISOTROPY = FLAG_BIT(8),
|
||||
GPU_USE_CLEAR_RAM_HACK = FLAG_BIT(9),
|
||||
|
||||
@@ -172,9 +172,7 @@ void BinManager::UpdateState() {
|
||||
creatingState_ = true;
|
||||
stateIndex_ = (uint16_t)states_.Push(RasterizerState());
|
||||
// When new funcs are compiled, we need to flush if WX exclusive.
|
||||
ComputeRasterizerState(&states_[stateIndex_], [&]() {
|
||||
Flush("compile");
|
||||
});
|
||||
ComputeRasterizerState(&states_[stateIndex_], this);
|
||||
states_[stateIndex_].samplerID.cached.clut = cluts_[clutIndex_].readable;
|
||||
creatingState_ = false;
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "Common/Data/Convert/ColorConv.h"
|
||||
#include "Core/Config.h"
|
||||
#include "GPU/GPUState.h"
|
||||
#include "GPU/Software/BinManager.h"
|
||||
#include "GPU/Software/DrawPixel.h"
|
||||
#include "GPU/Software/FuncId.h"
|
||||
#include "GPU/Software/Rasterizer.h"
|
||||
@@ -707,8 +708,8 @@ void SOFTRAST_CALL DrawSinglePixel(int x, int y, int z, int fog, Vec4IntArg colo
|
||||
SetPixelColor(fbFormat, pixelID.cached.framebufStride, x, y, new_color, old_color, targetWriteMask);
|
||||
}
|
||||
|
||||
SingleFunc GetSingleFunc(const PixelFuncID &id, std::function<void()> flushForCompile) {
|
||||
SingleFunc jitted = jitCache->GetSingle(id, flushForCompile);
|
||||
SingleFunc GetSingleFunc(const PixelFuncID &id, BinManager *binner) {
|
||||
SingleFunc jitted = jitCache->GetSingle(id, binner);
|
||||
if (jitted) {
|
||||
return jitted;
|
||||
}
|
||||
@@ -743,11 +744,15 @@ SingleFunc PixelJitCache::GenericSingle(const PixelFuncID &id) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
thread_local PixelJitCache::LastCache PixelJitCache::lastSingle_;
|
||||
|
||||
// 256k should be plenty of space for plenty of variations.
|
||||
PixelJitCache::PixelJitCache() : CodeBlock(1024 * 64 * 4), cache_(64) {
|
||||
lastSingle_.gen = -1;
|
||||
}
|
||||
|
||||
void PixelJitCache::Clear() {
|
||||
clearGen_++;
|
||||
CodeBlock::Clear();
|
||||
cache_.Clear();
|
||||
addresses_.clear();
|
||||
@@ -786,26 +791,29 @@ void PixelJitCache::Flush() {
|
||||
compileQueue_.clear();
|
||||
}
|
||||
|
||||
SingleFunc PixelJitCache::GetSingle(const PixelFuncID &id, std::function<void()> flushForCompile) {
|
||||
SingleFunc PixelJitCache::GetSingle(const PixelFuncID &id, BinManager *binner) {
|
||||
if (!g_Config.bSoftwareRenderingJit)
|
||||
return nullptr;
|
||||
|
||||
std::unique_lock<std::mutex> guard(jitCacheLock);
|
||||
const size_t key = std::hash<PixelFuncID>()(id);
|
||||
if (lastSingle_.Match(key, clearGen_))
|
||||
return lastSingle_.func;
|
||||
|
||||
std::unique_lock<std::mutex> guard(jitCacheLock);
|
||||
auto it = cache_.Get(key);
|
||||
if (it != nullptr) {
|
||||
lastSingle_.Set(key, it, clearGen_);
|
||||
return it;
|
||||
}
|
||||
|
||||
if (!flushForCompile) {
|
||||
if (!binner) {
|
||||
// Can't compile, let's try to do it later when there's an opportunity.
|
||||
compileQueue_.insert(id);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
guard.unlock();
|
||||
flushForCompile();
|
||||
binner->Flush("compile");
|
||||
guard.lock();
|
||||
|
||||
for (const auto &queued : compileQueue_) {
|
||||
@@ -820,7 +828,9 @@ SingleFunc PixelJitCache::GetSingle(const PixelFuncID &id, std::function<void()>
|
||||
if (!cache_.Get(key))
|
||||
Compile(id);
|
||||
|
||||
return cache_.Get(key);
|
||||
it = cache_.Get(key);
|
||||
lastSingle_.Set(key, it, clearGen_);
|
||||
return it;
|
||||
}
|
||||
|
||||
void PixelJitCache::Compile(const PixelFuncID &id) {
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
#include "ppsspp_config.h"
|
||||
|
||||
#include <functional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <unordered_map>
|
||||
@@ -29,6 +28,8 @@
|
||||
#include "GPU/Software/FuncId.h"
|
||||
#include "GPU/Software/RasterizerRegCache.h"
|
||||
|
||||
class BinManager;
|
||||
|
||||
namespace Rasterizer {
|
||||
|
||||
// Our std::unordered_map argument will ignore the alignment attribute, but that doesn't matter.
|
||||
@@ -39,7 +40,7 @@ namespace Rasterizer {
|
||||
#endif
|
||||
|
||||
typedef void (SOFTRAST_CALL *SingleFunc)(int x, int y, int z, int fog, Vec4IntArg color_in, const PixelFuncID &pixelID);
|
||||
SingleFunc GetSingleFunc(const PixelFuncID &id, std::function<void()> flushForCompile);
|
||||
SingleFunc GetSingleFunc(const PixelFuncID &id, BinManager *binner);
|
||||
|
||||
void Init();
|
||||
void FlushJit();
|
||||
@@ -64,7 +65,7 @@ public:
|
||||
PixelJitCache();
|
||||
|
||||
// Returns a pointer to the code to run.
|
||||
SingleFunc GetSingle(const PixelFuncID &id, std::function<void()> flushForCompile);
|
||||
SingleFunc GetSingle(const PixelFuncID &id, BinManager *binner);
|
||||
SingleFunc GenericSingle(const PixelFuncID &id);
|
||||
void Clear() override;
|
||||
void Flush();
|
||||
@@ -108,9 +109,27 @@ private:
|
||||
bool Jit_ConvertFrom5551(const PixelFuncID &id, RegCache::Reg colorReg, RegCache::Reg temp1Reg, RegCache::Reg temp2Reg, bool keepAlpha);
|
||||
bool Jit_ConvertFrom4444(const PixelFuncID &id, RegCache::Reg colorReg, RegCache::Reg temp1Reg, RegCache::Reg temp2Reg, bool keepAlpha);
|
||||
|
||||
struct LastCache {
|
||||
size_t key;
|
||||
SingleFunc func;
|
||||
int gen = -1;
|
||||
|
||||
bool Match(size_t k, int g) const {
|
||||
return key == k && gen == g;
|
||||
}
|
||||
|
||||
void Set(size_t k, SingleFunc f, int g) {
|
||||
key = k;
|
||||
func = f;
|
||||
gen = g;
|
||||
}
|
||||
};
|
||||
|
||||
DenseHashMap<size_t, SingleFunc, nullptr> cache_;
|
||||
std::unordered_map<PixelFuncID, const u8 *> addresses_;
|
||||
std::unordered_set<PixelFuncID> compileQueue_;
|
||||
int clearGen_ = 0;
|
||||
static thread_local LastCache lastSingle_;
|
||||
|
||||
const u8 *constBlendHalf_11_4s_ = nullptr;
|
||||
const u8 *constBlendInvert_11_4s_ = nullptr;
|
||||
|
||||
+76
-16
@@ -93,15 +93,15 @@ static inline Vec4<float> Interpolate(const float &c0, const float &c1, const fl
|
||||
return Interpolate(c0, c1, c2, w0.Cast<float>(), w1.Cast<float>(), w2.Cast<float>(), wsum_recip);
|
||||
}
|
||||
|
||||
void ComputeRasterizerState(RasterizerState *state, std::function<void()> flushForCompile) {
|
||||
void ComputeRasterizerState(RasterizerState *state, BinManager *binner) {
|
||||
ComputePixelFuncID(&state->pixelID);
|
||||
state->drawPixel = Rasterizer::GetSingleFunc(state->pixelID, flushForCompile);
|
||||
state->drawPixel = Rasterizer::GetSingleFunc(state->pixelID, binner);
|
||||
|
||||
state->enableTextures = gstate.isTextureMapEnabled() && !state->pixelID.clearMode;
|
||||
if (state->enableTextures) {
|
||||
ComputeSamplerID(&state->samplerID);
|
||||
state->linear = Sampler::GetLinearFunc(state->samplerID, flushForCompile);
|
||||
state->nearest = Sampler::GetNearestFunc(state->samplerID, flushForCompile);
|
||||
state->linear = Sampler::GetLinearFunc(state->samplerID, binner);
|
||||
state->nearest = Sampler::GetNearestFunc(state->samplerID, binner);
|
||||
|
||||
// Since the definitions are the same, just force this setting using the func pointer.
|
||||
if (g_Config.iTexFiltering == TEX_FILTER_FORCE_LINEAR) {
|
||||
@@ -224,24 +224,34 @@ static bool CheckClutAlphaFull(RasterizerState *state) {
|
||||
if (samplerID.hasClutMask)
|
||||
count = std::min(count, ((samplerID.cached.clutFormat >> 8) & 0xFF) + 1);
|
||||
|
||||
u32 alphaSum = 0xFFFFFFFF;
|
||||
if (samplerID.ClutFmt() == GE_CMODE_32BIT_ABGR8888) {
|
||||
CheckMask32((const uint32_t *)samplerID.cached.clut, count, &alphaSum);
|
||||
} else {
|
||||
CheckMask16((const uint16_t *)samplerID.cached.clut, count, &alphaSum);
|
||||
}
|
||||
|
||||
bool onlyFull = true;
|
||||
switch (samplerID.ClutFmt()) {
|
||||
case GE_CMODE_16BIT_BGR5650:
|
||||
break;
|
||||
|
||||
case GE_CMODE_16BIT_ABGR5551:
|
||||
onlyFull = CheckAlpha16((const uint16_t *)samplerID.cached.clut, count, 0x8000) == CHECKALPHA_FULL;
|
||||
onlyFull = (alphaSum & 0x8000) != 0;
|
||||
break;
|
||||
|
||||
case GE_CMODE_16BIT_ABGR4444:
|
||||
onlyFull = CheckAlpha16((const uint16_t *)samplerID.cached.clut, count, 0xF000) == CHECKALPHA_FULL;
|
||||
onlyFull = (alphaSum & 0xF000) == 0xF000;
|
||||
break;
|
||||
|
||||
case GE_CMODE_32BIT_ABGR8888:
|
||||
onlyFull = CheckAlpha32((const uint32_t *)samplerID.cached.clut, count, 0xFF000000) == CHECKALPHA_FULL;
|
||||
onlyFull = (alphaSum & 0xFF000000) == 0xFF000000;
|
||||
break;
|
||||
}
|
||||
|
||||
// Might just be different patterns, but if alphaSum != 0, it can't contain zero.
|
||||
if (alphaSum != 0)
|
||||
state->flags |= RasterizerStateFlags::CLUT_ALPHA_NON_ZERO;
|
||||
if (!onlyFull)
|
||||
state->flags |= RasterizerStateFlags::CLUT_ALPHA_NON_FULL;
|
||||
state->flags |= RasterizerStateFlags::CLUT_ALPHA_CHECKED;
|
||||
@@ -290,6 +300,37 @@ static RasterizerStateFlags DetectStateOptimizations(RasterizerState *state) {
|
||||
}
|
||||
}
|
||||
|
||||
if (alphaBlend && (needTextureAlpha || !alphaFull)) {
|
||||
// Okay, we're blending, and we need to. Are we alpha testing?
|
||||
GEComparison alphaTestFunc = pixelID.AlphaTestFunc();
|
||||
if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_NE)
|
||||
alphaTestFunc = GE_COMP_NOTEQUAL;
|
||||
if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT)
|
||||
alphaTestFunc = GE_COMP_GREATER;
|
||||
if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_ON)
|
||||
alphaTestFunc = GE_COMP_ALWAYS;
|
||||
|
||||
PixelBlendFactor src = pixelID.AlphaBlendSrc();
|
||||
PixelBlendFactor dst = pixelID.AlphaBlendDst();
|
||||
if (state->flags & RasterizerStateFlags::OPTIMIZED_BLEND_SRC)
|
||||
src = PixelBlendFactor::SRCALPHA;
|
||||
if (state->flags & RasterizerStateFlags::OPTIMIZED_BLEND_DST)
|
||||
dst = PixelBlendFactor::INVSRCALPHA;
|
||||
|
||||
if (alphaTestFunc == GE_COMP_ALWAYS && src == PixelBlendFactor::SRCALPHA && dst == PixelBlendFactor::INVSRCALPHA) {
|
||||
bool usesClut = (samplerID.texfmt & 4) != 0;
|
||||
bool couldHaveZeroTexAlpha = true;
|
||||
if (usesClut && CheckClutAlphaFull(state))
|
||||
couldHaveZeroTexAlpha = false;
|
||||
if (state->flags & RasterizerStateFlags::CLUT_ALPHA_NON_ZERO)
|
||||
couldHaveZeroTexAlpha = false;
|
||||
|
||||
// Blending is expensive, since we read the target. Force alpha testing on.
|
||||
if (!pixelID.depthWrite && !pixelID.stencilTest && couldHaveZeroTexAlpha)
|
||||
optimize |= RasterizerStateFlags::OPTIMIZED_ALPHATEST_ON;
|
||||
}
|
||||
}
|
||||
|
||||
bool applyFog = pixelID.applyFog || (state->flags & RasterizerStateFlags::OPTIMIZED_FOG_OFF);
|
||||
if (applyFog) {
|
||||
bool hasFog = state->flags & RasterizerStateFlags::VERTEX_HAS_FOG;
|
||||
@@ -319,10 +360,17 @@ static RasterizerStateFlags DetectStateOptimizations(RasterizerState *state) {
|
||||
// > 16, 8, or similar are also very common.
|
||||
if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT)
|
||||
alphaTestFunc = GE_COMP_GREATER;
|
||||
if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_ON)
|
||||
alphaTestFunc = GE_COMP_ALWAYS;
|
||||
|
||||
bool alphaTest = (alphaTestFunc == GE_COMP_NOTEQUAL || alphaTestFunc == GE_COMP_GREATER) && pixelID.alphaTestRef < 0xFF && !state->pixelID.hasAlphaTestMask;
|
||||
if (alphaTest && CheckClutAlphaFull(state))
|
||||
optimize |= alphaTestFunc == GE_COMP_NOTEQUAL ? RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_NE : RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT;
|
||||
if (alphaTest) {
|
||||
bool canSkipAlphaTest = CheckClutAlphaFull(state);
|
||||
if ((state->flags & RasterizerStateFlags::CLUT_ALPHA_NON_ZERO) && pixelID.alphaTestRef == 0)
|
||||
canSkipAlphaTest = true;
|
||||
if (canSkipAlphaTest)
|
||||
optimize |= alphaTestFunc == GE_COMP_NOTEQUAL ? RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_NE : RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -359,6 +407,13 @@ static bool ApplyStateOptimizations(RasterizerState *state, const RasterizerStat
|
||||
pixelID.alphaTestFunc = GE_COMP_NOTEQUAL;
|
||||
else if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT)
|
||||
pixelID.alphaTestFunc = GE_COMP_GREATER;
|
||||
else if (optimize & RasterizerStateFlags::OPTIMIZED_ALPHATEST_ON) {
|
||||
pixelID.alphaTestFunc = GE_COMP_NOTEQUAL;
|
||||
pixelID.alphaTestRef = 0;
|
||||
pixelID.hasAlphaTestMask = false;
|
||||
} else if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_ON) {
|
||||
pixelID.alphaTestFunc = GE_COMP_ALWAYS;
|
||||
}
|
||||
|
||||
SingleFunc drawPixel = Rasterizer::GetSingleFunc(pixelID, nullptr);
|
||||
// Can't compile during runtime. This failing is a bit of a problem when undoing...
|
||||
@@ -1116,7 +1171,7 @@ void DrawRectangle(const VertexData &v0, const VertexData &v1, const BinCoords &
|
||||
std::string ztag = StringFromFormat("DisplayListRZ_%08x", state.listPC);
|
||||
#endif
|
||||
|
||||
for (int64_t curY = minY; curY <= maxY; curY += SCREEN_SCALE_FACTOR * 2, rowST += sty) {
|
||||
for (int64_t curY = minY; curY < maxY; curY += SCREEN_SCALE_FACTOR * 2, rowST += sty) {
|
||||
DrawingCoords p = TransformUnit::ScreenToDrawing(minX, curY);
|
||||
|
||||
int scissorY2 = curY + SCREEN_SCALE_FACTOR > maxY ? -1 : 0;
|
||||
@@ -1124,7 +1179,7 @@ void DrawRectangle(const VertexData &v0, const VertexData &v1, const BinCoords &
|
||||
Vec4<int> scissor_step = Vec4<int>(0, -(SCREEN_SCALE_FACTOR * 2), 0, -(SCREEN_SCALE_FACTOR * 2));
|
||||
Vec2f st = rowST;
|
||||
|
||||
for (int64_t curX = minX; curX <= maxX; curX += SCREEN_SCALE_FACTOR * 2,
|
||||
for (int64_t curX = minX; curX < maxX; curX += SCREEN_SCALE_FACTOR * 2,
|
||||
st += stx,
|
||||
scissor_mask += scissor_step,
|
||||
p.x = (p.x + 2) & 0x3FF) {
|
||||
@@ -1292,7 +1347,8 @@ void ClearRectangle(const VertexData &v0, const VertexData &v1, const BinCoords
|
||||
minY += SCREEN_SCALE_FACTOR;
|
||||
|
||||
const DrawingCoords pprime = TransformUnit::ScreenToDrawing(minX, minY);
|
||||
const DrawingCoords pend = TransformUnit::ScreenToDrawing(maxX, maxY);
|
||||
// Only include the end pixel when it's >= 0.5.
|
||||
const DrawingCoords pend = TransformUnit::ScreenToDrawing(maxX - SCREEN_SCALE_FACTOR / 2, maxY - SCREEN_SCALE_FACTOR / 2);
|
||||
auto &pixelID = state.pixelID;
|
||||
auto &samplerID = state.samplerID;
|
||||
|
||||
@@ -1641,10 +1697,14 @@ bool GetCurrentTexture(GPUDebugBuffer &buffer, int level)
|
||||
ComputeSamplerID(&id);
|
||||
id.cached.clut = clut;
|
||||
|
||||
Sampler::FetchFunc sampler = Sampler::GetFetchFunc(id, [] {
|
||||
if (gpuDebug)
|
||||
gpuDebug->DispatchFlush();
|
||||
});
|
||||
// Slight annoyance, we may have to force a compile.
|
||||
Sampler::FetchFunc sampler = Sampler::GetFetchFunc(id, nullptr);
|
||||
if (!sampler) {
|
||||
Sampler::FlushJit();
|
||||
sampler = Sampler::GetFetchFunc(id, nullptr);
|
||||
if (!sampler)
|
||||
return false;
|
||||
}
|
||||
|
||||
u8 *texptr = Memory::GetPointerWrite(texaddr);
|
||||
u32 *row = (u32 *)buffer.GetData();
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
struct GPUDebugBuffer;
|
||||
struct BinCoords;
|
||||
class BinManager;
|
||||
|
||||
namespace Rasterizer {
|
||||
|
||||
@@ -42,6 +43,7 @@ enum class RasterizerStateFlags {
|
||||
|
||||
CLUT_ALPHA_CHECKED = 0x0010,
|
||||
CLUT_ALPHA_NON_FULL = 0x0020,
|
||||
CLUT_ALPHA_NON_ZERO = 0x0040,
|
||||
|
||||
VERTEX_FLAT_RESET = VERTEX_NON_FULL_WHITE | VERTEX_ALPHA_NON_FULL | VERTEX_ALPHA_NON_ZERO | VERTEX_HAS_FOG,
|
||||
|
||||
@@ -53,9 +55,10 @@ enum class RasterizerStateFlags {
|
||||
OPTIMIZED_FOG_OFF = 0x0020'0000,
|
||||
OPTIMIZED_ALPHATEST_OFF_NE = 0x0040'0000,
|
||||
OPTIMIZED_ALPHATEST_OFF_GT = 0x0080'0000,
|
||||
OPTIMIZED_ALPHATEST_ON = 0x0100'0000,
|
||||
|
||||
// Anything that changes the actual pixel or sampler func.
|
||||
OPTIMIZED_PIXELID = OPTIMIZED_BLEND_SRC | OPTIMIZED_BLEND_DST | OPTIMIZED_BLEND_OFF | OPTIMIZED_FOG_OFF | RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_NE | RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT,
|
||||
OPTIMIZED_PIXELID = OPTIMIZED_BLEND_SRC | OPTIMIZED_BLEND_DST | OPTIMIZED_BLEND_OFF | OPTIMIZED_FOG_OFF | OPTIMIZED_ALPHATEST_OFF_NE | OPTIMIZED_ALPHATEST_OFF_GT | OPTIMIZED_ALPHATEST_ON,
|
||||
OPTIMIZED_SAMPLERID = OPTIMIZED_TEXREPLACE,
|
||||
|
||||
INVALID = 0x7FFFFFFF,
|
||||
@@ -98,7 +101,7 @@ struct RasterizerState {
|
||||
}
|
||||
};
|
||||
|
||||
void ComputeRasterizerState(RasterizerState *state, std::function<void()> flushForCompile);
|
||||
void ComputeRasterizerState(RasterizerState *state, BinManager *binner);
|
||||
void CalculateRasterStateFlags(RasterizerState *state, const VertexData &v0);
|
||||
void CalculateRasterStateFlags(RasterizerState *state, const VertexData &v0, const VertexData &v1, bool forceFlat);
|
||||
void CalculateRasterStateFlags(RasterizerState *state, const VertexData &v0, const VertexData &v1, const VertexData &v2);
|
||||
|
||||
@@ -72,17 +72,59 @@ static uint32_t StandardAlphaBlend(uint32_t source, uint32_t dst) {
|
||||
}
|
||||
|
||||
// Through mode, with the specific Darkstalker settings.
|
||||
inline void DrawSinglePixel5551(u16 *pixel, const u32 color_in) {
|
||||
template <GEBufferFormat fmt, bool alphaBlend>
|
||||
static inline void DrawSinglePixel(u16 *pixel, const u32 color_in) {
|
||||
u32 new_color;
|
||||
// Because of this check, we only support src.a / 1-src.a blending.
|
||||
if ((color_in >> 24) == 255) {
|
||||
// We take advantage of short circuiting by checking the constant (template) value first.
|
||||
if (!alphaBlend || (color_in >> 24) == 255) {
|
||||
new_color = color_in & 0xFFFFFF;
|
||||
} else {
|
||||
const u32 old_color = RGBA5551ToRGBA8888(*pixel);
|
||||
u32 old_color;
|
||||
switch (fmt) {
|
||||
case GE_FORMAT_565:
|
||||
old_color = RGB565ToRGBA8888(*pixel);
|
||||
break;
|
||||
case GE_FORMAT_5551:
|
||||
old_color = RGBA5551ToRGBA8888(*pixel);
|
||||
break;
|
||||
case GE_FORMAT_4444:
|
||||
old_color = RGBA4444ToRGBA8888(*pixel);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
new_color = StandardAlphaBlend(color_in, old_color);
|
||||
}
|
||||
new_color |= (*pixel & 0x8000) ? 0xff000000 : 0x00000000;
|
||||
*pixel = RGBA8888ToRGBA5551(new_color);
|
||||
|
||||
switch (fmt) {
|
||||
case GE_FORMAT_565:
|
||||
*pixel = RGBA8888ToRGB565(new_color);
|
||||
break;
|
||||
case GE_FORMAT_5551:
|
||||
*pixel = RGBA8888ToRGBA555X(new_color) | (*pixel & 0x8000);
|
||||
break;
|
||||
case GE_FORMAT_4444:
|
||||
*pixel = RGBA8888ToRGBA444X(new_color) | (*pixel & 0xF000);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
template <bool alphaBlend>
|
||||
static inline void DrawSinglePixel32(u32 *pixel, const u32 color_in) {
|
||||
u32 new_color;
|
||||
// Because of this check, we only support src.a / 1-src.a blending.
|
||||
if ((color_in >> 24) == 255 || !alphaBlend) {
|
||||
new_color = color_in & 0xFFFFFF;
|
||||
} else {
|
||||
const u32 old_color = *pixel;
|
||||
new_color = StandardAlphaBlend(color_in, old_color);
|
||||
}
|
||||
new_color |= *pixel & 0xFF000000;
|
||||
*pixel = new_color;
|
||||
}
|
||||
|
||||
// Check if we can safely ignore the alpha test, assuming standard alpha blending.
|
||||
@@ -108,18 +150,18 @@ static inline bool AlphaTestIsNeedless(const PixelFuncID &pixelID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool UseDrawSinglePixel5551(const PixelFuncID &pixelID) {
|
||||
static bool UseDrawSinglePixel(const PixelFuncID &pixelID) {
|
||||
if (pixelID.clearMode || pixelID.colorTest || pixelID.stencilTest)
|
||||
return false;
|
||||
if (!AlphaTestIsNeedless(pixelID) || pixelID.DepthTestFunc() != GE_COMP_ALWAYS)
|
||||
return false;
|
||||
if (pixelID.FBFormat() != GE_FORMAT_5551 || !pixelID.alphaBlend)
|
||||
return false;
|
||||
// We skip blending when alpha = FF, so we can't allow other blend modes.
|
||||
if (pixelID.AlphaBlendEq() != GE_BLENDMODE_MUL_AND_ADD || pixelID.AlphaBlendSrc() != PixelBlendFactor::SRCALPHA)
|
||||
return false;
|
||||
if (pixelID.AlphaBlendDst() != PixelBlendFactor::INVSRCALPHA)
|
||||
return false;
|
||||
if (pixelID.alphaBlend) {
|
||||
if (pixelID.AlphaBlendEq() != GE_BLENDMODE_MUL_AND_ADD || pixelID.AlphaBlendSrc() != PixelBlendFactor::SRCALPHA)
|
||||
return false;
|
||||
if (pixelID.AlphaBlendDst() != PixelBlendFactor::INVSRCALPHA)
|
||||
return false;
|
||||
}
|
||||
if (pixelID.dithering || pixelID.applyLogicOp || pixelID.applyColorWriteMask)
|
||||
return false;
|
||||
|
||||
@@ -156,6 +198,111 @@ static inline Vec4IntResult SOFTRAST_CALL ModulateRGBA(Vec4IntArg prim_in, Vec4I
|
||||
return ToVec4IntResult(out);
|
||||
}
|
||||
|
||||
template <GEBufferFormat fmt, bool isWhite, bool alphaBlend>
|
||||
static void DrawSpriteTex(const DrawingCoords &pos0, const DrawingCoords &pos1, int s_start, int t_start, int ds, int dt, u32 color0, const RasterizerState &state, Sampler::FetchFunc fetchFunc) {
|
||||
const u8 *texptr = state.texptr[0];
|
||||
uint16_t texbufw = state.texbufw[0];
|
||||
|
||||
int t = t_start;
|
||||
const Vec4<int> c0 = Vec4<int>::FromRGBA(color0);
|
||||
for (int y = pos0.y; y < pos1.y; y++) {
|
||||
int s = s_start;
|
||||
u16 *pixel16 = fb.Get16Ptr(pos0.x, y, state.pixelID.cached.framebufStride);
|
||||
u32 *pixel32 = fb.Get32Ptr(pos0.x, y, state.pixelID.cached.framebufStride);
|
||||
for (int x = pos0.x; x < pos1.x; x++) {
|
||||
Vec4<int> tex_color = fetchFunc(s, t, texptr, texbufw, 0, state.samplerID);
|
||||
if (isWhite) {
|
||||
if (!alphaBlend || tex_color.a() != 0) {
|
||||
u32 tex_color32 = tex_color.ToRGBA();
|
||||
if (fmt == GE_FORMAT_8888)
|
||||
DrawSinglePixel32<alphaBlend>(pixel32, tex_color32);
|
||||
else
|
||||
DrawSinglePixel<fmt, alphaBlend>(pixel16, tex_color32);
|
||||
}
|
||||
} else {
|
||||
Vec4<int> prim_color = c0;
|
||||
prim_color = Vec4<int>(ModulateRGBA(ToVec4IntArg(prim_color), ToVec4IntArg(tex_color), state.samplerID));
|
||||
if (!alphaBlend || prim_color.a() > 0) {
|
||||
if (fmt == GE_FORMAT_8888)
|
||||
DrawSinglePixel32<alphaBlend>(pixel32, prim_color.ToRGBA());
|
||||
else
|
||||
DrawSinglePixel<fmt, alphaBlend>(pixel16, prim_color.ToRGBA());
|
||||
}
|
||||
}
|
||||
s += ds;
|
||||
if (fmt == GE_FORMAT_8888)
|
||||
pixel32++;
|
||||
else
|
||||
pixel16++;
|
||||
}
|
||||
t += dt;
|
||||
}
|
||||
}
|
||||
|
||||
template <bool isWhite, bool alphaBlend>
|
||||
static void DrawSpriteTex(const DrawingCoords &pos0, const DrawingCoords &pos1, int s_start, int t_start, int ds, int dt, u32 color0, const RasterizerState &state, Sampler::FetchFunc fetchFunc) {
|
||||
switch (state.pixelID.FBFormat()) {
|
||||
case GE_FORMAT_565:
|
||||
DrawSpriteTex<GE_FORMAT_565, isWhite, alphaBlend>(pos0, pos1, s_start, t_start, ds, dt, color0, state, fetchFunc);
|
||||
break;
|
||||
case GE_FORMAT_5551:
|
||||
DrawSpriteTex<GE_FORMAT_5551, isWhite, alphaBlend>(pos0, pos1, s_start, t_start, ds, dt, color0, state, fetchFunc);
|
||||
break;
|
||||
case GE_FORMAT_4444:
|
||||
DrawSpriteTex<GE_FORMAT_4444, isWhite, alphaBlend>(pos0, pos1, s_start, t_start, ds, dt, color0, state, fetchFunc);
|
||||
break;
|
||||
case GE_FORMAT_8888:
|
||||
DrawSpriteTex<GE_FORMAT_8888, isWhite, alphaBlend>(pos0, pos1, s_start, t_start, ds, dt, color0, state, fetchFunc);
|
||||
break;
|
||||
default:
|
||||
// Invalid, don't draw anything...
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
template <GEBufferFormat fmt, bool alphaBlend>
|
||||
static void DrawSpriteNoTex(const DrawingCoords &pos0, const DrawingCoords &pos1, u32 color0, const RasterizerState &state) {
|
||||
if (alphaBlend && Vec4<int>::FromRGBA(color0).a() == 0)
|
||||
return;
|
||||
|
||||
for (int y = pos0.y; y < pos1.y; y++) {
|
||||
if (fmt == GE_FORMAT_8888) {
|
||||
u32 *pixel = fb.Get32Ptr(pos0.x, y, state.pixelID.cached.framebufStride);
|
||||
for (int x = pos0.x; x < pos1.x; x++) {
|
||||
DrawSinglePixel32<alphaBlend>(pixel, color0);
|
||||
pixel++;
|
||||
}
|
||||
} else {
|
||||
u16 *pixel = fb.Get16Ptr(pos0.x, y, state.pixelID.cached.framebufStride);
|
||||
for (int x = pos0.x; x < pos1.x; x++) {
|
||||
DrawSinglePixel<fmt, alphaBlend>(pixel, color0);
|
||||
pixel++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <bool alphaBlend>
|
||||
static void DrawSpriteNoTex(const DrawingCoords &pos0, const DrawingCoords &pos1, u32 color0, const RasterizerState &state) {
|
||||
switch (state.pixelID.FBFormat()) {
|
||||
case GE_FORMAT_565:
|
||||
DrawSpriteNoTex<GE_FORMAT_565, alphaBlend>(pos0, pos1, color0, state);
|
||||
break;
|
||||
case GE_FORMAT_5551:
|
||||
DrawSpriteNoTex<GE_FORMAT_5551, alphaBlend>(pos0, pos1, color0, state);
|
||||
break;
|
||||
case GE_FORMAT_4444:
|
||||
DrawSpriteNoTex<GE_FORMAT_4444, alphaBlend>(pos0, pos1, color0, state);
|
||||
break;
|
||||
case GE_FORMAT_8888:
|
||||
DrawSpriteNoTex<GE_FORMAT_8888, alphaBlend>(pos0, pos1, color0, state);
|
||||
break;
|
||||
default:
|
||||
// Invalid, don't draw anything...
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DrawSprite(const VertexData &v0, const VertexData &v1, const BinCoords &range, const RasterizerState &state) {
|
||||
const u8 *texptr = state.texptr[0];
|
||||
|
||||
@@ -211,40 +358,17 @@ void DrawSprite(const VertexData &v0, const VertexData &v1, const BinCoords &ran
|
||||
pos0.y = scissorTL.y;
|
||||
}
|
||||
|
||||
if (UseDrawSinglePixel5551(pixelID) && samplerID.TexFunc() == GE_TEXFUNC_MODULATE && samplerID.useTextureAlpha) {
|
||||
if (isWhite) {
|
||||
int t = t_start;
|
||||
for (int y = pos0.y; y < pos1.y; y++) {
|
||||
int s = s_start;
|
||||
u16 *pixel = fb.Get16Ptr(pos0.x, y, pixelID.cached.framebufStride);
|
||||
for (int x = pos0.x; x < pos1.x; x++) {
|
||||
u32 tex_color = Vec4<int>(fetchFunc(s, t, texptr, texbufw, 0, state.samplerID)).ToRGBA();
|
||||
if (tex_color & 0xFF000000) {
|
||||
DrawSinglePixel5551(pixel, tex_color);
|
||||
}
|
||||
s += ds;
|
||||
pixel++;
|
||||
}
|
||||
t += dt;
|
||||
}
|
||||
if (UseDrawSinglePixel(pixelID) && (samplerID.TexFunc() == GE_TEXFUNC_MODULATE || samplerID.TexFunc() == GE_TEXFUNC_REPLACE) && samplerID.useTextureAlpha) {
|
||||
if (isWhite || samplerID.TexFunc() == GE_TEXFUNC_REPLACE) {
|
||||
if (pixelID.alphaBlend)
|
||||
DrawSpriteTex<true, true>(pos0, pos1, s_start, t_start, ds, dt, v1.color0, state, fetchFunc);
|
||||
else
|
||||
DrawSpriteTex<true, false>(pos0, pos1, s_start, t_start, ds, dt, v1.color0, state, fetchFunc);
|
||||
} else {
|
||||
int t = t_start;
|
||||
const Vec4<int> c0 = Vec4<int>::FromRGBA(v1.color0);
|
||||
for (int y = pos0.y; y < pos1.y; y++) {
|
||||
int s = s_start;
|
||||
u16 *pixel = fb.Get16Ptr(pos0.x, y, pixelID.cached.framebufStride);
|
||||
for (int x = pos0.x; x < pos1.x; x++) {
|
||||
Vec4<int> prim_color = c0;
|
||||
Vec4<int> tex_color = fetchFunc(s, t, texptr, texbufw, 0, state.samplerID);
|
||||
prim_color = Vec4<int>(ModulateRGBA(ToVec4IntArg(prim_color), ToVec4IntArg(tex_color), state.samplerID));
|
||||
if (prim_color.a() > 0) {
|
||||
DrawSinglePixel5551(pixel, prim_color.ToRGBA());
|
||||
}
|
||||
s += ds;
|
||||
pixel++;
|
||||
}
|
||||
t += dt;
|
||||
}
|
||||
if (pixelID.alphaBlend)
|
||||
DrawSpriteTex<false, true>(pos0, pos1, s_start, t_start, ds, dt, v1.color0, state, fetchFunc);
|
||||
else
|
||||
DrawSpriteTex<false, false>(pos0, pos1, s_start, t_start, ds, dt, v1.color0, state, fetchFunc);
|
||||
}
|
||||
} else {
|
||||
float dsf = ds * (1.0f / (float)(1 << state.samplerID.width0Shift));
|
||||
@@ -286,17 +410,11 @@ void DrawSprite(const VertexData &v0, const VertexData &v1, const BinCoords &ran
|
||||
if (pos1.y > scissorBR.y) pos1.y = scissorBR.y + 1;
|
||||
if (pos0.x < scissorTL.x) pos0.x = scissorTL.x;
|
||||
if (pos0.y < scissorTL.y) pos0.y = scissorTL.y;
|
||||
if (UseDrawSinglePixel5551(pixelID)) {
|
||||
if (Vec4<int>::FromRGBA(v1.color0).a() == 0)
|
||||
return;
|
||||
|
||||
for (int y = pos0.y; y < pos1.y; y++) {
|
||||
u16 *pixel = fb.Get16Ptr(pos0.x, y, pixelID.cached.framebufStride);
|
||||
for (int x = pos0.x; x < pos1.x; x++) {
|
||||
DrawSinglePixel5551(pixel, v1.color0);
|
||||
pixel++;
|
||||
}
|
||||
}
|
||||
if (UseDrawSinglePixel(pixelID)) {
|
||||
if (pixelID.alphaBlend)
|
||||
DrawSpriteNoTex<true>(pos0, pos1, v1.color0, state);
|
||||
else
|
||||
DrawSpriteNoTex<false>(pos0, pos1, v1.color0, state);
|
||||
} else if (pixelID.earlyZChecks) {
|
||||
const Vec4<int> prim_color = Vec4<int>::FromRGBA(v1.color0);
|
||||
for (int y = pos0.y; y < pos1.y; y++) {
|
||||
@@ -319,12 +437,14 @@ void DrawSprite(const VertexData &v0, const VertexData &v1, const BinCoords &ran
|
||||
|
||||
#if defined(SOFTGPU_MEMORY_TAGGING_BASIC) || defined(SOFTGPU_MEMORY_TAGGING_DETAILED)
|
||||
uint32_t bpp = pixelID.FBFormat() == GE_FORMAT_8888 ? 4 : 2;
|
||||
std::string tag = StringFromFormat("DisplayListR_%08x", state.listPC);
|
||||
std::string ztag = StringFromFormat("DisplayListRZ_%08x", state.listPC);
|
||||
char tag[64]{};
|
||||
// char ztag[64]{};
|
||||
int tagLen = snprintf(tag, sizeof(tag), "DisplayListR_%08x", state.listPC);
|
||||
// int ztagLen = snprintf(ztag, sizeof(ztag), "DisplayListRZ_%08x", state.listPC);
|
||||
|
||||
for (int y = pos0.y; y < pos1.y; y++) {
|
||||
uint32_t row = gstate.getFrameBufAddress() + y * pixelID.cached.framebufStride * bpp;
|
||||
NotifyMemInfo(MemBlockFlags::WRITE, row + pos0.x * bpp, (pos1.x - pos0.x) * bpp, tag.c_str(), tag.size());
|
||||
NotifyMemInfo(MemBlockFlags::WRITE, row + pos0.x * bpp, (pos1.x - pos0.x) * bpp, tag, tagLen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -344,24 +464,6 @@ bool RectangleFastPath(const VertexData &v0, const VertexData &v1, BinManager &b
|
||||
const RasterizerState &state = binner.State();
|
||||
|
||||
g_DarkStalkerStretch = DSStretch::Off;
|
||||
// Check for 1:1 texture mapping. In that case we can call DrawSprite.
|
||||
int xdiff = v1.screenpos.x - v0.screenpos.x;
|
||||
int ydiff = v1.screenpos.y - v0.screenpos.y;
|
||||
int udiff = (v1.texturecoords.x - v0.texturecoords.x) * (float)SCREEN_SCALE_FACTOR;
|
||||
int vdiff = (v1.texturecoords.y - v0.texturecoords.y) * (float)SCREEN_SCALE_FACTOR;
|
||||
bool coord_check =
|
||||
(xdiff == udiff || xdiff == -udiff) &&
|
||||
(ydiff == vdiff || ydiff == -vdiff);
|
||||
// Currently only works for TL/BR, which is the most common but not required.
|
||||
bool orient_check = xdiff >= 0 && ydiff >= 0;
|
||||
// We already have a fast path for clear in ClearRectangle.
|
||||
bool state_check = state.throughMode && !state.pixelID.clearMode && !state.samplerID.hasAnyMips && NoClampOrWrap(state, v0.texturecoords.uv()) && NoClampOrWrap(state, v1.texturecoords.uv());
|
||||
// This doesn't work well with offset drawing, see #15876. Through never has a subpixel offset.
|
||||
bool subpixel_check = ((v0.screenpos.x | v0.screenpos.y | v1.screenpos.x | v1.screenpos.y) & 0xF) == 0;
|
||||
if ((coord_check || !state.enableTextures) && orient_check && state_check && subpixel_check) {
|
||||
binner.AddSprite(v0, v1);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Eliminate the stretch blit in DarkStalkers.
|
||||
// We compensate for that when blitting the framebuffer in SoftGpu.cpp.
|
||||
@@ -389,9 +491,44 @@ bool RectangleFastPath(const VertexData &v0, const VertexData &v1, BinManager &b
|
||||
g_needsClearAfterDialog = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for 1:1 texture mapping. In that case we can call DrawSprite.
|
||||
int xdiff = v1.screenpos.x - v0.screenpos.x;
|
||||
int ydiff = v1.screenpos.y - v0.screenpos.y;
|
||||
int udiff = (v1.texturecoords.x - v0.texturecoords.x) * (float)SCREEN_SCALE_FACTOR;
|
||||
int vdiff = (v1.texturecoords.y - v0.texturecoords.y) * (float)SCREEN_SCALE_FACTOR;
|
||||
|
||||
// Currently only works for TL/BR, which is the most common but not required.
|
||||
bool orient_check = xdiff >= 0 && ydiff >= 0;
|
||||
// We already have a fast path for clear in ClearRectangle.
|
||||
bool state_check = state.throughMode && !state.pixelID.clearMode && !state.samplerID.hasAnyMips && !state.textureProj;
|
||||
bool coord_check = true;
|
||||
if (state.enableTextures) {
|
||||
state_check = state_check && NoClampOrWrap(state, v0.texturecoords.uv()) && NoClampOrWrap(state, v1.texturecoords.uv());
|
||||
coord_check = (xdiff == udiff || xdiff == -udiff) && (ydiff == vdiff || ydiff == -vdiff);
|
||||
}
|
||||
// This doesn't work well with offset drawing, see #15876. Through never has a subpixel offset.
|
||||
bool subpixel_check = ((v0.screenpos.x | v0.screenpos.y | v1.screenpos.x | v1.screenpos.y) & 0xF) == 0;
|
||||
if (coord_check && orient_check && state_check && subpixel_check) {
|
||||
binner.AddSprite(v0, v1);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool IsCoordRectangleCompatible(const RasterizerState &state, const ClipVertexData &data) {
|
||||
if (!state.throughMode) {
|
||||
// See AreCoordsRectangleCompatible() for most of these, this just checks the main vert.
|
||||
if (data.OutsideRange())
|
||||
return false;
|
||||
if (data.clippos.w < 0.0f)
|
||||
return false;
|
||||
if (data.clippos.z < -data.clippos.w)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool AreCoordsRectangleCompatible(const RasterizerState &state, const ClipVertexData &data0, const ClipVertexData &data1) {
|
||||
if (data1.v.color0 != data0.v.color0)
|
||||
return false;
|
||||
@@ -404,7 +541,7 @@ static bool AreCoordsRectangleCompatible(const RasterizerState &state, const Cli
|
||||
if (data1.v.color1 != data0.v.color1)
|
||||
return false;
|
||||
// This means it should be culled, outside range.
|
||||
if (data1.OutsideRange() || data0.OutsideRange())
|
||||
if (data1.OutsideRange())
|
||||
return false;
|
||||
// Do we have to think about perspective correction or slope mip level?
|
||||
if (state.enableTextures && data1.clippos.w != data0.clippos.w) {
|
||||
@@ -413,6 +550,12 @@ static bool AreCoordsRectangleCompatible(const RasterizerState &state, const Cli
|
||||
if (data1.clippos.w - halftexel > data0.clippos.w || data1.clippos.w + halftexel < data0.clippos.w)
|
||||
return false;
|
||||
}
|
||||
// We might need to cull this if all verts have negative w, which doesn't seem to happen for rectangles.
|
||||
if (data1.clippos.w < 0.0f)
|
||||
return false;
|
||||
// And we also may need to clip, even if flat.
|
||||
if (data1.clippos.z < -data1.clippos.w)
|
||||
return false;
|
||||
// If we're projecting textures, only allow an exact match for simplicity.
|
||||
if (state.enableTextures && data1.v.texturecoords.q() != data0.v.texturecoords.q())
|
||||
return false;
|
||||
@@ -427,10 +570,13 @@ static bool AreCoordsRectangleCompatible(const RasterizerState &state, const Cli
|
||||
}
|
||||
|
||||
bool DetectRectangleFromStrip(const RasterizerState &state, const ClipVertexData data[4], int *tlIndex, int *brIndex) {
|
||||
if (!IsCoordRectangleCompatible(state, data[0]))
|
||||
return false;
|
||||
|
||||
// Color and Z must be flat. Also find the TL and BR meanwhile.
|
||||
int tl = 0, br = 0;
|
||||
for (int i = 1; i < 4; ++i) {
|
||||
if (!AreCoordsRectangleCompatible(state, data[i], data[0]))
|
||||
if (!AreCoordsRectangleCompatible(state, data[0], data[i]))
|
||||
return false;
|
||||
|
||||
if (data[i].v.screenpos.x <= data[tl].v.screenpos.x && data[i].v.screenpos.y <= data[tl].v.screenpos.y)
|
||||
@@ -483,10 +629,13 @@ bool DetectRectangleFromStrip(const RasterizerState &state, const ClipVertexData
|
||||
}
|
||||
|
||||
bool DetectRectangleFromFan(const RasterizerState &state, const ClipVertexData *data, int *tlIndex, int *brIndex) {
|
||||
if (!IsCoordRectangleCompatible(state, data[0]))
|
||||
return false;
|
||||
|
||||
// Color and Z must be flat.
|
||||
int tl = 0, br = 0;
|
||||
for (int i = 1; i < 4; ++i) {
|
||||
if (!AreCoordsRectangleCompatible(state, data[i], data[0]))
|
||||
if (!AreCoordsRectangleCompatible(state, data[0], data[i]))
|
||||
return false;
|
||||
|
||||
if (data[i].v.screenpos.x <= data[tl].v.screenpos.x && data[i].v.screenpos.y <= data[tl].v.screenpos.y)
|
||||
@@ -534,10 +683,13 @@ bool DetectRectangleFromFan(const RasterizerState &state, const ClipVertexData *
|
||||
}
|
||||
|
||||
bool DetectRectangleFromPair(const RasterizerState &state, const ClipVertexData data[6], int *tlIndex, int *brIndex) {
|
||||
if (!IsCoordRectangleCompatible(state, data[0]))
|
||||
return false;
|
||||
|
||||
// Color and Z must be flat. Also find the TL and BR meanwhile.
|
||||
int tl = 0, br = 0;
|
||||
for (int i = 1; i < 6; ++i) {
|
||||
if (!AreCoordsRectangleCompatible(state, data[i], data[0]))
|
||||
if (!AreCoordsRectangleCompatible(state, data[0], data[i]))
|
||||
return false;
|
||||
|
||||
if (data[i].v.screenpos.x <= data[tl].v.screenpos.x && data[i].v.screenpos.y <= data[tl].v.screenpos.y)
|
||||
|
||||
+51
-20
@@ -25,6 +25,7 @@
|
||||
#include "Core/Reporting.h"
|
||||
#include "GPU/Common/TextureDecoder.h"
|
||||
#include "GPU/GPUState.h"
|
||||
#include "GPU/Software/BinManager.h"
|
||||
#include "GPU/Software/Rasterizer.h"
|
||||
#include "GPU/Software/RasterizerRegCache.h"
|
||||
#include "GPU/Software/Sampler.h"
|
||||
@@ -67,9 +68,9 @@ bool DescribeCodePtr(const u8 *ptr, std::string &name) {
|
||||
return true;
|
||||
}
|
||||
|
||||
NearestFunc GetNearestFunc(SamplerID id, std::function<void()> flushForCompile) {
|
||||
NearestFunc GetNearestFunc(SamplerID id, BinManager *binner) {
|
||||
id.linear = false;
|
||||
NearestFunc jitted = jitCache->GetNearest(id, flushForCompile);
|
||||
NearestFunc jitted = jitCache->GetNearest(id, binner);
|
||||
if (jitted) {
|
||||
return jitted;
|
||||
}
|
||||
@@ -77,9 +78,9 @@ NearestFunc GetNearestFunc(SamplerID id, std::function<void()> flushForCompile)
|
||||
return &SampleNearest;
|
||||
}
|
||||
|
||||
LinearFunc GetLinearFunc(SamplerID id, std::function<void()> flushForCompile) {
|
||||
LinearFunc GetLinearFunc(SamplerID id, BinManager *binner) {
|
||||
id.linear = true;
|
||||
LinearFunc jitted = jitCache->GetLinear(id, flushForCompile);
|
||||
LinearFunc jitted = jitCache->GetLinear(id, binner);
|
||||
if (jitted) {
|
||||
return jitted;
|
||||
}
|
||||
@@ -87,9 +88,9 @@ LinearFunc GetLinearFunc(SamplerID id, std::function<void()> flushForCompile) {
|
||||
return &SampleLinear;
|
||||
}
|
||||
|
||||
FetchFunc GetFetchFunc(SamplerID id, std::function<void()> flushForCompile) {
|
||||
FetchFunc GetFetchFunc(SamplerID id, BinManager *binner) {
|
||||
id.fetch = true;
|
||||
FetchFunc jitted = jitCache->GetFetch(id, flushForCompile);
|
||||
FetchFunc jitted = jitCache->GetFetch(id, binner);
|
||||
if (jitted) {
|
||||
return jitted;
|
||||
}
|
||||
@@ -97,11 +98,19 @@ FetchFunc GetFetchFunc(SamplerID id, std::function<void()> flushForCompile) {
|
||||
return &SampleFetch;
|
||||
}
|
||||
|
||||
thread_local SamplerJitCache::LastCache SamplerJitCache::lastFetch_;
|
||||
thread_local SamplerJitCache::LastCache SamplerJitCache::lastNearest_;
|
||||
thread_local SamplerJitCache::LastCache SamplerJitCache::lastLinear_;
|
||||
|
||||
// 256k should be enough.
|
||||
SamplerJitCache::SamplerJitCache() : Rasterizer::CodeBlock(1024 * 64 * 4), cache_(64) {
|
||||
lastFetch_.gen = -1;
|
||||
lastNearest_.gen = -1;
|
||||
lastLinear_.gen = -1;
|
||||
}
|
||||
|
||||
void SamplerJitCache::Clear() {
|
||||
clearGen_++;
|
||||
CodeBlock::Clear();
|
||||
cache_.Clear();
|
||||
addresses_.clear();
|
||||
@@ -153,25 +162,20 @@ void SamplerJitCache::Flush() {
|
||||
compileQueue_.clear();
|
||||
}
|
||||
|
||||
NearestFunc SamplerJitCache::GetByID(const SamplerID &id, std::function<void()> flushForCompile) {
|
||||
if (!g_Config.bSoftwareRenderingJit)
|
||||
return nullptr;
|
||||
|
||||
NearestFunc SamplerJitCache::GetByID(const SamplerID &id, size_t key, BinManager *binner) {
|
||||
std::unique_lock<std::mutex> guard(jitCacheLock);
|
||||
const size_t key = std::hash<SamplerID>()(id);
|
||||
|
||||
auto it = cache_.Get(key);
|
||||
if (it != nullptr)
|
||||
return it;
|
||||
|
||||
if (!flushForCompile) {
|
||||
if (!binner) {
|
||||
// Can't compile, let's try to do it later when there's an opportunity.
|
||||
compileQueue_.insert(id);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
guard.unlock();
|
||||
flushForCompile();
|
||||
binner->Flush("compile");
|
||||
guard.lock();
|
||||
|
||||
for (const auto &queued : compileQueue_) {
|
||||
@@ -189,16 +193,43 @@ NearestFunc SamplerJitCache::GetByID(const SamplerID &id, std::function<void()>
|
||||
return cache_.Get(key);
|
||||
}
|
||||
|
||||
NearestFunc SamplerJitCache::GetNearest(const SamplerID &id, std::function<void()> flushForCompile) {
|
||||
return (NearestFunc)GetByID(id, flushForCompile);
|
||||
NearestFunc SamplerJitCache::GetNearest(const SamplerID &id, BinManager *binner) {
|
||||
if (!g_Config.bSoftwareRenderingJit)
|
||||
return nullptr;
|
||||
|
||||
const size_t key = std::hash<SamplerID>()(id);
|
||||
if (lastNearest_.Match(key, clearGen_))
|
||||
return (NearestFunc)lastNearest_.func;
|
||||
|
||||
auto func = GetByID(id, key, binner);
|
||||
lastNearest_.Set(key, func, clearGen_);
|
||||
return (NearestFunc)func;
|
||||
}
|
||||
|
||||
LinearFunc SamplerJitCache::GetLinear(const SamplerID &id, std::function<void()> flushForCompile) {
|
||||
return (LinearFunc)GetByID(id, flushForCompile);
|
||||
LinearFunc SamplerJitCache::GetLinear(const SamplerID &id, BinManager *binner) {
|
||||
if (!g_Config.bSoftwareRenderingJit)
|
||||
return nullptr;
|
||||
|
||||
const size_t key = std::hash<SamplerID>()(id);
|
||||
if (lastLinear_.Match(key, clearGen_))
|
||||
return (LinearFunc)lastLinear_.func;
|
||||
|
||||
auto func = GetByID(id, key, binner);
|
||||
lastLinear_.Set(key, func, clearGen_);
|
||||
return (LinearFunc)func;
|
||||
}
|
||||
|
||||
FetchFunc SamplerJitCache::GetFetch(const SamplerID &id, std::function<void()> flushForCompile) {
|
||||
return (FetchFunc)GetByID(id, flushForCompile);
|
||||
FetchFunc SamplerJitCache::GetFetch(const SamplerID &id, BinManager *binner) {
|
||||
if (!g_Config.bSoftwareRenderingJit)
|
||||
return nullptr;
|
||||
|
||||
const size_t key = std::hash<SamplerID>()(id);
|
||||
if (lastFetch_.Match(key, clearGen_))
|
||||
return (FetchFunc)lastFetch_.func;
|
||||
|
||||
auto func = GetByID(id, key, binner);
|
||||
lastFetch_.Set(key, func, clearGen_);
|
||||
return (FetchFunc)func;
|
||||
}
|
||||
|
||||
void SamplerJitCache::Compile(const SamplerID &id) {
|
||||
|
||||
+29
-8
@@ -19,7 +19,6 @@
|
||||
|
||||
#include "ppsspp_config.h"
|
||||
|
||||
#include <functional>
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
#include "Common/Data/Collections/Hashmaps.h"
|
||||
@@ -27,6 +26,8 @@
|
||||
#include "GPU/Software/FuncId.h"
|
||||
#include "GPU/Software/RasterizerRegCache.h"
|
||||
|
||||
class BinManager;
|
||||
|
||||
namespace Sampler {
|
||||
|
||||
// Our std::unordered_map argument will ignore the alignment attribute, but that doesn't matter.
|
||||
@@ -37,13 +38,13 @@ namespace Sampler {
|
||||
#endif
|
||||
|
||||
typedef Rasterizer::Vec4IntResult(SOFTRAST_CALL *FetchFunc)(int u, int v, const u8 *tptr, int bufw, int level, const SamplerID &samplerID);
|
||||
FetchFunc GetFetchFunc(SamplerID id, std::function<void()> flushForCompile);
|
||||
FetchFunc GetFetchFunc(SamplerID id, BinManager *binner);
|
||||
|
||||
typedef Rasterizer::Vec4IntResult (SOFTRAST_CALL *NearestFunc)(float s, float t, Rasterizer::Vec4IntArg prim_color, const u8 *const *tptr, const uint16_t *bufw, int level, int levelFrac, const SamplerID &samplerID);
|
||||
NearestFunc GetNearestFunc(SamplerID id, std::function<void()> flushForCompile);
|
||||
NearestFunc GetNearestFunc(SamplerID id, BinManager *binner);
|
||||
|
||||
typedef Rasterizer::Vec4IntResult (SOFTRAST_CALL *LinearFunc)(float s, float t, Rasterizer::Vec4IntArg prim_color, const u8 *const *tptr, const uint16_t *bufw, int level, int levelFrac, const SamplerID &samplerID);
|
||||
LinearFunc GetLinearFunc(SamplerID id, std::function<void()> flushForCompile);
|
||||
LinearFunc GetLinearFunc(SamplerID id, BinManager *binner);
|
||||
|
||||
void Init();
|
||||
void FlushJit();
|
||||
@@ -56,9 +57,9 @@ public:
|
||||
SamplerJitCache();
|
||||
|
||||
// Returns a pointer to the code to run.
|
||||
NearestFunc GetNearest(const SamplerID &id, std::function<void()> flushForCompile);
|
||||
LinearFunc GetLinear(const SamplerID &id, std::function<void()> flushForCompile);
|
||||
FetchFunc GetFetch(const SamplerID &id, std::function<void()> flushForCompile);
|
||||
NearestFunc GetNearest(const SamplerID &id, BinManager *binner);
|
||||
LinearFunc GetLinear(const SamplerID &id, BinManager *binner);
|
||||
FetchFunc GetFetch(const SamplerID &id, BinManager *binner);
|
||||
void Clear() override;
|
||||
void Flush();
|
||||
|
||||
@@ -66,7 +67,7 @@ public:
|
||||
|
||||
private:
|
||||
void Compile(const SamplerID &id);
|
||||
NearestFunc GetByID(const SamplerID &id, std::function<void()> flushForCompile);
|
||||
NearestFunc GetByID(const SamplerID &id, size_t key, BinManager *binner);
|
||||
FetchFunc CompileFetch(const SamplerID &id);
|
||||
NearestFunc CompileNearest(const SamplerID &id);
|
||||
LinearFunc CompileLinear(const SamplerID &id);
|
||||
@@ -127,9 +128,29 @@ private:
|
||||
const u8 *const5551Swizzle_ = nullptr;
|
||||
const u8 *const5650Swizzle_ = nullptr;
|
||||
|
||||
struct LastCache {
|
||||
size_t key;
|
||||
NearestFunc func;
|
||||
int gen = -1;
|
||||
|
||||
bool Match(size_t k, int g) const {
|
||||
return key == k && gen == g;
|
||||
}
|
||||
|
||||
void Set(size_t k, NearestFunc f, int g) {
|
||||
key = k;
|
||||
func = f;
|
||||
gen = g;
|
||||
}
|
||||
};
|
||||
|
||||
DenseHashMap<size_t, NearestFunc, nullptr> cache_;
|
||||
std::unordered_map<SamplerID, const u8 *> addresses_;
|
||||
std::unordered_set<SamplerID> compileQueue_;
|
||||
int clearGen_ = 0;
|
||||
static thread_local LastCache lastFetch_;
|
||||
static thread_local LastCache lastNearest_;
|
||||
static thread_local LastCache lastLinear_;
|
||||
};
|
||||
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
|
||||
@@ -569,10 +569,9 @@ void TransformUnit::SubmitPrimitive(const void* vertices, const void* indices, G
|
||||
// Some games send rectangles as a series of regular triangles.
|
||||
// We look for this, but only in throughmode.
|
||||
ClipVertexData buf[6];
|
||||
int buf_index = data_index_;
|
||||
for (int i = 0; i < data_index_; ++i) {
|
||||
buf[i] = data_[i];
|
||||
}
|
||||
// Could start at data_index_ and copy to buf, but there's little reason.
|
||||
int buf_index = 0;
|
||||
_assert_(data_index_ == 0);
|
||||
|
||||
for (int vtx = 0; vtx < vertex_count; ++vtx) {
|
||||
buf[buf_index++] = vreader.Read(vtx);
|
||||
|
||||
+150
-12
@@ -23,6 +23,7 @@
|
||||
#include "Common/Render/DrawBuffer.h"
|
||||
#include "Common/UI/Context.h"
|
||||
#include "Common/UI/View.h"
|
||||
#include "Common/UI/UIScreen.h"
|
||||
#include "Common/Math/math_util.h"
|
||||
#include "Common/System/Display.h"
|
||||
#include "Common/System/NativeApp.h"
|
||||
@@ -37,14 +38,14 @@
|
||||
#include "Core/System.h"
|
||||
#include "GPU/Common/FramebufferManagerCommon.h"
|
||||
#include "GPU/Common/PresentationCommon.h"
|
||||
#include "GPU/Common/PostShader.h"
|
||||
|
||||
static const int leftColumnWidth = 200;
|
||||
static const float orgRatio = 1.764706f; // 480.0 / 272.0
|
||||
|
||||
enum Mode {
|
||||
MODE_MOVE,
|
||||
MODE_RESIZE,
|
||||
MODE_INACTIVE = 0,
|
||||
MODE_MOVE = 1,
|
||||
MODE_RESIZE = 2,
|
||||
};
|
||||
|
||||
static Bounds FRectToBounds(FRect rc) {
|
||||
@@ -149,6 +150,7 @@ void DisplayLayoutScreen::dialogFinished(const Screen *dialog, DialogResult resu
|
||||
}
|
||||
|
||||
UI::EventReturn DisplayLayoutScreen::OnPostProcShaderChange(UI::EventParams &e) {
|
||||
// Remove the virtual "Off" entry. TODO: Get rid of it generally.
|
||||
g_Config.vPostShaderNames.erase(std::remove(g_Config.vPostShaderNames.begin(), g_Config.vPostShaderNames.end(), "Off"), g_Config.vPostShaderNames.end());
|
||||
|
||||
NativeMessageReceived("gpu_configChanged", "");
|
||||
@@ -162,7 +164,13 @@ UI::EventReturn DisplayLayoutScreen::OnPostProcShaderChange(UI::EventParams &e)
|
||||
}
|
||||
|
||||
static std::string PostShaderTranslateName(const char *value) {
|
||||
auto gr = GetI18NCategory("Graphics");
|
||||
auto ps = GetI18NCategory("PostShaders");
|
||||
if (!strcmp(value, "Off")) {
|
||||
// Off is a legacy fake item (gonna migrate off it later).
|
||||
return gr->T("Add postprocessing shader");
|
||||
}
|
||||
|
||||
const ShaderInfo *info = GetPostShaderInfo(value);
|
||||
if (info) {
|
||||
return ps->T(value, info ? info->name.c_str() : value);
|
||||
@@ -195,14 +203,16 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
// impossible.
|
||||
root_->SetExclusiveTouch(true);
|
||||
|
||||
ScrollView *leftScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(300.0f, FILL_PARENT, 10.f, 10.f, NONE, 10.f, false));
|
||||
ScrollView *leftScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(400.0f, FILL_PARENT, 10.f, 10.f, NONE, 10.f, false));
|
||||
ViewGroup *leftColumn = new LinearLayout(ORIENT_VERTICAL);
|
||||
leftScrollView->Add(leftColumn);
|
||||
leftScrollView->SetClickableBackground(true);
|
||||
root_->Add(leftScrollView);
|
||||
|
||||
ScrollView *rightScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(300.0f, FILL_PARENT, NONE, 10.f, 10.f, 10.f, false));
|
||||
ViewGroup *rightColumn = new LinearLayout(ORIENT_VERTICAL);
|
||||
rightScrollView->Add(rightColumn);
|
||||
rightScrollView->SetClickableBackground(true);
|
||||
root_->Add(rightScrollView);
|
||||
|
||||
LinearLayout *bottomControls = new LinearLayout(ORIENT_HORIZONTAL, new AnchorLayoutParams(NONE, NONE, NONE, 10.0f, false));
|
||||
@@ -219,6 +229,7 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
aspectRatio->SetLiveUpdate(true);
|
||||
|
||||
mode_ = new ChoiceStrip(ORIENT_HORIZONTAL, new LinearLayoutParams(WRAP_CONTENT, WRAP_CONTENT));
|
||||
mode_->AddChoice(di->T("Inactive"));
|
||||
mode_->AddChoice(di->T("Move"));
|
||||
mode_->AddChoice(di->T("Resize"));
|
||||
mode_->SetSelection(0, false);
|
||||
@@ -251,8 +262,6 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
static const char *bufFilters[] = { "Linear", "Nearest", };
|
||||
leftColumn->Add(new PopupMultiChoice(&g_Config.iBufFilter, gr->T("Screen Scaling Filter"), bufFilters, 1, ARRAY_SIZE(bufFilters), gr->GetName(), screenManager()));
|
||||
|
||||
leftColumn->Add(new ItemHeader(gr->T("Postprocessing effect")));
|
||||
|
||||
Draw::DrawContext *draw = screenManager()->getDrawContext();
|
||||
|
||||
bool multiViewSupported = draw->GetDeviceCaps().multiViewSupported;
|
||||
@@ -261,15 +270,33 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
return g_Config.bStereoRendering && multiViewSupported;
|
||||
};
|
||||
|
||||
leftColumn->Add(new ItemHeader(gr->T("Postprocessing shaders")));
|
||||
|
||||
std::set<std::string> alreadyAddedShader;
|
||||
settingsVisible_.resize(g_Config.vPostShaderNames.size());
|
||||
|
||||
static ContextMenuItem postShaderContextMenu[] = {
|
||||
{ "Move Up", "I_ARROW_UP" },
|
||||
{ "Move Down", "I_ARROW_DOWN" },
|
||||
{ "Remove", "I_TRASHCAN" },
|
||||
};
|
||||
|
||||
for (int i = 0; i < (int)g_Config.vPostShaderNames.size() + 1 && i < ARRAY_SIZE(shaderNames_); ++i) {
|
||||
// Vector element pointer get invalidated on resize, cache name to have always a valid reference in the rendering thread
|
||||
shaderNames_[i] = i == g_Config.vPostShaderNames.size() ? "Off" : g_Config.vPostShaderNames[i];
|
||||
leftColumn->Add(new ItemHeader(StringFromFormat("%s #%d", gr->T("Postprocessing Shader"), i + 1)));
|
||||
postProcChoice_ = leftColumn->Add(new ChoiceWithValueDisplay(&shaderNames_[i], "", &PostShaderTranslateName));
|
||||
|
||||
LinearLayout *shaderRow = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(UI::FILL_PARENT, UI::WRAP_CONTENT));
|
||||
shaderRow->SetSpacing(4.0f);
|
||||
leftColumn->Add(shaderRow);
|
||||
|
||||
if (shaderNames_[i] != "Off") {
|
||||
postProcChoice_ = shaderRow->Add(new ChoiceWithValueDisplay(&shaderNames_[i], "", &PostShaderTranslateName, new LinearLayoutParams(1.0f)));
|
||||
} else {
|
||||
postProcChoice_ = shaderRow->Add(new Choice(ImageID("I_PLUS")));
|
||||
}
|
||||
postProcChoice_->OnClick.Add([=](EventParams &e) {
|
||||
auto gr = GetI18NCategory("Graphics");
|
||||
auto procScreen = new PostProcScreen(gr->T("Postprocessing Shader"), i, false);
|
||||
auto procScreen = new PostProcScreen(gr->T("Postprocessing shaders"), i, false);
|
||||
procScreen->SetHasDropShadow(false);
|
||||
procScreen->OnChoice.Handle(this, &DisplayLayoutScreen::OnPostProcShaderChange);
|
||||
if (e.v)
|
||||
@@ -281,25 +308,90 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
return !g_Config.bSkipBufferEffects && !enableStereo();
|
||||
});
|
||||
|
||||
if (i < g_Config.vPostShaderNames.size()) {
|
||||
bool hasSettings = false;
|
||||
std::vector<const ShaderInfo *> shaderChain = GetPostShaderChain(g_Config.vPostShaderNames[i]);
|
||||
for (auto shaderInfo : shaderChain) {
|
||||
for (size_t i = 0; i < ARRAY_SIZE(shaderInfo->settings); ++i) {
|
||||
auto &setting = shaderInfo->settings[i];
|
||||
if (!setting.name.empty()) {
|
||||
hasSettings = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasSettings) {
|
||||
CheckBox *checkBox = new CheckBox(&settingsVisible_[i], ImageID("I_SLIDERS"), new LinearLayoutParams(0.0f));
|
||||
auto settingsButton = shaderRow->Add(checkBox);
|
||||
settingsButton->OnClick.Add([=](EventParams &e) {
|
||||
RecreateViews();
|
||||
return UI::EVENT_DONE;
|
||||
});
|
||||
}
|
||||
|
||||
auto removeButton = shaderRow->Add(new Choice(ImageID("I_TRASHCAN"), new LinearLayoutParams(0.0f)));
|
||||
removeButton->OnClick.Add([=](EventParams &e) -> UI::EventReturn {
|
||||
g_Config.vPostShaderNames.erase(g_Config.vPostShaderNames.begin() + i);
|
||||
NativeMessageReceived("gpu_configChanged", "");
|
||||
RecreateViews();
|
||||
return UI::EVENT_DONE;
|
||||
});
|
||||
|
||||
auto moreButton = shaderRow->Add(new Choice(ImageID("I_THREE_DOTS"), new LinearLayoutParams(0.0f)));
|
||||
moreButton->OnClick.Add([=](EventParams &e) -> UI::EventReturn {
|
||||
PopupContextMenuScreen *contextMenu = new UI::PopupContextMenuScreen(postShaderContextMenu, ARRAY_SIZE(postShaderContextMenu), di.get(), moreButton);
|
||||
screenManager()->push(contextMenu);
|
||||
contextMenu->SetEnabled(0, i > 0);
|
||||
contextMenu->SetEnabled(1, i < g_Config.vPostShaderNames.size() - 1);
|
||||
contextMenu->OnChoice.Add([=](EventParams &e) -> UI::EventReturn {
|
||||
switch (e.a) {
|
||||
case 0: // Move up
|
||||
std::swap(g_Config.vPostShaderNames[i - 1], g_Config.vPostShaderNames[i]);
|
||||
break;
|
||||
case 1: // Move down
|
||||
std::swap(g_Config.vPostShaderNames[i], g_Config.vPostShaderNames[i + 1]);
|
||||
break;
|
||||
case 2: // Remove
|
||||
g_Config.vPostShaderNames.erase(g_Config.vPostShaderNames.begin() + i);
|
||||
break;
|
||||
default:
|
||||
return UI::EVENT_DONE;
|
||||
}
|
||||
NativeMessageReceived("gpu_configChanged", "");
|
||||
RecreateViews();
|
||||
return UI::EVENT_DONE;
|
||||
});
|
||||
return UI::EVENT_DONE;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// No need for settings on the last one.
|
||||
if (i == g_Config.vPostShaderNames.size())
|
||||
continue;
|
||||
|
||||
auto shaderChain = GetPostShaderChain(g_Config.vPostShaderNames[i]);
|
||||
if (!settingsVisible_[i])
|
||||
continue;
|
||||
|
||||
std::vector<const ShaderInfo *> shaderChain = GetPostShaderChain(g_Config.vPostShaderNames[i]);
|
||||
for (auto shaderInfo : shaderChain) {
|
||||
// Disable duplicated shader slider
|
||||
bool duplicated = alreadyAddedShader.find(shaderInfo->section) != alreadyAddedShader.end();
|
||||
alreadyAddedShader.insert(shaderInfo->section);
|
||||
|
||||
LinearLayout *settingContainer = new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(UI::FILL_PARENT, UI::WRAP_CONTENT, UI::Margins(24.0f, 0.0f, 0.0f, 0.0f)));
|
||||
leftColumn->Add(settingContainer);
|
||||
for (size_t i = 0; i < ARRAY_SIZE(shaderInfo->settings); ++i) {
|
||||
auto &setting = shaderInfo->settings[i];
|
||||
if (!setting.name.empty()) {
|
||||
// This map lookup will create the setting in the mPostShaderSetting map if it doesn't exist, with a default value of 0.0.
|
||||
auto &value = g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderInfo->section.c_str(), i + 1)];
|
||||
if (duplicated) {
|
||||
auto sliderName = StringFromFormat("%s %s", ps->T(setting.name), ps->T("(duplicated setting, previous slider will be used)"));
|
||||
PopupSliderChoiceFloat *settingValue = leftColumn->Add(new PopupSliderChoiceFloat(&value, setting.minValue, setting.maxValue, sliderName, setting.step, screenManager()));
|
||||
PopupSliderChoiceFloat *settingValue = settingContainer->Add(new PopupSliderChoiceFloat(&value, setting.minValue, setting.maxValue, sliderName, setting.step, screenManager()));
|
||||
settingValue->SetEnabled(false);
|
||||
} else {
|
||||
PopupSliderChoiceFloat *settingValue = leftColumn->Add(new PopupSliderChoiceFloat(&value, setting.minValue, setting.maxValue, ps->T(setting.name), setting.step, screenManager()));
|
||||
PopupSliderChoiceFloat *settingValue = settingContainer->Add(new PopupSliderChoiceFloat(&value, setting.minValue, setting.maxValue, ps->T(setting.name), setting.step, screenManager()));
|
||||
settingValue->SetLiveUpdate(true);
|
||||
settingValue->SetHasDropShadow(false);
|
||||
settingValue->SetEnabledFunc([=] {
|
||||
@@ -313,3 +405,49 @@ void DisplayLayoutScreen::CreateViews() {
|
||||
|
||||
root_->Add(new DisplayLayoutBackground(mode_, new AnchorLayoutParams(FILL_PARENT, FILL_PARENT, 0.0f, 0.0f, 0.0f, 0.0f)));
|
||||
}
|
||||
|
||||
void PostProcScreen::CreateViews() {
|
||||
auto ps = GetI18NCategory("PostShaders");
|
||||
ReloadAllPostShaderInfo(screenManager()->getDrawContext());
|
||||
shaders_ = GetAllPostShaderInfo();
|
||||
std::vector<std::string> items;
|
||||
int selected = -1;
|
||||
const std::string selectedName = id_ >= (int)g_Config.vPostShaderNames.size() ? "Off" : g_Config.vPostShaderNames[id_];
|
||||
|
||||
for (int i = 0; i < (int)shaders_.size(); i++) {
|
||||
if (!shaders_[i].visible)
|
||||
continue;
|
||||
if (shaders_[i].isStereo != showStereoShaders_)
|
||||
continue;
|
||||
if (shaders_[i].section == selectedName)
|
||||
selected = (int)indexTranslation_.size();
|
||||
items.push_back(ps->T(shaders_[i].section.c_str(), shaders_[i].name.c_str()));
|
||||
indexTranslation_.push_back(i);
|
||||
}
|
||||
adaptor_ = UI::StringVectorListAdaptor(items, selected);
|
||||
ListPopupScreen::CreateViews();
|
||||
}
|
||||
|
||||
void PostProcScreen::OnCompleted(DialogResult result) {
|
||||
if (result != DR_OK)
|
||||
return;
|
||||
const std::string &value = shaders_[indexTranslation_[listView_->GetSelected()]].section;
|
||||
// I feel this logic belongs more in the caller, but eh...
|
||||
if (showStereoShaders_) {
|
||||
if (g_Config.sStereoToMonoShader != value) {
|
||||
g_Config.sStereoToMonoShader = value;
|
||||
NativeMessageReceived("gpu_configChanged", "");
|
||||
}
|
||||
} else {
|
||||
if (id_ < (int)g_Config.vPostShaderNames.size()) {
|
||||
if (g_Config.vPostShaderNames[id_] != value) {
|
||||
g_Config.vPostShaderNames[id_] = value;
|
||||
NativeMessageReceived("gpu_configChanged", "");
|
||||
}
|
||||
}
|
||||
else {
|
||||
g_Config.vPostShaderNames.push_back(value);
|
||||
NativeMessageReceived("gpu_configChanged", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,8 +17,12 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <deque>
|
||||
|
||||
#include "Common/UI/View.h"
|
||||
#include "Common/UI/ViewGroup.h"
|
||||
#include "GPU/Common/PostShader.h"
|
||||
|
||||
#include "MiscScreens.h"
|
||||
|
||||
class DisplayLayoutScreen : public UIDialogScreenWithGameBackground {
|
||||
@@ -45,4 +49,23 @@ private:
|
||||
UI::ChoiceStrip *mode_ = nullptr;
|
||||
UI::Choice *postProcChoice_ = nullptr;
|
||||
std::string shaderNames_[256];
|
||||
std::deque<bool> settingsVisible_; // vector<bool> is an insane bitpacked specialization!
|
||||
};
|
||||
|
||||
class PostProcScreen : public ListPopupScreen {
|
||||
public:
|
||||
PostProcScreen(const std::string &title, int id, bool showStereoShaders)
|
||||
: ListPopupScreen(title), id_(id), showStereoShaders_(showStereoShaders) { }
|
||||
|
||||
void CreateViews() override;
|
||||
|
||||
const char *tag() const override { return "PostProc"; }
|
||||
|
||||
private:
|
||||
void OnCompleted(DialogResult result) override;
|
||||
bool ShowButtons() const override { return true; }
|
||||
std::vector<ShaderInfo> shaders_;
|
||||
int id_;
|
||||
bool showStereoShaders_;
|
||||
std::vector<int> indexTranslation_;
|
||||
};
|
||||
+24
-20
@@ -846,7 +846,30 @@ void GameSettingsScreen::CreateViews() {
|
||||
LinearLayout *systemSettings = AddTab("GameSettingsSystem", ms->T("System"));
|
||||
|
||||
systemSettings->Add(new ItemHeader(sy->T("UI")));
|
||||
systemSettings->Add(new Choice(sy->T("Language")))->OnClick.Handle(this, &GameSettingsScreen::OnLanguage);
|
||||
|
||||
auto langCodeToName = [](const char *value) -> std::string {
|
||||
auto &mapping = g_Config.GetLangValuesMapping();
|
||||
auto iter = mapping.find(value);
|
||||
if (iter != mapping.end()) {
|
||||
return iter->second.first;
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
systemSettings->Add(new ChoiceWithValueDisplay(&g_Config.sLanguageIni, sy->T("Language"), langCodeToName))->OnClick.Add([&](UI::EventParams &e) {
|
||||
auto sy = GetI18NCategory("System");
|
||||
auto langScreen = new NewLanguageScreen(sy->T("Language"));
|
||||
langScreen->OnChoice.Add([&](UI::EventParams &e) {
|
||||
screenManager()->RecreateAllViews();
|
||||
if (host)
|
||||
host->UpdateUI();
|
||||
return UI::EVENT_DONE;
|
||||
});
|
||||
if (e.v)
|
||||
langScreen->SetPopupOrigin(e.v);
|
||||
screenManager()->push(langScreen);
|
||||
return UI::EVENT_DONE;
|
||||
});
|
||||
systemSettings->Add(new CheckBox(&g_Config.bUISound, sy->T("UI Sound")));
|
||||
const Path bgPng = GetSysDirectory(DIRECTORY_SYSTEM) / "background.png";
|
||||
const Path bgJpg = GetSysDirectory(DIRECTORY_SYSTEM) / "background.jpg";
|
||||
@@ -1609,25 +1632,6 @@ UI::EventReturn GameSettingsScreen::OnChangeMacAddress(UI::EventParams &e) {
|
||||
return UI::EVENT_DONE;
|
||||
}
|
||||
|
||||
UI::EventReturn GameSettingsScreen::OnLanguage(UI::EventParams &e) {
|
||||
auto sy = GetI18NCategory("System");
|
||||
auto langScreen = new NewLanguageScreen(sy->T("Language"));
|
||||
langScreen->OnChoice.Handle(this, &GameSettingsScreen::OnLanguageChange);
|
||||
if (e.v)
|
||||
langScreen->SetPopupOrigin(e.v);
|
||||
screenManager()->push(langScreen);
|
||||
return UI::EVENT_DONE;
|
||||
}
|
||||
|
||||
UI::EventReturn GameSettingsScreen::OnLanguageChange(UI::EventParams &e) {
|
||||
screenManager()->RecreateAllViews();
|
||||
|
||||
if (host) {
|
||||
host->UpdateUI();
|
||||
}
|
||||
return UI::EVENT_DONE;
|
||||
}
|
||||
|
||||
UI::EventReturn GameSettingsScreen::OnTextureShader(UI::EventParams &e) {
|
||||
auto gr = GetI18NCategory("Graphics");
|
||||
auto shaderScreen = new TextureShaderScreen(gr->T("Texture Shader"));
|
||||
|
||||
@@ -80,15 +80,11 @@ private:
|
||||
UI::EventReturn OnControlMapping(UI::EventParams &e);
|
||||
UI::EventReturn OnCalibrateAnalogs(UI::EventParams &e);
|
||||
UI::EventReturn OnTouchControlLayout(UI::EventParams &e);
|
||||
UI::EventReturn OnDumpNextFrameToLog(UI::EventParams &e);
|
||||
UI::EventReturn OnTiltTypeChange(UI::EventParams &e);
|
||||
UI::EventReturn OnTiltCustomize(UI::EventParams &e);
|
||||
|
||||
// Global settings handlers
|
||||
UI::EventReturn OnLanguage(UI::EventParams &e);
|
||||
UI::EventReturn OnLanguageChange(UI::EventParams &e);
|
||||
UI::EventReturn OnAutoFrameskip(UI::EventParams &e);
|
||||
UI::EventReturn OnPostProcShaderChange(UI::EventParams &e);
|
||||
UI::EventReturn OnTextureShader(UI::EventParams &e);
|
||||
UI::EventReturn OnTextureShaderChange(UI::EventParams &e);
|
||||
UI::EventReturn OnDeveloperTools(UI::EventParams &e);
|
||||
|
||||
+9
-44
@@ -551,45 +551,6 @@ void PromptScreen::TriggerFinish(DialogResult result) {
|
||||
UIDialogScreenWithBackground::TriggerFinish(result);
|
||||
}
|
||||
|
||||
PostProcScreen::PostProcScreen(const std::string &title, int id, bool showStereoShaders) : ListPopupScreen(title), id_(id), showStereoShaders_(showStereoShaders) { }
|
||||
|
||||
void PostProcScreen::CreateViews() {
|
||||
auto ps = GetI18NCategory("PostShaders");
|
||||
ReloadAllPostShaderInfo(screenManager()->getDrawContext());
|
||||
shaders_ = GetAllPostShaderInfo();
|
||||
std::vector<std::string> items;
|
||||
int selected = -1;
|
||||
const std::string selectedName = id_ >= (int)g_Config.vPostShaderNames.size() ? "Off" : g_Config.vPostShaderNames[id_];
|
||||
|
||||
for (int i = 0; i < (int)shaders_.size(); i++) {
|
||||
if (!shaders_[i].visible)
|
||||
continue;
|
||||
if (shaders_[i].isStereo != showStereoShaders_)
|
||||
continue;
|
||||
if (shaders_[i].section == selectedName)
|
||||
selected = (int)indexTranslation_.size();
|
||||
items.push_back(ps->T(shaders_[i].section.c_str(), shaders_[i].name.c_str()));
|
||||
indexTranslation_.push_back(i);
|
||||
}
|
||||
adaptor_ = UI::StringVectorListAdaptor(items, selected);
|
||||
ListPopupScreen::CreateViews();
|
||||
}
|
||||
|
||||
void PostProcScreen::OnCompleted(DialogResult result) {
|
||||
if (result != DR_OK)
|
||||
return;
|
||||
const std::string &value = shaders_[indexTranslation_[listView_->GetSelected()]].section;
|
||||
// I feel this logic belongs more in the caller, but eh...
|
||||
if (showStereoShaders_) {
|
||||
g_Config.sStereoToMonoShader = value;
|
||||
} else {
|
||||
if (id_ < (int)g_Config.vPostShaderNames.size())
|
||||
g_Config.vPostShaderNames[id_] = value;
|
||||
else
|
||||
g_Config.vPostShaderNames.push_back(value);
|
||||
}
|
||||
}
|
||||
|
||||
TextureShaderScreen::TextureShaderScreen(const std::string &title) : ListPopupScreen(title) {}
|
||||
|
||||
void TextureShaderScreen::CreateViews() {
|
||||
@@ -619,7 +580,7 @@ NewLanguageScreen::NewLanguageScreen(const std::string &title) : ListPopupScreen
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(disable:4566)
|
||||
#endif
|
||||
langValuesMapping = GetLangValuesMapping();
|
||||
auto &langValuesMapping = g_Config.GetLangValuesMapping();
|
||||
|
||||
std::vector<File::FileInfo> tempLangs;
|
||||
VFSGetFileListing("lang", &tempLangs, "ini");
|
||||
@@ -655,11 +616,12 @@ NewLanguageScreen::NewLanguageScreen(const std::string &title) : ListPopupScreen
|
||||
std::string buttonTitle = lang.name;
|
||||
|
||||
if (!code.empty()) {
|
||||
if (langValuesMapping.find(code) == langValuesMapping.end()) {
|
||||
auto iter = langValuesMapping.find(code);
|
||||
if (iter == langValuesMapping.end()) {
|
||||
// No title found, show locale code
|
||||
buttonTitle = code;
|
||||
} else {
|
||||
buttonTitle = langValuesMapping[code].first;
|
||||
buttonTitle = iter->second.first;
|
||||
}
|
||||
}
|
||||
if (g_Config.sLanguageIni == code)
|
||||
@@ -700,11 +662,14 @@ void NewLanguageScreen::OnCompleted(DialogResult result) {
|
||||
|
||||
if (iniLoadedSuccessfully) {
|
||||
// Dunno what else to do here.
|
||||
if (langValuesMapping.find(code) == langValuesMapping.end()) {
|
||||
auto &langValuesMapping = g_Config.GetLangValuesMapping();
|
||||
|
||||
auto iter = langValuesMapping.find(code);
|
||||
if (iter == langValuesMapping.end()) {
|
||||
// Fallback to English
|
||||
g_Config.iLanguage = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH;
|
||||
} else {
|
||||
g_Config.iLanguage = langValuesMapping[code].second;
|
||||
g_Config.iLanguage = iter->second.second;
|
||||
}
|
||||
RecreateViews();
|
||||
} else {
|
||||
|
||||
@@ -106,28 +106,9 @@ public:
|
||||
private:
|
||||
void OnCompleted(DialogResult result) override;
|
||||
bool ShowButtons() const override { return true; }
|
||||
std::map<std::string, std::pair<std::string, int>> langValuesMapping;
|
||||
std::map<std::string, std::string> titleCodeMapping;
|
||||
std::vector<File::FileInfo> langs_;
|
||||
};
|
||||
|
||||
class PostProcScreen : public ListPopupScreen {
|
||||
public:
|
||||
PostProcScreen(const std::string &title, int id, bool showStereoShaders);
|
||||
|
||||
void CreateViews() override;
|
||||
|
||||
const char *tag() const override { return "PostProc"; }
|
||||
|
||||
private:
|
||||
void OnCompleted(DialogResult result) override;
|
||||
bool ShowButtons() const override { return true; }
|
||||
std::vector<ShaderInfo> shaders_;
|
||||
int id_;
|
||||
bool showStereoShaders_;
|
||||
std::vector<int> indexTranslation_;
|
||||
};
|
||||
|
||||
class TextureShaderScreen : public ListPopupScreen {
|
||||
public:
|
||||
TextureShaderScreen(const std::string &title);
|
||||
|
||||
+3
-3
@@ -1064,7 +1064,7 @@ void TakeScreenshot() {
|
||||
}
|
||||
|
||||
void RenderOverlays(UIContext *dc, void *userdata) {
|
||||
// Thin bar at the top of the screen like Chrome.
|
||||
// Thin bar at the top of the screen.
|
||||
std::vector<float> progress = g_DownloadManager.GetCurrentProgress();
|
||||
if (!progress.empty()) {
|
||||
static const uint32_t colors[4] = {
|
||||
@@ -1091,8 +1091,8 @@ void RenderOverlays(UIContext *dc, void *userdata) {
|
||||
}
|
||||
|
||||
void NativeRender(GraphicsContext *graphicsContext) {
|
||||
_assert_(graphicsContext != nullptr);
|
||||
_assert_(screenManager != nullptr);
|
||||
_dbg_assert_(graphicsContext != nullptr);
|
||||
_dbg_assert_(screenManager != nullptr);
|
||||
|
||||
g_GameManager.Update();
|
||||
|
||||
|
||||
@@ -154,68 +154,6 @@ namespace MainWindow {
|
||||
AppendMenu(helpMenu, MF_STRING | MF_BYCOMMAND, ID_HELP_ABOUT, aboutPPSSPP.c_str());
|
||||
}
|
||||
|
||||
void UpdateDynamicMenuCheckmarks(HMENU menu) {
|
||||
int item = ID_SHADERS_BASE + 1;
|
||||
|
||||
for (size_t i = 0; i < availableShaders.size(); i++) {
|
||||
bool checked = false;
|
||||
if (g_Config.vPostShaderNames.empty() && availableShaders[i] == "Off")
|
||||
checked = true;
|
||||
else if (g_Config.vPostShaderNames.size() == 1 && availableShaders[i] == g_Config.vPostShaderNames[0])
|
||||
checked = true;
|
||||
|
||||
CheckMenuItem(menu, item++, checked ? MF_CHECKED : MF_UNCHECKED);
|
||||
}
|
||||
}
|
||||
|
||||
bool CreateShadersSubmenu(HMENU menu) {
|
||||
// NOTE: We do not load this until translations are loaded!
|
||||
if (!I18NCategoryLoaded("PostShaders"))
|
||||
return false;
|
||||
|
||||
// We only reload this initially and when a menu is actually opened.
|
||||
if (!menuShaderInfoLoaded) {
|
||||
// This is on Windows where we don't currently blacklist any vendors, or similar.
|
||||
// TODO: Figure out how to have the GPU data while reloading the post shader info.
|
||||
ReloadAllPostShaderInfo(nullptr);
|
||||
menuShaderInfoLoaded = true;
|
||||
}
|
||||
|
||||
std::vector<ShaderInfo> info = GetAllPostShaderInfo();
|
||||
|
||||
if (menuShaderInfo.size() == info.size() && std::equal(info.begin(), info.end(), menuShaderInfo.begin())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto ps = GetI18NCategory("PostShaders");
|
||||
|
||||
HMENU shaderMenu = GetSubmenuById(menu, ID_OPTIONS_SHADER_MENU);
|
||||
EmptySubMenu(shaderMenu);
|
||||
|
||||
int item = ID_SHADERS_BASE + 1;
|
||||
const char *translatedShaderName = nullptr;
|
||||
|
||||
availableShaders.clear();
|
||||
for (auto i = info.begin(); i != info.end(); ++i) {
|
||||
if (!i->visible)
|
||||
continue;
|
||||
int checkedStatus = MF_UNCHECKED;
|
||||
availableShaders.push_back(i->section);
|
||||
if (g_Config.vPostShaderNames.empty() && i->section == "Off") {
|
||||
checkedStatus = MF_CHECKED;
|
||||
} else if (g_Config.vPostShaderNames.size() == 1 && g_Config.vPostShaderNames[0] == i->section) {
|
||||
checkedStatus = MF_CHECKED;
|
||||
}
|
||||
|
||||
translatedShaderName = ps->T(i->section.c_str(), i->name.c_str());
|
||||
|
||||
AppendMenu(shaderMenu, MF_STRING | MF_BYPOSITION | checkedStatus, item++, ConvertUTF8ToWString(translatedShaderName).c_str());
|
||||
}
|
||||
|
||||
menuShaderInfo = info;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void TranslateMenuItem(const HMENU hMenu, const int menuID, const std::wstring& accelerator = L"", const char *key = nullptr) {
|
||||
auto des = GetI18NCategory("DesktopUI");
|
||||
|
||||
@@ -302,7 +240,6 @@ namespace MainWindow {
|
||||
// Skip display multipliers x1-x10
|
||||
TranslateMenuItem(menu, ID_OPTIONS_FULLSCREEN, g_Config.bSystemControls ? L"\tAlt+Return, F11" : L"");
|
||||
TranslateMenuItem(menu, ID_OPTIONS_VSYNC);
|
||||
TranslateMenuItem(menu, ID_OPTIONS_SHADER_MENU);
|
||||
TranslateMenuItem(menu, ID_OPTIONS_SCREEN_MENU, g_Config.bSystemControls ? L"\tCtrl+1" : L"");
|
||||
TranslateMenuItem(menu, ID_OPTIONS_SCREENAUTO);
|
||||
// Skip rendering resolution 2x-5x..
|
||||
@@ -360,10 +297,6 @@ namespace MainWindow {
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (CreateShadersSubmenu(menu)) {
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
DrawMenuBar(hWnd);
|
||||
}
|
||||
@@ -1034,25 +967,8 @@ namespace MainWindow {
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
// Handle the dynamic shader switching here.
|
||||
// The Menu ID is contained in wParam, so subtract
|
||||
// ID_SHADERS_BASE and an additional 1 off it.
|
||||
u32 index = (wParam - ID_SHADERS_BASE - 1);
|
||||
if (index < availableShaders.size()) {
|
||||
g_Config.vPostShaderNames.clear();
|
||||
if (availableShaders[index] != "Off")
|
||||
g_Config.vPostShaderNames.push_back(availableShaders[index]);
|
||||
g_Config.bShaderChainRequires60FPS = PostShaderChainRequires60FPS(GetFullPostShadersChain(g_Config.vPostShaderNames));
|
||||
|
||||
NativeMessageReceived("gpu_renderResized", "");
|
||||
NativeMessageReceived("postshader_updated", "");
|
||||
break;
|
||||
}
|
||||
|
||||
MessageBox(hWnd, L"Unimplemented", L"Sorry", 0);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1329,7 +1245,6 @@ namespace MainWindow {
|
||||
EnableMenuItem(menu, ID_DEBUG_GEDEBUGGER, MF_GRAYED);
|
||||
#endif
|
||||
|
||||
UpdateDynamicMenuCheckmarks(menu);
|
||||
UpdateCommands();
|
||||
}
|
||||
|
||||
|
||||
@@ -553,10 +553,6 @@ BEGIN
|
||||
MENUITEM "Fullscreen", ID_OPTIONS_FULLSCREEN
|
||||
MENUITEM "VSync", ID_OPTIONS_VSYNC
|
||||
MENUITEM "Skip Buffer Effects", ID_OPTIONS_SKIP_BUFFER_EFFECTS
|
||||
POPUP "Postprocessing Shader", ID_OPTIONS_SHADER_MENU
|
||||
BEGIN
|
||||
MENUITEM "", 0, MFT_SEPARATOR
|
||||
END
|
||||
POPUP "Rendering Resolution", ID_OPTIONS_SCREEN_MENU
|
||||
BEGIN
|
||||
MENUITEM "Auto", ID_OPTIONS_SCREENAUTO
|
||||
|
||||
@@ -118,8 +118,6 @@
|
||||
#define IDC_GEDBG_PRIMCOUNTER 1201
|
||||
#define IDC_BUTTON_SEARCH 1204
|
||||
|
||||
#define ID_SHADERS_BASE 5000
|
||||
|
||||
#define ID_FILE_EXIT 40000
|
||||
#define ID_DEBUG_SAVEMAPFILE 40001
|
||||
#define ID_DISASM_RUNTOHERE 40004
|
||||
|
||||
@@ -192,7 +192,6 @@ Pause = &إيقاف مؤقت
|
||||
Pause When Not Focused = &إيقاف مؤقت حينما لا يكون مفعلاً
|
||||
Portrait = لوحة
|
||||
Portrait reversed = لوحة معكوسة
|
||||
Postprocessing Shader = Postprocessin&g shader
|
||||
PPSSPP Forums = PPSSPP &منتديات
|
||||
Record = &تسجيل
|
||||
Record Audio = تسجيل &الصوت
|
||||
@@ -322,6 +321,8 @@ Load completed = التحميل إكتمل.
|
||||
Loading = تحميل\nمن فضلك إنتظر...
|
||||
LoadingFailed = غير قادر علي تحميل البيانات.
|
||||
Move = تحريك
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = إتصال الشبكة
|
||||
NEW DATA = بيانات جديدة
|
||||
No = لا
|
||||
@@ -329,6 +330,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = حسناً
|
||||
Old savedata detected = بيانات حفظ قديمة قد إكتشفت
|
||||
Options = إعدادات
|
||||
Remove = Remove
|
||||
Reset = إستعادة
|
||||
Resize = تغيير الحجم
|
||||
Retry = حاول مجدداً
|
||||
@@ -536,8 +538,7 @@ Overlay Information = معلومات النسق
|
||||
Partial Stretch = تمطيط جزئي
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = الأداء
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1050,6 +1051,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pause
|
||||
Pause When Not Focused = &Pause When Not Focused
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = Postprocessin&g Shader
|
||||
PPSSPP Forums = PPSSPP &Forums
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Yükləmə Tamamlandı
|
||||
Loading = Yüklənir\nZəhmət Olmasa Gözləyin...
|
||||
LoadingFailed = Unable to load data.
|
||||
Move = Move
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Network Connection
|
||||
NEW DATA = NEW DATA
|
||||
No = Xeyir
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Resize
|
||||
Retry = Retry
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Overlay information
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pause
|
||||
Pause When Not Focused = Пауза, когато не фокусиран
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = Postprocessin&g Shader
|
||||
PPSSPP Forums = PPSSPP &форум
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Зареждането завършено.
|
||||
Loading = Зареждане\nМоля изчакайте...
|
||||
LoadingFailed = Unable to load data.
|
||||
Move = Преместване
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Мрежова връзка
|
||||
NEW DATA = Нови данни
|
||||
No = Не
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Преоразмеряване
|
||||
Retry = Нов опит
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Обща информация
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pausa
|
||||
Pause When Not Focused = &Pausa quan es canviï de finestra
|
||||
Portrait = Vertical
|
||||
Portrait reversed = Vertical invertit
|
||||
Postprocessing Shader = &Shader de postprocessat
|
||||
PPSSPP Forums = &Fòrums de PPSSPP
|
||||
Record = Enregistreu
|
||||
Record Audio = Enregistreu Àudio
|
||||
@@ -314,6 +313,8 @@ Load completed = Carrega completada
|
||||
Loading = Carregant\nEspera un moment...
|
||||
LoadingFailed = Unable to load data.
|
||||
Move = Move
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Network Connection
|
||||
NEW DATA = NEW DATA
|
||||
No = No
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Resize
|
||||
Retry = Retry
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Overlay information
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pozastavit
|
||||
Pause When Not Focused = &Pozastavit pokud okno není zaměřeno
|
||||
Portrait = Na výšku
|
||||
Portrait reversed = Na výšku obráceně
|
||||
Postprocessing Shader = &Shader následného zpracování
|
||||
PPSSPP Forums = &Fóra PPSSPP
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Načítání dokončeno.
|
||||
Loading = Načítání\nČekejte prosím...
|
||||
LoadingFailed = Nelze načíst data.
|
||||
Move = Přesunout
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Síťové připojení
|
||||
NEW DATA = NOVÁ DATA
|
||||
No = Ne
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Zjištěna stará uložená data
|
||||
Options = Volby
|
||||
Remove = Remove
|
||||
Reset = Resetovat
|
||||
Resize = Velikost
|
||||
Retry = Zkusit znovu
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Informace v překryvu
|
||||
Partial Stretch = Částečné roztažení
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Výkon
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Shader následného zpracování
|
||||
Postprocessing shaders = Shader následného zpracování
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pause
|
||||
Pause When Not Focused = P&ause når ikke i fokus
|
||||
Portrait = Portræt
|
||||
Portrait reversed = Omvendt portræt
|
||||
Postprocessing Shader = Efterbehandlin&gs shader
|
||||
PPSSPP Forums = PPSSPP &forum
|
||||
Record = Optag
|
||||
Record Audio = Optag Lyd
|
||||
@@ -314,6 +313,8 @@ Load completed = Hentet.
|
||||
Loading = Henter\nVent venligst...
|
||||
LoadingFailed = Ikke muligt at indlæse data.
|
||||
Move = Flyt
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Netværksforbindelse
|
||||
NEW DATA = NY DATA
|
||||
No = Nej
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Gamle savedata fundet
|
||||
Options = Optioner
|
||||
Remove = Remove
|
||||
Reset = Nulstil
|
||||
Resize = Størrelse
|
||||
Retry = Prøv igen
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Overlay information
|
||||
Partial Stretch = Delvis strukket
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Ydelse
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Efterbehandlings shader
|
||||
Postprocessing shaders = Efterbehandlings-shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = Pause
|
||||
Pause When Not Focused = Pausieren im Hintergrund
|
||||
Portrait = Hochformat
|
||||
Portrait reversed = Hochformat umgedreht
|
||||
Postprocessing Shader = Nachbearbeitungs-Shader
|
||||
PPSSPP Forums = PPSSPP Forum
|
||||
Record = Aufzeichnung
|
||||
Record Audio = Ton aufzeichnen
|
||||
@@ -314,6 +313,8 @@ Load completed = Laden abgeschlossen
|
||||
Loading = Laden\nBitte warten...
|
||||
LoadingFailed = Daten konnten nicht geladen werden.
|
||||
Move = Bewegen
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Netzwerkverbindung
|
||||
NEW DATA = Neue Daten
|
||||
No = Nein
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Alter Speicherstand entdeckt
|
||||
Options = Optionen
|
||||
Remove = Remove
|
||||
Reset = Zurücksetzen
|
||||
Resize = Größe ändern
|
||||
Retry = Wiederholen
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Eingeblendete Informationen
|
||||
Partial Stretch = Teilweise strecken
|
||||
Percent of FPS = Prozent an FPS
|
||||
Performance = Leistung
|
||||
Postprocessing effect = Nachbearbeitungs-Effekte
|
||||
Postprocessing Shader = Nachbearbeitungs-Shader
|
||||
Postprocessing shaders = Nachbearbeitungs-Shader
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Kann Framerate smoother in Spielen machen, die eine niedrige Framerate haben.
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger vorhanden
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Geräteinfo
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Paus
|
||||
Pause When Not Focused = &Pause When Not Focused
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = Postprocessin&g Shader
|
||||
PPSSPP Forums = PPSSPP &Forumna
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Tibukka'mi.
|
||||
Loading = Dibukka'i\nTajammi...
|
||||
LoadingFailed = Unable to load data.
|
||||
Move = Move
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Network Connection
|
||||
NEW DATA = DATA baru
|
||||
No = Edda mane
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = Okemi mane
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Resize
|
||||
Retry = Retry
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Pempakitan Overlay
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -208,7 +208,6 @@ Pause = &Pause
|
||||
Pause When Not Focused = &Pause when not focused
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = Postprocessin&g shader
|
||||
PPSSPP Forums = PPSSPP &forums
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -338,6 +337,8 @@ Load completed = Load completed.
|
||||
Loading = Loading\nPlease Wait...
|
||||
LoadingFailed = Unable to load data.
|
||||
Move = Move
|
||||
Move Up = Move Up
|
||||
Move Down = Move Down
|
||||
Network Connection = Network Connection
|
||||
NEW DATA = NEW DATA
|
||||
No = No
|
||||
@@ -345,6 +346,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Resize
|
||||
Retry = Retry
|
||||
@@ -552,8 +554,7 @@ Overlay Information = Overlay information
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1059,6 +1060,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Information = Display information
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pausar
|
||||
Pause When Not Focused = &Pausar al cambiar de ventana
|
||||
Portrait = &Vertical
|
||||
Portrait reversed = Vertical &invertido
|
||||
Postprocessing Shader = &Shader de postprocesado
|
||||
PPSSPP Forums = &Foro de PPSSPP
|
||||
Record = G&rabar
|
||||
Record Audio = Grabar &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Carga completada.
|
||||
Loading = Cargando\nEspera un momento...
|
||||
LoadingFailed = Los datos del juego no se pudieron cargar.
|
||||
Move = Posición
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Conexión de red
|
||||
NEW DATA = NUEVOS DATOS DE PARTIDA
|
||||
No = No
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obteniendo direcciónnn IP.\nPor favor espera...
|
||||
OK = Aceptar
|
||||
Old savedata detected = Se han detectado datos del juego antiguos.
|
||||
Options = Opciones
|
||||
Remove = Remove
|
||||
Reset = Reiniciar
|
||||
Resize = Tamaño
|
||||
Retry = Reintentar
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Información en pantalla
|
||||
Partial Stretch = Estirado parcial
|
||||
Percent of FPS = % de FPS
|
||||
Performance = Rendimiento
|
||||
Postprocessing effect = Efecto de postprocesado
|
||||
Postprocessing Shader = Shader de postprocesado
|
||||
Postprocessing shaders = Shaders de postprocesado
|
||||
Recreate Activity = Recrear actividad
|
||||
Render duplicate frames to 60hz = Renderizar cuadros duplicados a 60Hz
|
||||
RenderDuplicateFrames Tip = Puede hacer la imagen más fluida in juegos con una tasa de cuadros más baja.
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Nombre
|
||||
D3DCompiler Version = Versión del compilador D3D
|
||||
Debug = Desarrollo
|
||||
Debugger Present = Depurador presente
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Info. del dispositivo
|
||||
Directories = Directorios
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pausar
|
||||
Pause When Not Focused = &Pausar al cambiar de ventana
|
||||
Portrait = Retrato
|
||||
Portrait reversed = Retrato inverso
|
||||
Postprocessing Shader = &Shader de postprocesado
|
||||
PPSSPP Forums = &Foro de PPSSPP
|
||||
Record = G&rabar
|
||||
Record Audio = Grabar &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Datos cargados.
|
||||
Loading = Cargando\nPor favor espere...
|
||||
LoadingFailed = Los datos del juego no se pudieron cargar.
|
||||
Move = Mover
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Conexión de red
|
||||
NEW DATA = CREAR DATOS
|
||||
No = No
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obteniendo dirección IP.\nEspera un momento...
|
||||
OK = OK
|
||||
Old savedata detected = Se han detectado datos del juego antiguos.
|
||||
Options = Opciones
|
||||
Remove = Remove
|
||||
Reset = Reiniciar
|
||||
Resize = Tamaño
|
||||
Retry = Reintentar
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Información en pantalla
|
||||
Partial Stretch = Estirado parcial
|
||||
Percent of FPS = % de FPS
|
||||
Performance = Rendimiento
|
||||
Postprocessing effect = Efectos de postprocesado
|
||||
Postprocessing Shader = Shader de postprocesado
|
||||
Postprocessing shaders = Shaders de postprocesado
|
||||
Recreate Activity = Recrear actividad
|
||||
Render duplicate frames to 60hz = Procesar cuadros duplicados a 60 Hz
|
||||
RenderDuplicateFrames Tip = Puede hacer que la fluidez sea más suave en juegos con tasas de cuadros bajas.
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Nombre
|
||||
D3DCompiler Version = Versión del compilador D3D
|
||||
Debug = Desarrollo
|
||||
Debugger Present = Depurador presente
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Info de dispositivo
|
||||
Directories = Directorios
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = مکث
|
||||
Pause When Not Focused = هنگامی که پنجره فعال نباشد بازی متوقف شود
|
||||
Portrait = عمودی
|
||||
Portrait reversed = عمودی وارونه
|
||||
Postprocessing Shader = اضافه کردن افکت
|
||||
PPSSPP Forums = PPSSPP انجمن های
|
||||
Record = ضبط کردن
|
||||
Record Audio = ضبط صدا
|
||||
@@ -314,6 +313,8 @@ Load completed = .بارگیری نکمیل شد
|
||||
Loading = درحال بارگیری\n...منتظر بمانید
|
||||
LoadingFailed = Unable to load data.
|
||||
Move = Move
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Network Connection
|
||||
NEW DATA = دیتای جدید
|
||||
No = خیر
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = تایید
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Resize
|
||||
Retry = Retry
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Overlay اطلاعات
|
||||
Partial Stretch = کشیدگی جزئی
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = افکت پس-پردازش
|
||||
Postprocessing shaders = افکت پس-پردازش
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pause
|
||||
Pause When Not Focused = &Pause When Not Focused
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = Postprocessin&g Shader
|
||||
PPSSPP Forums = PPSSPP &Forums
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Lataus onnistui.
|
||||
Loading = Ladataan\nOdota...
|
||||
LoadingFailed = Unable to load data.
|
||||
Move = Move
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Network Connection
|
||||
NEW DATA = NEW DATA
|
||||
No = Ei
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Resize
|
||||
Retry = Retry
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Overlay information
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pause
|
||||
Pause When Not Focused = Mettre en pa&use si pas au premier plan
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait inversé
|
||||
Postprocessing Shader = S&haders de post-traitement
|
||||
PPSSPP Forums = Visiter le &forum de PPSSPP
|
||||
Record = E&nregistrer
|
||||
Record Audio = Enregistrer le &son
|
||||
@@ -314,6 +313,8 @@ Load completed = Chargement terminé.
|
||||
Loading = Chargement\nVeuillez patienter...
|
||||
LoadingFailed = Chargement impossible.
|
||||
Move = Déplacer
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Connexion réseau
|
||||
NEW DATA = NOUVELLES DONNÉES
|
||||
No = Non
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtention de l'adresse IP\nVeuillez patienter...
|
||||
OK = OK
|
||||
Old savedata detected = Ancienne sauvegarde détectée
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Remise à 0
|
||||
Resize = Zoomer
|
||||
Retry = Réessayer
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Informations incrustées à l'écran
|
||||
Partial Stretch = Étirement partiel
|
||||
Percent of FPS = Pourcentage de FPS
|
||||
Performance = Performances
|
||||
Postprocessing effect = Effets de post-traitement
|
||||
Postprocessing Shader = Shaders de post-traitement
|
||||
Postprocessing shaders = Shaders de post-traitement
|
||||
Recreate Activity = Recréer l'animation
|
||||
Render duplicate frames to 60hz = Dupliquer les images pour atteindre 60 Hz
|
||||
RenderDuplicateFrames Tip = Peut améliorer la fluidité dans les jeux qui fonctionnent à des fréquences d'images plus faibles
|
||||
@@ -1033,6 +1034,7 @@ CPU Name = Nom
|
||||
D3DCompiler Version = Version de D3DCompiler
|
||||
Debug = Débogage
|
||||
Debugger Present = Débogueur présent
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Informations sur l'appareil
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pausar
|
||||
Pause When Not Focused = &Pausar ó cambiar de ventá
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = &Shader de postprocesado
|
||||
PPSSPP Forums = &Foro de PPSSPP
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Carga completada.
|
||||
Loading = Cargando\nAgarda un momento...
|
||||
LoadingFailed = Os datos nom se puideron cargar.
|
||||
Move = Posición
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Conexión de rede
|
||||
NEW DATA = NOVOS DATOS
|
||||
No = Non
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = Aceptar
|
||||
Old savedata detected = Detectados datos de gardado antigos.
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Reiniciar
|
||||
Resize = Tamaño
|
||||
Retry = Reintentar
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Información en pantalla
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Rendemento
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Shader de postprocesado
|
||||
Postprocessing shaders = Shaders de postprocesado
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Πάυση
|
||||
Pause When Not Focused = Παύση σε κατάσταση παρασκηνίου
|
||||
Portrait = Κατακόρυφο προσανατολισμός
|
||||
Portrait reversed = Αντεστραμένος κατακόρυφος προσανατολισμός
|
||||
Postprocessing Shader = Shader Μετεπεξεργασίας
|
||||
PPSSPP Forums = PPSSPP &Forum
|
||||
Record = Καταγραφή
|
||||
Record Audio = Καταγραφή Ήχου
|
||||
@@ -314,6 +313,8 @@ Load completed = ΦΟΡΤΩΣΗ ΟΛΟΚΛΗΡΩΘΗΚΕ
|
||||
Loading = ΦΟΡΤΩΣΗ\nΠΑΡΑΚΑΛΩ ΠΕΡΙΜΕΝΕΤΕ...
|
||||
LoadingFailed = ΑΔΥΝΑΜΙΑ ΦΟΡΤΩΣΗΣ ΔΕΔΟΜΕΝΩΝ.
|
||||
Move = ΜΕΤΑΚΙΝΗΣΗ
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = ΣΥΝΔΕΣΗ ΔΙΚΤΥΟΥ
|
||||
NEW DATA = ΝΕΑ ΔΕΔΟΜΕΝΑ
|
||||
No = ΟΧΙ
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Εντοπίστηκαν παλαιά αρχεία αποθήκευσης
|
||||
Options = ΕΠΙΛΟΓΕΣ
|
||||
Remove = Remove
|
||||
Reset = ΕΠΑΝΑΦΟΡΑ
|
||||
Resize = ΑΛΛΑΓΗ ΜΕΓΕΘΟΥΣ
|
||||
Retry = ΕΠΑΝΑΛΗΨΗ
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Πληροφορίες Οθόνης
|
||||
Partial Stretch = Μερική επέκταση
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Επίδοσεις
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Shader Μετεπεξεργασίας
|
||||
Postprocessing shaders = Shaders Μετεπεξεργασίας
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Όνομα
|
||||
D3DCompiler Version = Έκδοση D3DCompiler
|
||||
Debug = Εντοπισμός σφαλμάτων
|
||||
Debugger Present = Παρουσία πρόγραμματος εντοπισμού σφαλμάτων
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Πληροφορίες συσκευής
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &השהה
|
||||
Pause When Not Focused = &Pause When Not Focused
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = Postprocessin&g Shader
|
||||
PPSSPP Forums = PPSSPP &Forums
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = .המלשוה הניעט
|
||||
Loading = ...ןתמה אנא ...ןעוט
|
||||
LoadingFailed = Unable to load data.
|
||||
Move = Move
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Network Connection
|
||||
NEW DATA = םישדח םינותנ
|
||||
No = אל
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = רדסב
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Resize
|
||||
Retry = Retry
|
||||
@@ -528,8 +530,7 @@ Overlay Information = כיסוי מידע
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pause
|
||||
Pause When Not Focused = &Pause When Not Focused
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = Postprocessin&g Shader
|
||||
PPSSPP Forums = PPSSPP &Forums
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = .המלשוה הניעט
|
||||
Loading = ...ןתמה אנא ...ןעוט
|
||||
LoadingFailed = Unable to load data.
|
||||
Move = Move
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Network Connection
|
||||
NEW DATA = םישדח םינותנ
|
||||
No = אל
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = רדסב
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Resize
|
||||
Retry = Retry
|
||||
@@ -528,8 +530,7 @@ Overlay Information = עדימ יוסיכ
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pauza
|
||||
Pause When Not Focused = &Pauziraj kad nije fokusirano
|
||||
Portrait = Portret
|
||||
Portrait reversed = Obrnuti portret
|
||||
Postprocessing Shader = Postupa&k sjenčanja
|
||||
PPSSPP Forums = PPSSPP &forumi
|
||||
Record = &Snimaj
|
||||
Record Audio = Snimaj &zvuk
|
||||
@@ -314,6 +313,8 @@ Load completed = Učitavanje dovršeno.
|
||||
Loading = Učitavanje\nPričekajte...
|
||||
LoadingFailed = Nije moguće učitati datu.
|
||||
Move = Pomakni
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Internetska veza
|
||||
NEW DATA = NOVA DATA
|
||||
No = Ne
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Uočena stara savedata
|
||||
Options = Opcije
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Resize
|
||||
Retry = Ponovi
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Prekrivanje informacija
|
||||
Partial Stretch = Djelomično rastezanje
|
||||
Percent of FPS = Postotak FPS-a
|
||||
Performance = Performansa
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Sjenčanje poslije procesa
|
||||
Postprocessing shaders = Sjenčanje poslije procesa
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Izlgađiva frameove u igrama koje ih jako malo imaju
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Ime
|
||||
D3DCompiler Version = D3DCompiler verzija
|
||||
Debug = Otklanjanje grešaka
|
||||
Debugger Present = Otklanjivač grešaka prisutan
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Informacije o uređaju
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Szünet
|
||||
Pause When Not Focused = &Szüneteltetés, ha nincs fókuszban
|
||||
Portrait = Álló
|
||||
Portrait reversed = Fordított álló
|
||||
Postprocessing Shader = Utóeffektező shader
|
||||
PPSSPP Forums = PPSSPP &fórum
|
||||
Record = &Felvétel
|
||||
Record Audio = &Hang felvétele
|
||||
@@ -314,6 +313,8 @@ Load completed = Betöltve.
|
||||
Loading = Betöltés\nKérlek várj...
|
||||
LoadingFailed = Betöltés sikertelen.
|
||||
Move = Mozgat
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Hálózati kapcsolat
|
||||
NEW DATA = ÚJ MENTÉS
|
||||
No = Nem
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Régi mentés észlelve
|
||||
Options = Opciók
|
||||
Remove = Remove
|
||||
Reset = Visszaállít
|
||||
Resize = Átméretez
|
||||
Retry = Újra
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Overlay információk
|
||||
Partial Stretch = Részleges nyújtás
|
||||
Percent of FPS = FPS százalékában
|
||||
Performance = Teljesítmény
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Utóeffektező shader
|
||||
Postprocessing shaders = Utóeffektező shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Képkockák duplázása 60 Hz rendereléshez
|
||||
RenderDuplicateFrames Tip = Simábbá teheti az alacsonyabb képkocka számon futó játékok kirajzolását
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Név
|
||||
D3DCompiler Version = D3DCompiler verzió
|
||||
Debug = Hibakeresés
|
||||
Debugger Present = Debugger jelen
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Eszközinfó
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = Jeda
|
||||
Pause When Not Focused = Jeda ketika tidak fokus
|
||||
Portrait = Tegak
|
||||
Portrait reversed = Tegak terbalik
|
||||
Postprocessing Shader = Pemrosesan shader
|
||||
PPSSPP Forums = &Forum PPSSPP
|
||||
Record = Rekam
|
||||
Record Audio = Rekam suara
|
||||
@@ -314,6 +313,8 @@ Load completed = Selesai memuat.
|
||||
Loading = Memuat\nMohon Tunggu...
|
||||
LoadingFailed = Tidak dapat memuat data.
|
||||
Move = Pindah
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Koneksi Jaringan
|
||||
NEW DATA = DATA BARU
|
||||
No = Tidak
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Mendapatkan alamat IP.\nHarap tunggu...
|
||||
OK = Oke
|
||||
Old savedata detected = Simpanan data lama terdeteksi
|
||||
Options = Pilihan
|
||||
Remove = Remove
|
||||
Reset = Atur ulang
|
||||
Resize = Atur ulang ukuran
|
||||
Retry = Coba lagi
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Tampilan Informasi
|
||||
Partial Stretch = Peregangan sebagian
|
||||
Percent of FPS = Persen FPS
|
||||
Performance = Kinerja
|
||||
Postprocessing effect = Efek pemrosesan
|
||||
Postprocessing Shader = Pemrosesan shader
|
||||
Postprocessing shaders = Pemrosesan shaders
|
||||
Recreate Activity = Buat ulang aktivitas
|
||||
Render duplicate frames to 60hz = Pelukisan bingkai duplikat menjadi 60 Hz
|
||||
RenderDuplicateFrames Tip = Dapat membuat laju bingkai lebih lancar dalam permainan yang berjalan pada laju bingkai yang lebih rendah
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Nama CPU
|
||||
D3DCompiler Version = Versi D3DCompiler
|
||||
Debug = Awakutu
|
||||
Debugger Present = Pengawakutu tersedia
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Info perangkat
|
||||
Directories = Direktori
|
||||
Display Color Formats = Format warna tampilan
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = Pausa
|
||||
Pause When Not Focused = Pausa quando non attivo
|
||||
Portrait = Ritratto
|
||||
Portrait reversed = Ritratto invertito
|
||||
Postprocessing Shader = Shader di post-elaborazione
|
||||
PPSSPP Forums = Forum PPSSPP
|
||||
Record = Registra
|
||||
Record Audio = Registra Audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Caricamento completato.
|
||||
Loading = Caricamento in corso.\nAttendere, prego...
|
||||
LoadingFailed = Impossibile caricare i dati.
|
||||
Move = Sposta
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Connessione di Rete
|
||||
NEW DATA = NUOVI DATI
|
||||
No = No
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Cerco di ottenere l'indirizzo IP.\nAttendere, prego...
|
||||
OK = OK
|
||||
Old savedata detected = Rilevati vecchi dati salvati
|
||||
Options = Opzioni
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Ridimensiona
|
||||
Retry = Riprova
|
||||
@@ -529,8 +531,7 @@ Overlay Information = Copri Informazioni
|
||||
Partial Stretch = Estensione Parziale
|
||||
Percent of FPS = Percentuale di FPS
|
||||
Performance = Prestazioni
|
||||
Postprocessing effect = Effetti di post-elaborazione
|
||||
Postprocessing Shader = Shader di post-elaborazione
|
||||
Postprocessing shaders = Shader di post-elaborazione
|
||||
Recreate Activity = Ricrea l'animazione
|
||||
Render duplicate frames to 60hz = Duplica i frame da renderizzare a 60 Hz
|
||||
RenderDuplicateFrames Tip = Può migliorare la fluidità nei giochi che funzionano a frame rate inferiori
|
||||
@@ -1043,6 +1044,7 @@ CPU Name = Nome
|
||||
D3DCompiler Version = Versione D3DCompiler
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger presente
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Informazioni dispositivo
|
||||
Directories = Cartelle
|
||||
Display Color Formats = Formati colore di visualizzazione
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = 一時停止(&P)
|
||||
Pause When Not Focused = 非フォーカス時は一時停止する(&P)
|
||||
Portrait = 縦
|
||||
Portrait reversed = 縦 (反転)
|
||||
Postprocessing Shader = 後処理シェーダ(&G)
|
||||
PPSSPP Forums = PPSSPPフォーラム(&F)
|
||||
Record = 記録(&R)
|
||||
Record Audio = オーディオを記録する(&A)
|
||||
@@ -314,6 +313,8 @@ Load completed = ロードが完了しました。
|
||||
Loading = ロード中です。\nしばらくお待ちください...
|
||||
LoadingFailed = データをロードできませんでした。
|
||||
Move = 移動
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = ネットワーク接続
|
||||
NEW DATA = 新しいデータ
|
||||
No = いいえ
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = IPアドレスの取得中。 \nしばらくお待ちください.
|
||||
OK = OK
|
||||
Old savedata detected = 古いセーブデータを検出しました
|
||||
Options = オプション
|
||||
Remove = Remove
|
||||
Reset = リセット
|
||||
Resize = リサイズ
|
||||
Retry = リトライ
|
||||
@@ -528,8 +530,7 @@ Overlay Information = オーバーレイ表示
|
||||
Partial Stretch = 部分的に拡大
|
||||
Percent of FPS = FPS中のパーセント
|
||||
Performance = パフォーマンス
|
||||
Postprocessing effect = 後処理エフェクト
|
||||
Postprocessing Shader = 後処理シェーダ
|
||||
Postprocessing shaders = 後処理シェーダ
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = フレームを複製して60Hzでレンダリングする
|
||||
RenderDuplicateFrames Tip = フレームレートが低いゲームでフレームレートをよりスムーズにできます
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = CPU名
|
||||
D3DCompiler Version = D3DCompilerバージョン
|
||||
Debug = デバッグ
|
||||
Debugger Present = デバッガーあり
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = デバイス情報
|
||||
Directories = ディレクトリ
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Ngaso
|
||||
Pause When Not Focused = &Ngaso Nalika Ora Fokus
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = Ngatifke Shader
|
||||
PPSSPP Forums = &Forum PPSSPP
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Mbukak rampung.
|
||||
Loading = Mbukak\nMohon nteni...
|
||||
LoadingFailed = Ora biso mbukak data.
|
||||
Move = Pindahno
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Koneksi Jaringan
|
||||
NEW DATA = DATA ANYAR
|
||||
No = Ora
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = He.eh
|
||||
Old savedata detected = Simpenan lawas terdeteksi
|
||||
Options = Opsi
|
||||
Remove = Remove
|
||||
Reset = Ngreset
|
||||
Resize = Ubah Ukuran
|
||||
Retry = Jajal Maning
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Informasi numpuki
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Kinerja
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = 일시 정지(&P)
|
||||
Pause When Not Focused = 포커싱되지 않았을 때 일시 정지(&P)
|
||||
Portrait = 세로방향
|
||||
Portrait reversed = 세로방향 반전
|
||||
Postprocessing Shader = 후처리 셰이더(&G)
|
||||
PPSSPP Forums = PPSSPP 포럼(&F)
|
||||
Record = 녹음(&R)
|
||||
Record Audio = 사운드 녹음(&A)
|
||||
@@ -314,6 +313,8 @@ Load completed = 불러오기가 완료되었습니다.
|
||||
Loading = 로딩 중\n잠시만 기다려 주세요...
|
||||
LoadingFailed = 데이터를 불러올 수 없습니다.
|
||||
Move = 이동
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = 네트워크 연결
|
||||
NEW DATA = 새로운 데이터
|
||||
No = 아니오
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = IP 주소를 가져오는 중입니다.\n잠시만 기다려 주
|
||||
OK = 확인
|
||||
Old savedata detected = 오래된 저장 데이터 감지됨
|
||||
Options = 옵션
|
||||
Remove = Remove
|
||||
Reset = 재설정
|
||||
Resize = 크기 조정
|
||||
Retry = 재시도
|
||||
@@ -528,8 +530,7 @@ Overlay Information = 오버레이 정보
|
||||
Partial Stretch = 부분 늘이기
|
||||
Percent of FPS = FPS 비율
|
||||
Performance = 성능
|
||||
Postprocessing effect = 후처리 효과
|
||||
Postprocessing Shader = 후처리 쉐이더
|
||||
Postprocessing shaders = 후처리 쉐이더
|
||||
Recreate Activity = 활동 재생성
|
||||
Render duplicate frames to 60hz = 중복 프레임을 60Hz로 렌더링
|
||||
RenderDuplicateFrames Tip = 낮은 프레임 속도에서 실행되는 게임에서 프레임 속도를 더 부드럽게 만들 수 있습니다.
|
||||
@@ -1055,6 +1056,7 @@ CPU Name = 이름
|
||||
D3DCompiler Version = D3D컴파일러 버전
|
||||
Debug = 디버그
|
||||
Debugger Present = 디버거 탐지
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = 장치 정보
|
||||
Directories = 디렉토리
|
||||
Display Information = 정보 표시
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &ຢຸດຊົ່ວຄາວ
|
||||
Pause When Not Focused = &ຢຸດຊົ່ວຄາວເມື່ອບໍ່ໄດ້ຫຼິ້ນ
|
||||
Portrait = ແນວຕັ້ງ
|
||||
Portrait reversed = ກັບດ້ານແນວຕັ້ງ
|
||||
Postprocessing Shader = &ຂະບວນການເຮັດວຽກໄລ່ປັບເສດແສງສີ
|
||||
PPSSPP Forums = &ຟໍຣຳ PPSSPP
|
||||
Record = ການບັນທຶກ
|
||||
Record Audio = ບັນທຶກສຽງ
|
||||
@@ -314,6 +313,8 @@ Load completed = ໂຫຼດຂໍ້ມູນສຳເລັດ
|
||||
Loading = ກຳລັງໂຫຼດ\nກະລຸນາລໍຖ້າ...
|
||||
LoadingFailed = ບໍ່ສາມາດໂຫຼດຂໍ້ມູນ.
|
||||
Move = ເຄື່ອນຍ້າຍ
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = ການເຊື່ອມຕໍ່ເຄື່ອຂ່າຍ
|
||||
NEW DATA = ຂໍ້ມູນໃໝ່
|
||||
No = ບໍ່ແມ່ນ
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = ຕົກລົງ
|
||||
Old savedata detected = ກວດພົບຂໍ້ມູນເຊບເກົ່າ
|
||||
Options = ໂຕເລືອກ
|
||||
Remove = Remove
|
||||
Reset = ຕັ້ງຄ່າໃໝ່
|
||||
Resize = ປັບຂະໜາດ
|
||||
Retry = ລອງໃໝ່ອີກຄັ້ງ
|
||||
@@ -528,8 +530,7 @@ Overlay Information = ການສະແດງຂໍ້ມູນຊ້ອນທ
|
||||
Partial Stretch = ແນວຕັ້ງດຶງເຕັມຈໍ
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = ປະສິດທິພາບ
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = ຂະບວນການເຮັດວຽກໄລ່ປັບເສດສີ
|
||||
Postprocessing shaders = ຂະບວນການເຮັດວຽກໄລ່ປັບເສດສີ
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pauzė
|
||||
Pause When Not Focused = &Stabdyti kai nefokusuota
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = Postprocessin&g Shader
|
||||
PPSSPP Forums = PPSSPP &Forumai
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Krovimas baigtas.
|
||||
Loading = Kraunama\nPrašome palaukti...
|
||||
LoadingFailed = Neįmanoma krauti duomenų.
|
||||
Move = Perkelti
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Interneto tinklas
|
||||
NEW DATA = NAUJI DUOMENYS
|
||||
No = Ne
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = Gerai
|
||||
Old savedata detected = Aptikti seniau išsaugoti duomenys
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Perkrauti
|
||||
Resize = Perkeisti dydį
|
||||
Retry = Pabandyti dar kartą
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Užkadrinė informacija
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Greitis
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = "Įdėjiniminio" krovimo "šešėliai" (FX)
|
||||
Postprocessing shaders = "Įdėjiniminio" krovimo "šešėliai" (FX)
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Jeda
|
||||
Pause When Not Focused = &Jeda ketika tidak difokus
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait songsang
|
||||
Postprocessing Shader = Shader pasc&apemprosesan
|
||||
PPSSPP Forums = PPSSPP &Forum
|
||||
Record = &Rakam
|
||||
Record Audio = Rakam &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Memuat selesai.
|
||||
Loading = Memuat\nSila tunggu...
|
||||
LoadingFailed = Unable to load data.
|
||||
Move = Move
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Network Connection
|
||||
NEW DATA = DATA BAHARU
|
||||
No = Tidak
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Mula semula
|
||||
Resize = Resize
|
||||
Retry = Cuba semula
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Maklumat pertindihan
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Prestasi
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Pascapemprosesan Shader
|
||||
Postprocessing shaders = Pascapemprosesan Shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pauzeren
|
||||
Pause When Not Focused = &Pauzeren wanneer venster inactief is
|
||||
Portrait = Portret
|
||||
Portrait reversed = Omgekeerd portret
|
||||
Postprocessing Shader = &Nabewerkingsshader
|
||||
PPSSPP Forums = &PPSSPP-forum
|
||||
Record = Opnemen
|
||||
Record Audio = Audio opnemen
|
||||
@@ -314,6 +313,8 @@ Load completed = Het laden is voltooid.
|
||||
Loading = Bezig met laden...\nEen ogenblik geduld.
|
||||
LoadingFailed = Kan de data niet laden.
|
||||
Move = Slepen
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Netwerkverbinding
|
||||
NEW DATA = NIEUWE DATA
|
||||
No = Nee
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Oude savedata gedetecteerd
|
||||
Options = Opties
|
||||
Remove = Remove
|
||||
Reset = Herstellen
|
||||
Resize = Schalen
|
||||
Retry = Opnieuw
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Informatie op het scherm
|
||||
Partial Stretch = Gedeeltelijk uitrekken
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Prestaties
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Nabewerkingsshader
|
||||
Postprocessing shaders = Nabewerkingsshaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Naam
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Fouten opsporen
|
||||
Debugger Present = Foutopsporing aanwezig
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Apparaatinformatie
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pause
|
||||
Pause When Not Focused = &Pause When Not Focused
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = Postprocessin&g Shader
|
||||
PPSSPP Forums = PPSSPP &Forums
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Ferdig lastet.
|
||||
Loading = Laster\nVent litt...
|
||||
LoadingFailed = Unable to load data.
|
||||
Move = Move
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Network Connection
|
||||
NEW DATA = NEW DATA
|
||||
No = Nei
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Reset
|
||||
Resize = Resize
|
||||
Retry = Retry
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Overlay information
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = Pauza
|
||||
Pause When Not Focused = Pauzuj, gdy okno nieaktywne
|
||||
Portrait = Pionowo
|
||||
Portrait reversed = Odwrócone pionowo
|
||||
Postprocessing Shader = Efekty wizualne shaderów
|
||||
PPSSPP Forums = Forum PPSSPP
|
||||
Record = &Nagrywaj
|
||||
Record Audio = Nagrywaj &dźwięk
|
||||
@@ -314,6 +313,8 @@ Load completed = Ładowanie zakończone.
|
||||
Loading = Ładowanie\nProszę czekać...
|
||||
LoadingFailed = Nie można wczytać danych.
|
||||
Move = Przenieś
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Połączenie sieciowe
|
||||
NEW DATA = NOWE DANE
|
||||
No = Nie
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Uzyskiwanie adresu IP.\nProszę czekać...
|
||||
OK = OK
|
||||
Old savedata detected = Wykryto stary zapis gry
|
||||
Options = Opcje
|
||||
Remove = Remove
|
||||
Reset = Resetuj
|
||||
Resize = Przeskaluj
|
||||
Retry = Spróbuj ponownie
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Nakładka informacyjna
|
||||
Partial Stretch = Częściowe rozciągnięcie
|
||||
Percent of FPS = Procent FPS
|
||||
Performance = Wydajność
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Efekty wizualne shaderów
|
||||
Postprocessing shaders = Efekty wizualne shaderów
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Nazwa
|
||||
D3DCompiler Version = Wersja D3DCompiler
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger obecny
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Inf. o urządzeniu
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
+42
-40
@@ -149,7 +149,7 @@ Refresh Rate = Taxa de atualização
|
||||
About PPSSPP... = &Sobre o PPSSPP...
|
||||
Auto = &Auto
|
||||
Auto Max Quality = Auto-maximizar a &qualidade
|
||||
Backend = Backend de &renderização (Reinicia o PPSSPP)
|
||||
Backend = Backend da &renderização (Reinicia o PPSSPP)
|
||||
Bicubic = &Bi-cúbico
|
||||
Break = Parar
|
||||
Break on Load = Parar ao carregar
|
||||
@@ -159,11 +159,11 @@ Debugging = &Debug
|
||||
Deposterize = &Deposterizar
|
||||
Direct3D9 = Direct3D &9
|
||||
Direct3D11 = Direct3D &11
|
||||
Disassembly = &Disassembly...
|
||||
Disassembly = &Fazer Disassembly...
|
||||
Discord = Discord
|
||||
Display Layout && Effects = Exibir o editor do esquema...
|
||||
Display Layout && Effects = Exibir esquema && efeitos...
|
||||
Display Rotation = Rotação da exibição
|
||||
Dump Next Frame to Log = D&umpar o frame seguinte no log
|
||||
Dump Next Frame to Log = D&umpar o frame seguinte no registro
|
||||
Emulation = &Emulação
|
||||
Enable Cheats = Ativar &trapaças
|
||||
Enable Sound = Ativar s&om
|
||||
@@ -188,7 +188,7 @@ Landscape reversed = Paisagem invertida
|
||||
Language... = Id&ioma...
|
||||
Linear = &Linear
|
||||
Load = &Carregar...
|
||||
Load .sym File... = Carreg&ar arquivo .sym
|
||||
Load .sym File... = Carreg&ar arquivo .sym...
|
||||
Load Map File... = Carregar &arquivo do mapa...
|
||||
Load State = C&arregar o state
|
||||
Load State File... = &Carregar arquivo do state...
|
||||
@@ -196,7 +196,7 @@ Log Console = &Console dos logs
|
||||
Memory View... = Visualização da &memória...
|
||||
More Settings... = &Mais configurações...
|
||||
Nearest = &Mais próximo
|
||||
Skip Buffer Effects = &Ignorar efeitos do buffer (sem buffer, mais rápido)
|
||||
Skip Buffer Effects = &Ignorar efeitos do buffer
|
||||
Off = &Desligado
|
||||
Open Chat = Abrir Bate-Papo
|
||||
Open Directory... = Abrir &diretório...
|
||||
@@ -208,7 +208,6 @@ Pause = &Pausar
|
||||
Pause When Not Focused = &Pausar quando não focado
|
||||
Portrait = Retrato
|
||||
Portrait reversed = Retrato invertido
|
||||
Postprocessing Shader = Shader de pós-processamento
|
||||
PPSSPP Forums = Fórums do &PPSSPP
|
||||
Record = &Gravar
|
||||
Record Audio = Gravar &áudio
|
||||
@@ -254,31 +253,31 @@ Current = Atual
|
||||
Dev Tools = Ferramentas de desenvolvimento
|
||||
DevMenu = Menu do DEV
|
||||
Disabled JIT functionality = Funcionalidade do JIT desativada
|
||||
Draw Frametimes Graph = Desenhar gráfico dos tempos dos frames
|
||||
Dump Decrypted Eboot = Dumpar EBOOT.BIN decriptado no boot do jogo
|
||||
Dump next frame to log = Dumpa o próximo frame no log
|
||||
Draw Frametimes Graph = Desenhar o gráfico dos tempos dos frames
|
||||
Dump Decrypted Eboot = Dumpar o EBOOT.BIN decriptado na inicialização do jogo
|
||||
Dump next frame to log = Dumpar o frame seguinte no registro
|
||||
Enable driver bug workarounds = Ativar soluções alternativas pros bugs dos drivers
|
||||
Enable Logging = Ativar log do debug
|
||||
Enable Logging = Ativar o registro do debug
|
||||
Enter address = Inserir endereço
|
||||
FPU = FPU
|
||||
Framedump tests = Testes dos dumps dos frames
|
||||
Frame Profiler = Analista dos frames
|
||||
GPU Driver Test = Teste do driver da GPU
|
||||
GPU Profile = Perfil da GPU
|
||||
GPU log profiler = Criador do Perfil do Registro da GPU
|
||||
GPU log profiler = Criador do perfil do registro da GPU
|
||||
Jit Compare = Comparar JIT
|
||||
JIT debug tools = Ferramentas de debug do JIT
|
||||
Log Dropped Frame Statistics = Pôr no log as estátisticas da queda dos frames
|
||||
Log Level = Nível do log
|
||||
Log View = Visualização do log
|
||||
Logging Channels = Canais do log
|
||||
Log Dropped Frame Statistics = Pôr no registro as estátisticas da queda dos frames
|
||||
Log Level = Nível do registro
|
||||
Log View = Visualização do registro
|
||||
Logging Channels = Canais do registro
|
||||
Next = Próximo
|
||||
No block = Nenhum bloco
|
||||
Prev = Anterior
|
||||
Random = Aleatório
|
||||
Replace textures = Substituir texturas
|
||||
Reset = Resetar
|
||||
Reset limited logging = Resetar o log limitado
|
||||
Reset limited logging = Resetar o registro limitado
|
||||
RestoreDefaultSettings = Você tem certeza que você quer restaurar todas as configurações de volta aos padrões delas?\nAs configurações do mapeamento dos controles não são mudadas.\nVocê não pode desfazer isto.\nPor favor reinicie o PPSSPP para as mudanças terem efeito.
|
||||
RestoreGameDefaultSettings = Você tem certeza que você quer restaurar as configurações específicas do jogo\nde volta para os padrões do PPSSPP?
|
||||
Resume = Resumo
|
||||
@@ -338,6 +337,8 @@ Load completed = Carregamento completado.
|
||||
Loading = Carregando\nPor favor espere...
|
||||
LoadingFailed = Incapaz de carregar os dados.
|
||||
Move = Mover
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Conexão de rede
|
||||
NEW DATA = NOVOS DADOS
|
||||
No = Não
|
||||
@@ -345,6 +346,7 @@ ObtainingIP = Obtendo endereço de IP.\nPor favor espere...
|
||||
OK = Ok
|
||||
Old savedata detected = Dados antigos do save detectados
|
||||
Options = Opções
|
||||
Remove = Remove
|
||||
Reset = Resetar
|
||||
Resize = Redimensionar
|
||||
Retry = Tentar de novo
|
||||
@@ -480,7 +482,7 @@ Aggressive = Agressivo
|
||||
Alternative Speed = Velocidade alternativa (em %, 0 = ilimitada)
|
||||
Alternative Speed 2 = Velocidade alternativa 2 (em %, 0 = ilimitada)
|
||||
Anisotropic Filtering = Filtragem anisotrópica
|
||||
Aspect Ratio = Aspect Ratio
|
||||
Aspect Ratio = Proporção do Aspecto
|
||||
Auto = Auto
|
||||
Auto (1:1) = Auto (1:1)
|
||||
Auto (same as Rendering) = Auto (a mesma que a da resolução de renderização)
|
||||
@@ -490,6 +492,7 @@ Auto Scaling = Auto-redimensionamento
|
||||
Backend = Backend
|
||||
Balanced = Balanceado
|
||||
Bicubic = Bi-cúbico
|
||||
GPUReadbackRequired = Aviso: Este jogo requer "Ignorar Leituras da GPU" pra ser configurado como Desligado.
|
||||
Both = Ambos
|
||||
Buffer graphics commands (faster, input lag) = Buffer dos comandos dos gráficos (mais rápido, atraso na entrada dos dados)
|
||||
BufferedRenderingRequired = Aviso: Este jogo requer que o "modo de renderização" esteja definido "com buffer".
|
||||
@@ -500,7 +503,7 @@ Cardboard Screen X Shift = Deslocamento do X (em % do espaço vazio)
|
||||
Cardboard Screen Y Shift = Deslocamento do Y (em % do espaço vazio)
|
||||
Cardboard VR Settings = Configurações do Google VR Cardboard
|
||||
Cheats = Trapaças
|
||||
CPU Core = Core da CPU
|
||||
CPU Core = Núcleo da CPU
|
||||
Debugging = Debugging
|
||||
DefaultCPUClockRequired = Aviso: Este jogo requer que o clock da CPU esteja definido como padrão.
|
||||
Deposterize = Deposterizar
|
||||
@@ -509,7 +512,7 @@ Device = Dispositivo
|
||||
Direct3D 9 = Direct3D 9
|
||||
Direct3D 11 = Direct3D 11
|
||||
Disabled = Desativado
|
||||
Display Layout && Effects = Exibe o editor dos esquemas
|
||||
Display Layout && Effects = Exibir esquema && efeitos
|
||||
Display Resolution (HW scaler) = Resolução da tela (Dimensionador do hardware)
|
||||
Enable Cardboard VR = Ativa o VR Cardboard
|
||||
FPS = FPS
|
||||
@@ -517,8 +520,7 @@ Frame Rate Control = Controle da taxa dos frames
|
||||
Frame Skipping = Pulo dos frames
|
||||
Frame Skipping Type = Tipo de pulo dos frames
|
||||
FullScreen = Tela cheia
|
||||
Geometry shader culling = Geometry shader culling
|
||||
GPUReadbackRequired = Warning: This game requires "Skip GPU Readbacks" to be set to Off.
|
||||
Geometry shader culling = Abate do shader da geometria
|
||||
Hack Settings = Configurações dos hacks (pode causar erros gráficos)
|
||||
Hardware Tessellation = Tesselação por hardware
|
||||
Hardware Transform = Transformação por hardware
|
||||
@@ -543,7 +545,7 @@ Must Restart = Você deve reiniciar o PPSSPP pra esta mudança ter efeito.
|
||||
Native device resolution = Resolução nativa do dispositivo
|
||||
Nearest = Mais próximo
|
||||
No buffer = Sem buffer
|
||||
Skip Buffer Effects = Ignorar efeitos do buffer (sem buffer, mais rápido)
|
||||
Skip Buffer Effects = Ignorar efeitos do buffer
|
||||
None = Nenhum
|
||||
Number of Frames = Número de frames
|
||||
Off = Desligado
|
||||
@@ -552,8 +554,7 @@ Overlay Information = Informações da sobreposição
|
||||
Partial Stretch = Esticamento parcial
|
||||
Percent of FPS = Porcentagem dos FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Efeitos de pós-processamento
|
||||
Postprocessing Shader = Shader de pós-processamento
|
||||
Postprocessing shaders = Shaders de pós-processamento
|
||||
Recreate Activity = Recriar atividade
|
||||
Render duplicate frames to 60hz = Renderizar frames duplicados a 60 Hz
|
||||
RenderDuplicateFrames Tip = Pode tornar a taxa dos frames mais suave em jogos que executam em taxas de frames menores
|
||||
@@ -565,15 +566,15 @@ Safe = Seguro
|
||||
Screen Scaling Filter = Filtro do dimensionamento da tela
|
||||
Show Debug Statistics = Mostrar estatísticas do debug
|
||||
Show FPS Counter = Mostrar contador de FPS
|
||||
Skip GPU Readbacks = Skip GPU Readbacks
|
||||
Skip GPU Readbacks = Ignorar Leituras da GPU
|
||||
Software Rendering = Renderização por software (lento)
|
||||
Software Skinning = Skinning via software
|
||||
SoftwareSkinning Tip = Combina os desenhos dos modelos de skinning na CPU, mais rápido na maioria dos jogos
|
||||
Speed = Velocidade
|
||||
Speed Hacks = Speed Hacks (pode causar erros gráficos)
|
||||
Stereo display shader = Stereo display shader
|
||||
Stereo rendering = Stereo rendering
|
||||
Stretch = Esticamento
|
||||
Speed Hacks = Hacks de Velocidade (podem causar erros de renderização!)
|
||||
Stereo display shader = Shader de exbição do estéreo
|
||||
Stereo rendering = Renderização do estéreo
|
||||
Stretch = Esticar
|
||||
Texture Filter = Filtragem das texturas
|
||||
Texture Filtering = Filtragem das texturas
|
||||
Texture Scaling = Dimensionamento das texturas
|
||||
@@ -587,7 +588,7 @@ Upscale Type = Tipo de ampliação
|
||||
UpscaleLevel Tip = Pesado pra CPU - alguns dimensionamentos podem ser atrasados pra evitar travamentos
|
||||
Use all displays = Usar todas as telas
|
||||
Vertex Cache = Cache do vértice
|
||||
VertexCache Tip = Mais rápido, mas pode causar tremulação temporária
|
||||
VertexCache Tip = Mais rápido mas pode causar tremulação temporária
|
||||
VSync = VSync
|
||||
Vulkan = Vulkan
|
||||
Window Size = Tamanho da janela
|
||||
@@ -621,7 +622,7 @@ Browse = Procurar...
|
||||
Buy PPSSPP Gold = Comprar o PPSSPP Gold
|
||||
Choose folder = Escolher pasta
|
||||
Credits = Créditos
|
||||
PPSSPP Homebrew Store = Armazém dos Homebrews do PPSSPP
|
||||
PPSSPP Homebrew Store = Loja dos Homebrews do PPSSPP
|
||||
Exit = Sair
|
||||
Game Settings = Configurações
|
||||
Games = Jogos
|
||||
@@ -744,9 +745,9 @@ Bottom Right = A direita do rodapé
|
||||
Center Left = Centralizar a esquerda
|
||||
Center Right = Centralizar a direita
|
||||
Change Mac Address = Mudar o endereço do MAC
|
||||
ChangeMacSaveConfirm = Gerar um novo endereço pro MAC?
|
||||
ChangeMacSaveWarning = Alguns jogos verificam o endereço do MAC quando carregam os dados do save então isto pode quebrar os saves antigos.
|
||||
Change proAdhocServer Address = Mudar o endereço de IP do servidor Ad Hoc PRO (localhost = múltiplas instâncias)
|
||||
ChangeMacSaveConfirm = Generate a new MAC address?
|
||||
ChangeMacSaveWarning = Some games verify the MAC address when loading savedata, so this may break old saves.
|
||||
Chat = Bate-papo
|
||||
Chat Button Position = Posição do botão de bate-papo
|
||||
Chat Here = Bata-papo aqui
|
||||
@@ -827,13 +828,13 @@ Bloom = Bloom
|
||||
Brightness = Brilho
|
||||
Cartoon = Cartoon
|
||||
ColorCorrection = Correção das cores
|
||||
ColorPreservation = Color preservation
|
||||
ColorPreservation = Preservação das cores
|
||||
Contrast = Contraste
|
||||
CRT = Scanlines do CRT
|
||||
FXAA = Anti-aliasing do FXAA
|
||||
Gamma = Gama
|
||||
Grayscale = Tons de cinza
|
||||
GreenLevel = GreenLevel
|
||||
GreenLevel = Nível verde
|
||||
Intensity = Intensidade
|
||||
InverseColors = Cores invertidas
|
||||
Natural = Cores naturais
|
||||
@@ -841,11 +842,11 @@ NaturalA = Cores naturais (sem borrão)
|
||||
Off = Desligado
|
||||
Power = Energia
|
||||
PSPColor = Cor do PSP
|
||||
RedBlue = Red/Blue glasses
|
||||
RedBlue = Óculos Vermelhos/Azuis
|
||||
Saturation = Saturação
|
||||
Scanlines = Scanlines (CRT)
|
||||
Sharpen = Aprimorado
|
||||
SideBySide = Side by side (SBS)
|
||||
SideBySide = Lado a lado (SBS)
|
||||
SSAA(Gauss) = Super-amostragem do AA (Gauss)
|
||||
Tex4xBRZ = 4xBRZ
|
||||
TexMMPX = MMPX
|
||||
@@ -1059,6 +1060,7 @@ CPU Name = Nome
|
||||
D3DCompiler Version = Versão do compilador D3D
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger presente
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Informação do dispositivo
|
||||
Directories = Diretórios
|
||||
Display Information = Informação da tela
|
||||
@@ -1110,8 +1112,6 @@ AVI Dump started. = Dump do AVI iniciado
|
||||
AVI Dump stopped. = Dump do AVI parado
|
||||
Cache ISO in RAM = Pôr a ISO inteira na RAM
|
||||
Change CPU Clock = Mudar o clock da CPU do PSP emulado (instável)
|
||||
Game crashed = Game crashed
|
||||
Language = Idioma
|
||||
Memory Stick folder = Pasta do cartão de memória
|
||||
Memory Stick size = Tamanho do cartão de memória
|
||||
Change Nickname = Mudar apelido
|
||||
@@ -1144,6 +1144,7 @@ Fast Memory = Memória rápida (instável)
|
||||
Floating symbols = Símbolos flutuantes
|
||||
Force real clock sync (slower, less lag) = Forçar sincronização com o relógio real (mais lento, menos atrasos)
|
||||
frames, 0:off = frames, 0 = Desligado
|
||||
Game crashed = O jogo teve um crash
|
||||
Games list settings = Configurações da lista de jogos
|
||||
General = Geral
|
||||
Grid icon size = Tamanho do ícone da grade
|
||||
@@ -1154,6 +1155,7 @@ Increase size = Aumentar tamanho
|
||||
Interpreter = Interpretador
|
||||
IO timing method = Método de cronometragem da E/S
|
||||
IR Interpreter = Interpretador do IR
|
||||
Language = Idioma
|
||||
Memory Stick Folder = Pasta do cartão de memória
|
||||
Memory Stick inserted = Cartão de memória inserido
|
||||
MHz, 0:default = MHz, 0 = padrão
|
||||
|
||||
@@ -208,7 +208,6 @@ Pause = &Pausar
|
||||
Pause When Not Focused = &Pausar quando não focado
|
||||
Portrait = Retrato
|
||||
Portrait reversed = Retrato invertido
|
||||
Postprocessing Shader = Shader de Pós-Processamento
|
||||
PPSSPP Forums = Fórums do &PPSSPP
|
||||
Record = &Gravar
|
||||
Record Audio = Gravar &Áudio
|
||||
@@ -338,6 +337,8 @@ Load completed = Carregamento completado.
|
||||
Loading = Carregando\nPor favor espere...
|
||||
LoadingFailed = Incapaz de carregar os dados.
|
||||
Move = Mover
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Conexão de rede
|
||||
NEW DATA = NOVOS DADOS
|
||||
No = Não
|
||||
@@ -345,6 +346,7 @@ ObtainingIP = Obtendo o Endereço de IP.\nPor favor espere...
|
||||
OK = Ok
|
||||
Old savedata detected = Dados antigos do save detectados
|
||||
Options = Opções
|
||||
Remove = Remove
|
||||
Reset = Reiniciar
|
||||
Resize = Redimensionar
|
||||
Retry = Tentar de novo
|
||||
@@ -552,8 +554,7 @@ Overlay Information = Informações da sobreposição
|
||||
Partial Stretch = Esticamento Parcial
|
||||
Percent of FPS = Percentagem dos FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Efeitos de Pós-Processamento
|
||||
Postprocessing Shader = Shader de Pós-Processamento
|
||||
Postprocessing shaders = Shaders de Pós-Processamento
|
||||
Recreate Activity = Recriar atividade
|
||||
Render duplicate frames to 60hz = Renderizar quadros duplicados a 60 Hz
|
||||
RenderDuplicateFrames Tip = Pode tornar a taxa dos quadros mais suave em jogos que executam em taxas de quadros menores
|
||||
@@ -1059,6 +1060,7 @@ CPU Name = Nome
|
||||
D3DCompiler Version = Versão do compilador D3D
|
||||
Debug = Debug
|
||||
Debugger Present = Depurador presente
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Informação do dispositivo
|
||||
Directories = Diretórios
|
||||
Display Information = Informação da tela
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Pause
|
||||
Pause When Not Focused = &Pause When Not Focused
|
||||
Portrait = Portrait
|
||||
Portrait reversed = Portrait reversed
|
||||
Postprocessing Shader = Postprocessin&g Shader
|
||||
PPSSPP Forums = PPSSPP &Forums
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Încărcare Completă
|
||||
Loading = Se încarcă\nAșteptați...
|
||||
LoadingFailed = Nu s-au putut încărca datele.
|
||||
Move = Mișcă
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Conexiune la rețea
|
||||
NEW DATA = DATE NOI
|
||||
No = Nu
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Date vechi salvate detectate
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Resetare
|
||||
Resize = Modificare marime
|
||||
Retry = Reîncearcă
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Informație suprapusă
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Performanță
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Shader postprocesare
|
||||
Postprocessing shaders = Shaders postprocesare
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Пауза
|
||||
Pause When Not Focused = &Пауза, когда окно не в фокусе
|
||||
Portrait = Портретная
|
||||
Portrait reversed = Портретная (перевернутая)
|
||||
Postprocessing Shader = &Постобработка (шейдер)
|
||||
PPSSPP Forums = &Форум PPSSPP
|
||||
Record = &Запись
|
||||
Record Audio = Запись &звука
|
||||
@@ -314,6 +313,8 @@ Load completed = Загрузка завершена
|
||||
Loading = Загрузка\nПожалуйста, подождите...
|
||||
LoadingFailed = Невозможно загрузить даные.
|
||||
Move = Положение
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Сетевое подключение
|
||||
NEW DATA = Новое сохранение
|
||||
No = Нет
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Получение IP-адреса.\nПожалуйста, под
|
||||
OK = OK
|
||||
Old savedata detected = Старый формат сохранений обнаружен
|
||||
Options = Опции
|
||||
Remove = Remove
|
||||
Reset = Сбросить
|
||||
Resize = Размер
|
||||
Retry = Снова
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Информация в оверлее
|
||||
Partial Stretch = Частичное растягивание
|
||||
Percent of FPS = Процент от FPS
|
||||
Performance = Производительность
|
||||
Postprocessing effect = Эффекты постобработки
|
||||
Postprocessing Shader = Постобработка (шейдер)
|
||||
Postprocessing shaders = Постобработка (шейдер)
|
||||
Recreate Activity = Создать активность заново
|
||||
Render duplicate frames to 60hz = Рендеринг дублирующихся кадров до 60 Гц
|
||||
RenderDuplicateFrames Tip = Может сгладить частоту кадров в тех играх, где она низкая
|
||||
|
||||
+57
-55
@@ -1,7 +1,7 @@
|
||||
[Audio]
|
||||
Alternate speed volume = Volym vid alternativ hastighet
|
||||
Audio backend = Uppspelningsteknik (ändring kräver omstart!)
|
||||
Audio Error = Audio Error
|
||||
Audio Error = Ljudfel
|
||||
AudioBufferingForBluetooth = Bluetooth-friendly buffer (slower)
|
||||
Auto = Auto
|
||||
Device = Enhet
|
||||
@@ -31,12 +31,12 @@ Auto-rotation speed = Auto-rotation speed
|
||||
Auto-switch = Auto-switch
|
||||
Base tilt position = Base tilt position
|
||||
Binds = Binds
|
||||
Button Binding = Button Binding
|
||||
Button Binding = Knapp-bindning
|
||||
Button Opacity = Knappgenomskinlighet
|
||||
Button style = Knappstil
|
||||
Calibrate Analog Stick = Kalibrera analog styrspak
|
||||
Calibrate D-Pad = Kalibrera D-pad
|
||||
Calibrated = Calibrated
|
||||
Calibrated = Kalibrerad
|
||||
Calibration = Kalibrering
|
||||
Circular stick input = Circular stick input
|
||||
Classic = Klassisk
|
||||
@@ -49,13 +49,13 @@ Customize tilt = Anpassa tilt...
|
||||
D-PAD = D-Pad
|
||||
Deadzone radius = Deadzone-radie
|
||||
Disable D-Pad diagonals (4-way touch) = Slå av D-Pad-diagonaler (4-vägs touch)
|
||||
Disable diagonal input = Disable diagonal input
|
||||
Disable diagonal input = Blockera diagonal input
|
||||
Double tap = Double tap
|
||||
Enable gesture control = Enable gesture control
|
||||
Enable gesture control = Get-kontroll
|
||||
Enable standard shortcut keys = Enable standard shortcut keys
|
||||
Gesture = Gesture
|
||||
Gesture mapping = Gesture mapping
|
||||
Glowing borders = Glowing borders
|
||||
Gesture mapping = Gest-mappning
|
||||
Glowing borders = Lysande kanter
|
||||
HapticFeedback = Haptic feedback (vibration)
|
||||
Hide touch analog stick background circle = Hide touch analog stick background circle
|
||||
Icon = Icon
|
||||
@@ -83,7 +83,7 @@ Portrait Reversed = Porträtt omvänt
|
||||
PSP Action Buttons = PSP action-knappar
|
||||
Raw input = Raw input
|
||||
Repeat mode = Repeat mode
|
||||
Reset to defaults = Reset to defaults
|
||||
Reset to defaults = Återställ till standardvärden
|
||||
Screen aligned to ground = Screen aligned to ground
|
||||
Screen at right angle to ground = Screen at right angle to ground
|
||||
Screen Rotation = Skärmrotation
|
||||
@@ -93,8 +93,8 @@ Sensitivity = Känslighet
|
||||
Shape = Shape
|
||||
Show Touch Pause Menu Button = Show Touch Pause Menu Button
|
||||
Swipe = Swipe
|
||||
Swipe sensitivity = Swipe sensitivity
|
||||
Swipe smoothing = Swipe smoothing
|
||||
Swipe sensitivity = Swipe-känslighet
|
||||
Swipe smoothing = Swipe-utjämning
|
||||
Thin borders = Tunna kanter
|
||||
Tilt Base Radius = Tilt base radius
|
||||
Tilt Input Type = Lutningstyp
|
||||
@@ -139,7 +139,7 @@ Disassembly = Disassemblera
|
||||
Discord = Discord
|
||||
Display Layout && Effects = Skärmlayout && effekter...
|
||||
Display Rotation = Skärmrotation
|
||||
Dump Next Frame to Log = Dump Next Frame to Log
|
||||
Dump Next Frame to Log = Dumpa nästa frame till loggen
|
||||
Emulation = Emulering
|
||||
Enable Cheats = Fusk
|
||||
Enable Sound = Ljud
|
||||
@@ -147,7 +147,7 @@ Exit = Avsluta
|
||||
Extract File... = Extrahera fil...
|
||||
File = Arkiv
|
||||
Frame Skipping = Frameskipping
|
||||
Frame Skipping Type = Frame skipping type
|
||||
Frame Skipping Type = Typ av frame-skippning
|
||||
Fullscreen = Fullskärm
|
||||
Game Settings = Inställningar
|
||||
GE Debugger... = GE Debugger...
|
||||
@@ -172,9 +172,9 @@ Log Console = Loggkonsol
|
||||
Memory View... = Minnesvy...
|
||||
More Settings... = Mer inställningar...
|
||||
Nearest = Nearest
|
||||
Skip Buffer Effects = &Skip buffer effects
|
||||
Skip Buffer Effects = &Skippa buffereffekter
|
||||
Off = Off
|
||||
Open Chat = Open Chat
|
||||
Open Chat = Öppna chat
|
||||
Open Directory... = Öppna mapp...
|
||||
Open from MS:/PSP/GAME... = Öppna från MS:/PSP/GAME...
|
||||
Open Memory Stick = Öppna Memory Stick
|
||||
@@ -184,7 +184,6 @@ Pause = Paus
|
||||
Pause When Not Focused = Pausa vid tappat fokus
|
||||
Portrait = Porträtt
|
||||
Portrait reversed = Porträtt omvänt
|
||||
Postprocessing Shader = Postprocessing Shader
|
||||
PPSSPP Forums = PPSSPP-forum
|
||||
Record = &Record
|
||||
Record Audio = Record &audio
|
||||
@@ -229,11 +228,11 @@ Create/Open textures.ini file for current game = Create/Open textures.ini file f
|
||||
Current = Aktuellt
|
||||
Dev Tools = Development tools
|
||||
DevMenu = DevMenu
|
||||
Disabled JIT functionality = Disabled JIT functionality
|
||||
Draw Frametimes Graph = Draw frametimes graph
|
||||
Disabled JIT functionality = Avstängd JIT-funktionalitet
|
||||
Draw Frametimes Graph = Rita upp graf över frame-tider
|
||||
Dump Decrypted Eboot = Dumpa decrypterad EBOOT.BIN när spelet startar
|
||||
Dump next frame to log = Dumpa nästa frame till log
|
||||
Enable driver bug workarounds = Enable driver bug workarounds
|
||||
Enable driver bug workarounds = Tillåt workarounds för drivrutins-buggar
|
||||
Enable Logging = Debugloggning
|
||||
Enter address = Address
|
||||
FPU = FPU
|
||||
@@ -269,15 +268,15 @@ Texture ini file created = Texture ini file created
|
||||
Texture Replacement = Ersätt texturer
|
||||
Toggle Audio Debug = Toggla audio debug
|
||||
Toggle Freeze = Toggla freeze
|
||||
Touchscreen Test = Touchscreen test
|
||||
Touchscreen Test = Touchskärm-test
|
||||
VFPU = VFPU
|
||||
|
||||
[Dialog]
|
||||
* PSP res = * PSP res
|
||||
Active = Active
|
||||
Active = Aktiv
|
||||
Back = Tillbaka
|
||||
Cancel = Avbryt
|
||||
Center = Center
|
||||
Center = Centrera
|
||||
ChangingGPUBackends = PPSSPP måste starta om för att byta GPU-backend. Vill du starta om nu?
|
||||
ChangingInflightFrames = Changing graphics command buffering requires PPSSPP to restart. Restart now?
|
||||
Channel: = Channel:
|
||||
@@ -285,12 +284,12 @@ Choose PPSSPP save folder = Välj folder att spara i
|
||||
Confirm Overwrite = Vill du skriva över datan?
|
||||
Confirm Save = Vill du spara denna data?
|
||||
ConfirmLoad = Ladda denna data?
|
||||
ConnectingAP = Connecting to the access point.\nPlease wait...
|
||||
ConnectingPleaseWait = Connecting.\nPlease wait...
|
||||
ConnectionName = Connection name
|
||||
Corrupted Data = Corrupted data
|
||||
Delete = Ta bort
|
||||
Delete all = Ta bort allt
|
||||
ConnectingAP = Kopplar upp till acceesspunkten.\nVänta...
|
||||
ConnectingPleaseWait = Kopplar upp.\nVänta...
|
||||
ConnectionName = Uppkopplingsnamn
|
||||
Corrupted Data = Korrupt data
|
||||
Delete = Radera
|
||||
Delete all = Radera allt
|
||||
Delete completed = Borttaget.
|
||||
DeleteConfirm = All sparad data tas bort.\nÄr du säker på att du vill göra detta?
|
||||
DeleteConfirmAll = Vill du verkligen ta bort all\nsparad data för spelet?
|
||||
@@ -307,20 +306,23 @@ Filter = Filter
|
||||
Finish = Färdig
|
||||
GE Frame Dumps = GE Frame Dumps
|
||||
Grid = Grid
|
||||
Inactive = Inactive
|
||||
InternalError = An internal error has occurred.
|
||||
Inactive = Inaktiv
|
||||
InternalError = Ett internt fel har upptäckts.
|
||||
Load = Ladda
|
||||
Load completed = Laddat.
|
||||
Loading = Laddar\nVänta...
|
||||
LoadingFailed = Kunde inte ladda data.
|
||||
Move = Flytta
|
||||
Move Down = Flytta ner
|
||||
Move Up = Flytta upp
|
||||
Network Connection = Nätverksuppkoppling
|
||||
NEW DATA = NY DATA
|
||||
No = Nej
|
||||
ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Old savedata detected
|
||||
Options = Options
|
||||
Old savedata detected = Gammal savedata upptäckt
|
||||
Options = Inställningar
|
||||
Remove = Ta bort
|
||||
Reset = Återställ
|
||||
Resize = Ändra storlek
|
||||
Retry = Försök igen
|
||||
@@ -328,7 +330,7 @@ Save = Spara
|
||||
Save completed = Sparat.
|
||||
Saving = Sparar\nVänta...
|
||||
SavingFailed = Kunde inte spara data.
|
||||
Search = Search
|
||||
Search = Sök
|
||||
Select = Välj
|
||||
Shift = Skift
|
||||
Skip = Skip
|
||||
@@ -336,20 +338,20 @@ Snap = Snap
|
||||
Space = Mellanslag
|
||||
SSID = SSID
|
||||
Submit = Skicka
|
||||
Supported = Supported
|
||||
Supported = Stödd
|
||||
There is no data = Det finns ingen data.
|
||||
Toggle All = Vänd alla
|
||||
Toggle List = Toggle list
|
||||
Unsupported = Unsupported
|
||||
Unsupported = Stöds ej
|
||||
When you save, it will load on a PSP, but not an older PPSSPP = When you save, it will load on a PSP, but not an older PPSSPP
|
||||
When you save, it will not work on outdated PSP Firmware anymore = When you save, it will not work on outdated PSP firmware anymore
|
||||
Yes = Ja
|
||||
Zoom = Zoom
|
||||
Zoom = Zooma
|
||||
|
||||
[Error]
|
||||
7z file detected (Require 7-Zip) = file is compressed (7z).\nPlease decompress first (try 7-Zip or WinRAR).
|
||||
A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc.
|
||||
Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot.
|
||||
A PSP game couldn't be found on the disc. = Kunde inte hitta ett PSP-spel på skivavbildningen.
|
||||
Cannot boot ELF located outside mountRoot. = Kan inte boota en ELF som ligger utanför mountRoot.
|
||||
Could not save screenshot file = Misslyckades spara skärmdump.
|
||||
D3D9or11 = Direct3D 9? (or "no" for Direct3D 11)
|
||||
D3D11CompilerMissing = D3DCompiler_47.dll saknas. Installera, eller tryck Ja för att försöka igen med Direct3D 9 istället.
|
||||
@@ -372,7 +374,7 @@ GenericOpenGLError = Failed initializing graphics. Try upgrading your graphics d
|
||||
GenericVulkanError = Failed initializing graphics. Try upgrading your graphics drivers.\n\nWould you like to try switching to OpenGL?\n\nError message:
|
||||
InsufficientOpenGLDriver = Otillräckligt OpenGL-stöd detekterat!\n\nYour GPU reports that it does not support OpenGL 2.0. Would you like to try using DirectX instead?\n\nDirectX is currently compatible with less games, but on your GPU it may be the only choice.\n\nVisit the forums at https://forums.ppsspp.org for more information.\n\n
|
||||
Just a directory. = Endast en katalog.
|
||||
Missing key = Missing key
|
||||
Missing key = Nyckel saknas
|
||||
MsgErrorCode = Error code:
|
||||
MsgErrorSavedataDataBroken = Save data was corrupt.
|
||||
MsgErrorSavedataMSFull = Memory Stick full. Check your storage space.
|
||||
@@ -405,7 +407,7 @@ ZIP file detected (Require WINRAR) = file is compressed (ZIP).\nPlease decompres
|
||||
|
||||
[Game]
|
||||
Asia = Asia
|
||||
Calculate CRC = Calculate CRC
|
||||
Calculate CRC = Räkna ut CRC
|
||||
ConfirmDelete = Ta bort
|
||||
Create Game Config = Skapa spelconfig
|
||||
Create Shortcut = Skapa genväg
|
||||
@@ -490,11 +492,11 @@ Display Resolution (HW scaler) = Skärmupplösning (HW scaler)
|
||||
Enable Cardboard VR = Enable Cardboard VR
|
||||
FPS = FPS
|
||||
Frame Rate Control = Framerate-kontroll
|
||||
Frame Skipping = Frameskipping
|
||||
Frame Skipping = Frame-skipping
|
||||
Frame Skipping Type = Frame skipping type
|
||||
FullScreen = Fullskärm
|
||||
Geometry shader culling = Geoshader-klippning
|
||||
GPUReadbackRequired = Warning: This game requires "Skip GPU Readbacks" to be set to Off.
|
||||
GPUReadbackRequired = Varning: Detta spel kräver att 'Skippa dataläsningar från GPU:n' är avstängt.
|
||||
Hack Settings = Hack-inställningar (kan orsaka problem)
|
||||
Hardware Tessellation = Hårdvarutessellering
|
||||
Hardware Transform = Hårdvarutransform
|
||||
@@ -518,7 +520,7 @@ Mode = Mode
|
||||
Must Restart = Starta om PPSSPP för att ändringen ska få effekt.
|
||||
Native device resolution = Native device resolution
|
||||
Nearest = Närmast
|
||||
No buffer = No buffer
|
||||
No buffer = Ingen buffer
|
||||
Skip Buffer Effects = Skippa buffereffekter (snabbare, risk för fel)
|
||||
None = Inget
|
||||
Number of Frames = Antal frames
|
||||
@@ -528,14 +530,13 @@ Overlay Information = Overlay-information
|
||||
Partial Stretch = Partial stretch
|
||||
Percent of FPS = Procent av FPS
|
||||
Performance = Prestanda
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing-Shader
|
||||
Postprocessing shaders = Postprocessing-Shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
Rendering Mode = Renderingsläge
|
||||
Rendering Resolution = Renderingsupplösning
|
||||
RenderingMode NonBuffered Tip = Faster, but nothing may draw in some games
|
||||
RenderingMode NonBuffered Tip = Snabbare, men grafik kan gå sönder
|
||||
Rotation = Rotation
|
||||
Safe = Safe
|
||||
Screen Scaling Filter = Skärmskalningsfilter
|
||||
@@ -549,7 +550,7 @@ Speed = Hastighet
|
||||
Speed Hacks = Speed-hacks (kan orsaka renderingsproblem)
|
||||
Stereo display shader = Stereo display shader
|
||||
Stereo rendering = Stereo-rendering
|
||||
Stretch = Stretch
|
||||
Stretch = Sträck ut
|
||||
Texture Filter = Texturfilter
|
||||
Texture Filtering = Texturfiltrering
|
||||
Texture Scaling = Texturskalning
|
||||
@@ -622,7 +623,7 @@ Audio = Ljud
|
||||
Controls = Kontroll
|
||||
Graphics = Grafik
|
||||
Networking = Nätverk
|
||||
Search = Search
|
||||
Search = Sök
|
||||
System = System
|
||||
Tools = Verktyg
|
||||
|
||||
@@ -994,15 +995,15 @@ LoadStateWrongVersion = Misslyckades ladda state: Savestate is for an older vers
|
||||
norewind = No rewind save states available.
|
||||
Playing = Playing
|
||||
PressESC = Tryck ESC för att öppna pausemenyn.
|
||||
replaceTextures_false = Textures no longer are being replaced.
|
||||
replaceTextures_true = Texture replacement is enabled.
|
||||
replaceTextures_false = Texturer ersätts inte längre.
|
||||
replaceTextures_true = Textur-ersättning är igång.
|
||||
Save State Failed = Misslyckades spara state!
|
||||
Saved State = State sparat
|
||||
saveNewTextures_false = Texture saving was disabled.
|
||||
saveNewTextures_true = Textures will now be saved to your storage.
|
||||
SpeedCustom2 = Speed: alternate 2
|
||||
SpeedCustom2 = Speed: alternativ 2
|
||||
standard = Hastighet: standard
|
||||
State load undone = State load undone
|
||||
State load undone = State load ogjort
|
||||
Untitled PSP game = Untitled PSP game
|
||||
|
||||
[Search]
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
@@ -1096,7 +1098,7 @@ Color Saturation = Färgmättnad
|
||||
Color Tint = Färgförskjutning
|
||||
Error: load undo state is from a different game = Error: load undo state is from a different game
|
||||
Failed to load state for load undo. Error in the file system. = Failed to load state for load undo. Error in the file system.
|
||||
Floating symbols = Floating symbols
|
||||
Floating symbols = Flytande symboler
|
||||
Game crashed = Game crashed
|
||||
Memory Stick folder = Memory Stick-mapp
|
||||
Memory Stick size = Memory Stick-storlek
|
||||
@@ -1139,7 +1141,7 @@ IO timing method = IO-timingsmetod
|
||||
IR Interpreter = IR interpreter
|
||||
Language = Språk
|
||||
Memory Stick Folder = Memory Stick-mapp
|
||||
Memory Stick inserted = Memory Stick insatt
|
||||
Memory Stick inserted = Memory Stick isatt
|
||||
MHz, 0:default = MHz, 0 = standard
|
||||
MMDDYYYY = MMDDYYYY
|
||||
Moving background = Rörlig bakgrund
|
||||
@@ -1180,7 +1182,7 @@ Sustained performance mode = Sustained performance mode
|
||||
Theme = Tema
|
||||
Time Format = Tidsformat
|
||||
UI = Användargränssnitt
|
||||
UI background animation = UI background animation
|
||||
UI background animation = Bakgrundsanimering
|
||||
UI Sound = Ljud i användargränssnittet
|
||||
undo %c = backup %c
|
||||
USB = USB
|
||||
@@ -1192,7 +1194,7 @@ Use X to confirm = Använd X för att bekräfta
|
||||
VersionCheck = Kolla efter nya versioner av PPSSPP
|
||||
WARNING: Android battery save mode is on = WARNING: Android battery save mode is On
|
||||
WARNING: Battery save mode is on = WARNING: Battery save mode is on
|
||||
Waves = Waves
|
||||
Waves = Vågor
|
||||
YYYYMMDD = YYYYMMDD
|
||||
|
||||
[TextureShaders]
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = Pause
|
||||
Pause When Not Focused = Ihinto kapag hindi naka pokus
|
||||
Portrait = Patayo
|
||||
Portrait reversed = Pabaliktad na patayo
|
||||
Postprocessing Shader = Postprocessing Shader
|
||||
PPSSPP Forums = PPSSPP Forums
|
||||
Record = Record
|
||||
Record Audio = Record audio
|
||||
@@ -314,6 +313,8 @@ Load completed = Kumpletong na-i load.
|
||||
Loading = Sandali lamang...
|
||||
LoadingFailed = Loading ng datos ay pumalya.
|
||||
Move = Galawin
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Network Connection
|
||||
NEW DATA = BAGONG DATOS
|
||||
No = Hindi
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = Sige
|
||||
Old savedata detected = Nahanap ang lumang savedata
|
||||
Options = Options
|
||||
Remove = Remove
|
||||
Reset = Ibalik
|
||||
Resize = Resize
|
||||
Retry = Ulitin
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Overlay na impormasyon
|
||||
Partial Stretch = Parsiyal na unatin
|
||||
Percent of FPS = Porsiyento ng FPS
|
||||
Performance = Performance
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Postprocessing shader
|
||||
Postprocessing shaders = Postprocessing shaders
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Name
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Device info
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = หยุดชั่วคราว
|
||||
Pause When Not Focused = หยุดชั่วคราวเมื่อไม่ได้เล่น
|
||||
Portrait = แนวตั้ง
|
||||
Portrait reversed = แนวตั้งกลับด้าน
|
||||
Postprocessing Shader = กระบวนการทำงานปรับเฉดแสงสี
|
||||
PPSSPP Forums = เว็บ PPSSPP Forums
|
||||
Record = การอัดบันทึก
|
||||
Record Audio = อัดบันทึกเสียง
|
||||
@@ -314,6 +313,8 @@ Load completed = โหลดข้อมูลสำเร็จ
|
||||
Loading = กำลังโหลด\nโปรดรอ...
|
||||
LoadingFailed = ไม่สามารถโหลดข้อมูลนี้ได้
|
||||
Move = ย้าย
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = การเชื่อมต่อเครือข่าย
|
||||
NEW DATA = ข้อมูลใหม่
|
||||
No = ไม่ใช่
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = กำลังรับไอพี\nโปรดรอสัก
|
||||
OK = ตกลง
|
||||
Old savedata detected = ตรวจพบข้อมูลเซฟเก่า
|
||||
Options = ตัวเลือก
|
||||
Remove = Remove
|
||||
Reset = ตั้งค่าใหม่
|
||||
Resize = ขนาด
|
||||
Retry = ลองใหม่
|
||||
@@ -528,8 +530,7 @@ Overlay Information = การแสดงข้อมูลซ้อนทั
|
||||
Partial Stretch = แนวตั้งดึงเต็มจอ
|
||||
Percent of FPS = อิงจากเปอร์เซ็นต์เฟรมต่อวิ
|
||||
Performance = ประสิทธิภาพ
|
||||
Postprocessing effect = กระบวนการทำงานปรับเอฟเฟ็คท์
|
||||
Postprocessing Shader = กระบวนการทำงานปรับเฉดแสงสี
|
||||
Postprocessing shaders = กระบวนการทำงานปรับเฉดแสงสี
|
||||
Recreate Activity = สร้างกิจกรรมใหม่
|
||||
Render duplicate frames to 60hz = แสดงผลเฟรมซ้ำให้ถึง 60 เฮิร์ตซ
|
||||
RenderDuplicateFrames Tip = ช่วยให้ภาพดูลื่นตาขึ้น ในเกมที่ใช้เฟรมเรทต่ำ
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = ชื่อหน่วยประมวลผลหลัก
|
||||
D3DCompiler Version = เวอร์ชั่นตัวคอมไพล์ของ D3D
|
||||
Debug = แก้ไขบั๊ก
|
||||
Debugger Present = ตัวช่วยแก้ไขบั๊ก
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = ข้อมูลอุปกรณ์
|
||||
Directories = เส้นทางเก็บข้อมูล
|
||||
Display Color Formats = รูปแบบสีของหน้าจอแสดงผล
|
||||
|
||||
@@ -186,7 +186,6 @@ Pause = PPSSPP Menüsü
|
||||
Pause When Not Focused = &Başka programa geçildiğinde duraklat
|
||||
Portrait = Dikey
|
||||
Portrait reversed = Ters Dikey
|
||||
Postprocessing Shader = Postprocessin&g Shader
|
||||
PPSSPP Forums = PPSSPP Forumları
|
||||
Record = Kayıt
|
||||
Record Audio = Ses Kaydet
|
||||
@@ -316,6 +315,8 @@ Load completed = Yükleme tamamlandı.
|
||||
Loading = Yükleniyor\nLütfen Bekleyin...
|
||||
LoadingFailed = Veri yüklenemedi.
|
||||
Move = Taşı
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Ağ Bağlantısı
|
||||
NEW DATA = YENİ VERİ
|
||||
No = Hayır
|
||||
@@ -323,6 +324,7 @@ ObtainingIP = IP adresi alınıyor.\nLütfen bekleyin...
|
||||
OK = Tamam
|
||||
Old savedata detected = Eski kayıt bulundu.
|
||||
Options = Ayarlar
|
||||
Remove = Remove
|
||||
Reset = Sıfırla
|
||||
Resize = Yeniden Boyutlandır
|
||||
Retry = Yeniden Dene
|
||||
@@ -530,8 +532,7 @@ Overlay Information = Ek Bilgi
|
||||
Partial Stretch = Tam ekran (kısmi sünme)
|
||||
Percent of FPS = FPS yüzdesi
|
||||
Performance = Performans
|
||||
Postprocessing effect = Postprocessing efektleri
|
||||
Postprocessing Shader = Postprocessing gölgelendiricisi
|
||||
Postprocessing shaders = Postprocessing gölgelendiricisi
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Yinelenen kareleri 60Hz'de işleyin
|
||||
RenderDuplicateFrames Tip = Daha düşük kare hızlarında çalışan oyunlarda kare hızını düzeltebilir
|
||||
@@ -1043,6 +1044,7 @@ CPU Name = Ad
|
||||
D3DCompiler Version = D3DCompiler sürümü
|
||||
Debug = Hata Ayıklama
|
||||
Debugger Present = Hata ayıklayıcı var
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Cihaz bilgisi
|
||||
Directories = Dizinler
|
||||
Display Color Formats = Renk Biçimlerini Görüntüle
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = &Пауза
|
||||
Pause When Not Focused = &Пауза коли вікно не в фокусі
|
||||
Portrait = Портретне
|
||||
Portrait reversed = Портретна (перевернуто)
|
||||
Postprocessing Shader = &Подальша обробка (шейдер)
|
||||
PPSSPP Forums = &Форум PPSSPP
|
||||
Record = &Запис
|
||||
Record Audio = Запис &аудіо
|
||||
@@ -314,6 +313,8 @@ Load completed = Завантаження завершене
|
||||
Loading = Завантаження\nБудь ласка, зачекайте...
|
||||
LoadingFailed = Не вдалося завантажити дані.
|
||||
Move = Положення
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Підключення до мережі
|
||||
NEW DATA = Нове збереження
|
||||
No = Ні
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Виявлено старий формат збережень
|
||||
Options = Опції:
|
||||
Remove = Remove
|
||||
Reset = Скинути
|
||||
Resize = Розмір
|
||||
Retry = Повторити
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Інформація про накладення
|
||||
Partial Stretch = Часткове розтягнення
|
||||
Percent of FPS = Відсоток FPS
|
||||
Performance = Продуктивність
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Шейдери
|
||||
Postprocessing shaders = &Подальша обробка (шейдер)
|
||||
Recreate Activity = Відтворити діяльність
|
||||
Render duplicate frames to 60hz = Відображення повторюваних кадрів до 60 Гц
|
||||
RenderDuplicateFrames Tip = Можна зробити більш плавний кадр в іграх, які працюють у нижчих кадрах
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Назва
|
||||
D3DCompiler Version = Версія D3DCompiler
|
||||
Debug = Налагодження
|
||||
Debugger Present = Присутній налагоджувач
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Інформація про пристрій
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = Tạm dừng
|
||||
Pause When Not Focused = Dừng trò chơi khi "ko tập trung"
|
||||
Portrait = Chiều dọc
|
||||
Portrait reversed = Chiều dọc đảo ngược
|
||||
Postprocessing Shader = Xử lý hậu đổ bóng
|
||||
PPSSPP Forums = Diễn đàn PPSSPP
|
||||
Record = Ghi lại
|
||||
Record Audio = Ghi âm thanh
|
||||
@@ -314,6 +313,8 @@ Load completed = Đã load xong.
|
||||
Loading = Đang load\nXin đợi...
|
||||
LoadingFailed = Không thể load dữ liệu này.
|
||||
Move = Di chuyển
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = Kết nối mạng
|
||||
NEW DATA = DỮ LIỆU MỚI
|
||||
No = Không
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait...
|
||||
OK = OK
|
||||
Old savedata detected = Phát hiện dữ liệu cũ
|
||||
Options = Tùy chọn
|
||||
Remove = Remove
|
||||
Reset = Mặc định
|
||||
Resize = Thay đổi kích thước
|
||||
Retry = Thử lại
|
||||
@@ -528,8 +530,7 @@ Overlay Information = Hiển thị thông tin trên màn hình
|
||||
Partial Stretch = Từng phần dãn ra
|
||||
Percent of FPS = Percent of FPS
|
||||
Performance = Hiệu năng
|
||||
Postprocessing effect = Postprocessing effects
|
||||
Postprocessing Shader = Xử lý hậu đổ bóng
|
||||
Postprocessing shaders = Xử lý hậu đổ bóng
|
||||
Recreate Activity = Recreate activity
|
||||
Render duplicate frames to 60hz = Render duplicate frames to 60 Hz
|
||||
RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates
|
||||
@@ -1042,6 +1043,7 @@ CPU Name = Tên
|
||||
D3DCompiler Version = D3DCompiler version
|
||||
Debug = Debug
|
||||
Debugger Present = Debugger present
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = Thông tin thiết bị
|
||||
Directories = Directories
|
||||
Display Color Formats = Display Color Formats
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = 暂停 (&P)
|
||||
Pause When Not Focused = 后台运行时自动暂停 (&P)
|
||||
Portrait = 纵向
|
||||
Portrait reversed = 纵向反转
|
||||
Postprocessing Shader = 后处理着色器 (&g)
|
||||
PPSSPP Forums = PPSSPP官方论坛 (&F)
|
||||
Record = 录制 (&R)
|
||||
Record Audio = 录制音频 (&A)
|
||||
@@ -314,6 +313,8 @@ Load completed = 已载入。
|
||||
Loading = 载入中\n请稍候...
|
||||
LoadingFailed = 无法载入存档。
|
||||
Move = 移动
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = 网络连接
|
||||
NEW DATA = 新建存档
|
||||
No = 否
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = 获取IP地址.\n请稍候...
|
||||
OK = 确定
|
||||
Old savedata detected = 检测到旧版本的存档数据
|
||||
Options = 选项
|
||||
Remove = Remove
|
||||
Reset = 重置
|
||||
Resize = 调整大小
|
||||
Retry = 重试
|
||||
@@ -528,8 +530,7 @@ Overlay Information = 叠加信息
|
||||
Partial Stretch = 部分拉伸
|
||||
Percent of FPS = 帧率的百分比
|
||||
Performance = 性能
|
||||
Postprocessing effect = 滤镜效果
|
||||
Postprocessing Shader = 后处理着色器
|
||||
Postprocessing shaders = 后处理着色器
|
||||
Recreate Activity = 重建进程
|
||||
Render duplicate frames to 60hz = 渲染重复帧至60Hz
|
||||
RenderDuplicateFrames Tip = 在较低帧率的游戏中可以使帧速率更平滑
|
||||
@@ -1036,6 +1037,7 @@ CPU Name = CPU 名称
|
||||
D3DCompiler Version = D3DCompiler版本
|
||||
Debug = 调试
|
||||
Debugger Present = 调试器已连接
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = 设备信息
|
||||
Directories = 路径
|
||||
Display Color Formats = 显示颜色格式
|
||||
|
||||
@@ -184,7 +184,6 @@ Pause = 暫停 (&P)
|
||||
Pause When Not Focused = 未聚焦時暫停 (&P)
|
||||
Portrait = 直向
|
||||
Portrait reversed = 直向反轉
|
||||
Postprocessing Shader = 後處理著色器 (&G)
|
||||
PPSSPP Forums = PPSSPP 論壇 (&F)
|
||||
Record = 錄製 (&R)
|
||||
Record Audio = 錄製音訊 (&A)
|
||||
@@ -314,6 +313,8 @@ Load completed = 載入完成
|
||||
Loading = 正在載入\n請稍候…
|
||||
LoadingFailed = 無法載入資料
|
||||
Move = 移動
|
||||
Move Down = Move Down
|
||||
Move Up = Move Up
|
||||
Network Connection = 網路連線
|
||||
NEW DATA = 新存檔
|
||||
No = 否
|
||||
@@ -321,6 +322,7 @@ ObtainingIP = 正在取得 IP 位址\n請稍候…
|
||||
OK = 確定
|
||||
Old savedata detected = 偵測到舊版存檔資料
|
||||
Options = 選項
|
||||
Remove = Remove
|
||||
Reset = 重設
|
||||
Resize = 調整大小
|
||||
Retry = 重試
|
||||
@@ -528,8 +530,7 @@ Overlay Information = 覆疊資訊
|
||||
Partial Stretch = 部分延展
|
||||
Percent of FPS = FPS 百分比
|
||||
Performance = 效能
|
||||
Postprocessing effect = 後處理效果
|
||||
Postprocessing Shader = 後處理著色器
|
||||
Postprocessing shaders = 後處理著色器
|
||||
Recreate Activity = 重新建立活動
|
||||
Render duplicate frames to 60hz = 轉譯重複影格至 60 Hz
|
||||
RenderDuplicateFrames Tip = 可以使以較低影格速率執行的遊戲更加順暢
|
||||
@@ -1035,6 +1036,7 @@ CPU Name = CPU 名稱
|
||||
D3DCompiler Version = D3DCompiler 版本
|
||||
Debug = 偵錯
|
||||
Debugger Present = 偵錯工具呈現
|
||||
Depth buffer format = Depth buffer format
|
||||
Device Info = 裝置資訊
|
||||
Directories = 目錄
|
||||
Display Information = 顯示器資訊
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+8
-8
@@ -231,7 +231,7 @@
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>true</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
@@ -250,7 +250,7 @@
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
@@ -267,7 +267,7 @@
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
@@ -284,7 +284,7 @@
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
@@ -304,7 +304,7 @@
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
@@ -330,7 +330,7 @@
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
@@ -356,7 +356,7 @@
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
@@ -382,7 +382,7 @@
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<EnablePREfast>false</EnablePREfast>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
|
||||
Binary file not shown.
+2306
-44
File diff suppressed because it is too large.
Load diff
+172
-20
@@ -2,7 +2,7 @@
|
||||
#define OPENXR_PLATFORM_H_ 1
|
||||
|
||||
/*
|
||||
** Copyright (c) 2017-2021, The Khronos Group Inc.
|
||||
** Copyright (c) 2017-2022, The Khronos Group Inc.
|
||||
**
|
||||
** SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*/
|
||||
@@ -35,11 +35,13 @@ typedef enum XrAndroidThreadTypeKHR {
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrSetAndroidApplicationThreadKHR)(XrSession session, XrAndroidThreadTypeKHR threadType, uint32_t threadId);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrSetAndroidApplicationThreadKHR(
|
||||
XrSession session,
|
||||
XrAndroidThreadTypeKHR threadType,
|
||||
uint32_t threadId);
|
||||
#endif
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_PLATFORM_ANDROID */
|
||||
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
@@ -50,12 +52,14 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSetAndroidApplicationThreadKHR(
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrCreateSwapchainAndroidSurfaceKHR)(XrSession session, const XrSwapchainCreateInfo* info, XrSwapchain* swapchain, jobject* surface);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchainAndroidSurfaceKHR(
|
||||
XrSession session,
|
||||
const XrSwapchainCreateInfo* info,
|
||||
XrSwapchain* swapchain,
|
||||
jobject* surface);
|
||||
#endif
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_PLATFORM_ANDROID */
|
||||
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
@@ -63,6 +67,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchainAndroidSurfaceKHR(
|
||||
#define XR_KHR_android_create_instance 1
|
||||
#define XR_KHR_android_create_instance_SPEC_VERSION 3
|
||||
#define XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME "XR_KHR_android_create_instance"
|
||||
// XrInstanceCreateInfoAndroidKHR extends XrInstanceCreateInfo
|
||||
typedef struct XrInstanceCreateInfoAndroidKHR {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -75,7 +80,7 @@ typedef struct XrInstanceCreateInfoAndroidKHR {
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
#define XR_KHR_vulkan_swapchain_format_list 1
|
||||
#define XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION 3
|
||||
#define XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION 4
|
||||
#define XR_KHR_VULKAN_SWAPCHAIN_FORMAT_LIST_EXTENSION_NAME "XR_KHR_vulkan_swapchain_format_list"
|
||||
typedef struct XrVulkanSwapchainFormatListCreateInfoKHR {
|
||||
XrStructureType type;
|
||||
@@ -89,9 +94,10 @@ typedef struct XrVulkanSwapchainFormatListCreateInfoKHR {
|
||||
#ifdef XR_USE_GRAPHICS_API_OPENGL
|
||||
|
||||
#define XR_KHR_opengl_enable 1
|
||||
#define XR_KHR_opengl_enable_SPEC_VERSION 9
|
||||
#define XR_KHR_opengl_enable_SPEC_VERSION 10
|
||||
#define XR_KHR_OPENGL_ENABLE_EXTENSION_NAME "XR_KHR_opengl_enable"
|
||||
#ifdef XR_USE_PLATFORM_WIN32
|
||||
// XrGraphicsBindingOpenGLWin32KHR extends XrSessionCreateInfo
|
||||
typedef struct XrGraphicsBindingOpenGLWin32KHR {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -101,6 +107,7 @@ typedef struct XrGraphicsBindingOpenGLWin32KHR {
|
||||
#endif // XR_USE_PLATFORM_WIN32
|
||||
|
||||
#ifdef XR_USE_PLATFORM_XLIB
|
||||
// XrGraphicsBindingOpenGLXlibKHR extends XrSessionCreateInfo
|
||||
typedef struct XrGraphicsBindingOpenGLXlibKHR {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -113,6 +120,7 @@ typedef struct XrGraphicsBindingOpenGLXlibKHR {
|
||||
#endif // XR_USE_PLATFORM_XLIB
|
||||
|
||||
#ifdef XR_USE_PLATFORM_XCB
|
||||
// XrGraphicsBindingOpenGLXcbKHR extends XrSessionCreateInfo
|
||||
typedef struct XrGraphicsBindingOpenGLXcbKHR {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -126,6 +134,7 @@ typedef struct XrGraphicsBindingOpenGLXcbKHR {
|
||||
#endif // XR_USE_PLATFORM_XCB
|
||||
|
||||
#ifdef XR_USE_PLATFORM_WAYLAND
|
||||
// XrGraphicsBindingOpenGLWaylandKHR extends XrSessionCreateInfo
|
||||
typedef struct XrGraphicsBindingOpenGLWaylandKHR {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -149,19 +158,22 @@ typedef struct XrGraphicsRequirementsOpenGLKHR {
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrGetOpenGLGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLKHR* graphicsRequirements);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLGraphicsRequirementsKHR(
|
||||
XrInstance instance,
|
||||
XrSystemId systemId,
|
||||
XrGraphicsRequirementsOpenGLKHR* graphicsRequirements);
|
||||
#endif
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_GRAPHICS_API_OPENGL */
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
|
||||
|
||||
#define XR_KHR_opengl_es_enable 1
|
||||
#define XR_KHR_opengl_es_enable_SPEC_VERSION 7
|
||||
#define XR_KHR_opengl_es_enable_SPEC_VERSION 8
|
||||
#define XR_KHR_OPENGL_ES_ENABLE_EXTENSION_NAME "XR_KHR_opengl_es_enable"
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
// XrGraphicsBindingOpenGLESAndroidKHR extends XrSessionCreateInfo
|
||||
typedef struct XrGraphicsBindingOpenGLESAndroidKHR {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -187,18 +199,21 @@ typedef struct XrGraphicsRequirementsOpenGLESKHR {
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrGetOpenGLESGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLESGraphicsRequirementsKHR(
|
||||
XrInstance instance,
|
||||
XrSystemId systemId,
|
||||
XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements);
|
||||
#endif
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_GRAPHICS_API_OPENGL_ES */
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
#define XR_KHR_vulkan_enable 1
|
||||
#define XR_KHR_vulkan_enable_SPEC_VERSION 7
|
||||
#define XR_KHR_vulkan_enable_SPEC_VERSION 8
|
||||
#define XR_KHR_VULKAN_ENABLE_EXTENSION_NAME "XR_KHR_vulkan_enable"
|
||||
// XrGraphicsBindingVulkanKHR extends XrSessionCreateInfo
|
||||
typedef struct XrGraphicsBindingVulkanKHR {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -228,6 +243,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDeviceKHR)(XrInstance instan
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanInstanceExtensionsKHR(
|
||||
XrInstance instance,
|
||||
XrSystemId systemId,
|
||||
@@ -252,14 +268,16 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirementsKHR(
|
||||
XrInstance instance,
|
||||
XrSystemId systemId,
|
||||
XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
|
||||
#endif
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_GRAPHICS_API_VULKAN */
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_D3D11
|
||||
|
||||
#define XR_KHR_D3D11_enable 1
|
||||
#define XR_KHR_D3D11_enable_SPEC_VERSION 5
|
||||
#define XR_KHR_D3D11_enable_SPEC_VERSION 9
|
||||
#define XR_KHR_D3D11_ENABLE_EXTENSION_NAME "XR_KHR_D3D11_enable"
|
||||
// XrGraphicsBindingD3D11KHR extends XrSessionCreateInfo
|
||||
typedef struct XrGraphicsBindingD3D11KHR {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -282,18 +300,21 @@ typedef struct XrGraphicsRequirementsD3D11KHR {
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrGetD3D11GraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D11KHR* graphicsRequirements);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D11GraphicsRequirementsKHR(
|
||||
XrInstance instance,
|
||||
XrSystemId systemId,
|
||||
XrGraphicsRequirementsD3D11KHR* graphicsRequirements);
|
||||
#endif
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_GRAPHICS_API_D3D11 */
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_D3D12
|
||||
|
||||
#define XR_KHR_D3D12_enable 1
|
||||
#define XR_KHR_D3D12_enable_SPEC_VERSION 7
|
||||
#define XR_KHR_D3D12_enable_SPEC_VERSION 9
|
||||
#define XR_KHR_D3D12_ENABLE_EXTENSION_NAME "XR_KHR_D3D12_enable"
|
||||
// XrGraphicsBindingD3D12KHR extends XrSessionCreateInfo
|
||||
typedef struct XrGraphicsBindingD3D12KHR {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -317,11 +338,13 @@ typedef struct XrGraphicsRequirementsD3D12KHR {
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrGetD3D12GraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D12KHR* graphicsRequirements);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D12GraphicsRequirementsKHR(
|
||||
XrInstance instance,
|
||||
XrSystemId systemId,
|
||||
XrGraphicsRequirementsD3D12KHR* graphicsRequirements);
|
||||
#endif
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_GRAPHICS_API_D3D12 */
|
||||
|
||||
#ifdef XR_USE_PLATFORM_WIN32
|
||||
@@ -333,6 +356,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrConvertWin32PerformanceCounterToTimeKHR)(XrIn
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrConvertTimeToWin32PerformanceCounterKHR)(XrInstance instance, XrTime time, LARGE_INTEGER* performanceCounter);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrConvertWin32PerformanceCounterToTimeKHR(
|
||||
XrInstance instance,
|
||||
const LARGE_INTEGER* performanceCounter,
|
||||
@@ -342,7 +366,8 @@ XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToWin32PerformanceCounterKHR(
|
||||
XrInstance instance,
|
||||
XrTime time,
|
||||
LARGE_INTEGER* performanceCounter);
|
||||
#endif
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_PLATFORM_WIN32 */
|
||||
|
||||
#ifdef XR_USE_TIMESPEC
|
||||
@@ -354,6 +379,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrConvertTimespecTimeToTimeKHR)(XrInstance inst
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrConvertTimeToTimespecTimeKHR)(XrInstance instance, XrTime time, struct timespec* timespecTime);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimespecTimeToTimeKHR(
|
||||
XrInstance instance,
|
||||
const struct timespec* timespecTime,
|
||||
@@ -363,7 +389,8 @@ XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToTimespecTimeKHR(
|
||||
XrInstance instance,
|
||||
XrTime time,
|
||||
struct timespec* timespecTime);
|
||||
#endif
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_TIMESPEC */
|
||||
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
@@ -383,7 +410,7 @@ typedef struct XrLoaderInitInfoAndroidKHR {
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
#define XR_KHR_vulkan_enable2 1
|
||||
#define XR_KHR_vulkan_enable2_SPEC_VERSION 1
|
||||
#define XR_KHR_vulkan_enable2_SPEC_VERSION 2
|
||||
#define XR_KHR_VULKAN_ENABLE2_EXTENSION_NAME "XR_KHR_vulkan_enable2"
|
||||
typedef XrFlags64 XrVulkanInstanceCreateFlagsKHR;
|
||||
|
||||
@@ -427,12 +454,13 @@ typedef XrSwapchainImageVulkanKHR XrSwapchainImageVulkan2KHR;
|
||||
|
||||
typedef XrGraphicsRequirementsVulkanKHR XrGraphicsRequirementsVulkan2KHR;
|
||||
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanInstanceKHR)(XrInstance instance, const XrVulkanInstanceCreateInfoKHR*createInfo, VkInstance* vulkanInstance, VkResult* vulkanResult);
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanInstanceKHR)(XrInstance instance, const XrVulkanInstanceCreateInfoKHR* createInfo, VkInstance* vulkanInstance, VkResult* vulkanResult);
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanDeviceKHR)(XrInstance instance, const XrVulkanDeviceCreateInfoKHR* createInfo, VkDevice* vulkanDevice, VkResult* vulkanResult);
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDevice2KHR)(XrInstance instance, const XrVulkanGraphicsDeviceGetInfoKHR* getInfo, VkPhysicalDevice* vulkanPhysicalDevice);
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsRequirements2KHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrCreateVulkanInstanceKHR(
|
||||
XrInstance instance,
|
||||
const XrVulkanInstanceCreateInfoKHR* createInfo,
|
||||
@@ -454,7 +482,8 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirements2KHR(
|
||||
XrInstance instance,
|
||||
XrSystemId systemId,
|
||||
XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
|
||||
#endif
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_GRAPHICS_API_VULKAN */
|
||||
|
||||
#ifdef XR_USE_PLATFORM_EGL
|
||||
@@ -462,6 +491,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirements2KHR(
|
||||
#define XR_MNDX_egl_enable 1
|
||||
#define XR_MNDX_egl_enable_SPEC_VERSION 1
|
||||
#define XR_MNDX_EGL_ENABLE_EXTENSION_NAME "XR_MNDX_egl_enable"
|
||||
// XrGraphicsBindingEGLMNDX extends XrSessionCreateInfo
|
||||
typedef struct XrGraphicsBindingEGLMNDX {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -482,6 +512,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFromPerceptionAnchorMSFT)(
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrTryGetPerceptionAnchorFromSpatialAnchorMSFT)(XrSession session, XrSpatialAnchorMSFT anchor, IUnknown** perceptionAnchor);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFromPerceptionAnchorMSFT(
|
||||
XrSession session,
|
||||
IUnknown* perceptionAnchor,
|
||||
@@ -491,7 +522,8 @@ XRAPI_ATTR XrResult XRAPI_CALL xrTryGetPerceptionAnchorFromSpatialAnchorMSFT(
|
||||
XrSession session,
|
||||
XrSpatialAnchorMSFT anchor,
|
||||
IUnknown** perceptionAnchor);
|
||||
#endif
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_PLATFORM_WIN32 */
|
||||
|
||||
#ifdef XR_USE_PLATFORM_WIN32
|
||||
@@ -500,6 +532,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrTryGetPerceptionAnchorFromSpatialAnchorMSFT(
|
||||
#define XR_MSFT_holographic_window_attachment_SPEC_VERSION 1
|
||||
#define XR_MSFT_HOLOGRAPHIC_WINDOW_ATTACHMENT_EXTENSION_NAME "XR_MSFT_holographic_window_attachment"
|
||||
#ifdef XR_USE_PLATFORM_WIN32
|
||||
// XrHolographicWindowAttachmentMSFT extends XrSessionCreateInfo
|
||||
typedef struct XrHolographicWindowAttachmentMSFT {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -522,6 +555,7 @@ static const XrAndroidSurfaceSwapchainFlagsFB XR_ANDROID_SURFACE_SWAPCHAIN_SYNCH
|
||||
static const XrAndroidSurfaceSwapchainFlagsFB XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB = 0x00000002;
|
||||
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
// XrAndroidSurfaceSwapchainCreateInfoFB extends XrSwapchainCreateInfo
|
||||
typedef struct XrAndroidSurfaceSwapchainCreateInfoFB {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
@@ -531,6 +565,124 @@ typedef struct XrAndroidSurfaceSwapchainCreateInfoFB {
|
||||
|
||||
#endif /* XR_USE_PLATFORM_ANDROID */
|
||||
|
||||
#ifdef XR_USE_PLATFORM_WIN32
|
||||
|
||||
#define XR_OCULUS_audio_device_guid 1
|
||||
#define XR_OCULUS_audio_device_guid_SPEC_VERSION 1
|
||||
#define XR_OCULUS_AUDIO_DEVICE_GUID_EXTENSION_NAME "XR_OCULUS_audio_device_guid"
|
||||
#define XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS 128
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrGetAudioOutputDeviceGuidOculus)(XrInstance instance, wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrGetAudioInputDeviceGuidOculus)(XrInstance instance, wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrGetAudioOutputDeviceGuidOculus(
|
||||
XrInstance instance,
|
||||
wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
|
||||
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrGetAudioInputDeviceGuidOculus(
|
||||
XrInstance instance,
|
||||
wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_PLATFORM_WIN32 */
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
#define XR_FB_foveation_vulkan 1
|
||||
#define XR_FB_foveation_vulkan_SPEC_VERSION 1
|
||||
#define XR_FB_FOVEATION_VULKAN_EXTENSION_NAME "XR_FB_foveation_vulkan"
|
||||
// XrSwapchainImageFoveationVulkanFB extends XrSwapchainImageVulkanKHR
|
||||
typedef struct XrSwapchainImageFoveationVulkanFB {
|
||||
XrStructureType type;
|
||||
void* XR_MAY_ALIAS next;
|
||||
VkImage image;
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
} XrSwapchainImageFoveationVulkanFB;
|
||||
|
||||
#endif /* XR_USE_GRAPHICS_API_VULKAN */
|
||||
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
|
||||
#define XR_FB_swapchain_update_state_android_surface 1
|
||||
#define XR_FB_swapchain_update_state_android_surface_SPEC_VERSION 1
|
||||
#define XR_FB_SWAPCHAIN_UPDATE_STATE_ANDROID_SURFACE_EXTENSION_NAME "XR_FB_swapchain_update_state_android_surface"
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
typedef struct XrSwapchainStateAndroidSurfaceDimensionsFB {
|
||||
XrStructureType type;
|
||||
void* XR_MAY_ALIAS next;
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
} XrSwapchainStateAndroidSurfaceDimensionsFB;
|
||||
#endif // XR_USE_PLATFORM_ANDROID
|
||||
|
||||
#endif /* XR_USE_PLATFORM_ANDROID */
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
|
||||
|
||||
#define XR_FB_swapchain_update_state_opengl_es 1
|
||||
#define XR_FB_swapchain_update_state_opengl_es_SPEC_VERSION 1
|
||||
#define XR_FB_SWAPCHAIN_UPDATE_STATE_OPENGL_ES_EXTENSION_NAME "XR_FB_swapchain_update_state_opengl_es"
|
||||
#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
|
||||
typedef struct XrSwapchainStateSamplerOpenGLESFB {
|
||||
XrStructureType type;
|
||||
void* XR_MAY_ALIAS next;
|
||||
EGLenum minFilter;
|
||||
EGLenum magFilter;
|
||||
EGLenum wrapModeS;
|
||||
EGLenum wrapModeT;
|
||||
EGLenum swizzleRed;
|
||||
EGLenum swizzleGreen;
|
||||
EGLenum swizzleBlue;
|
||||
EGLenum swizzleAlpha;
|
||||
float maxAnisotropy;
|
||||
XrColor4f borderColor;
|
||||
} XrSwapchainStateSamplerOpenGLESFB;
|
||||
#endif // XR_USE_GRAPHICS_API_OPENGL_ES
|
||||
|
||||
#endif /* XR_USE_GRAPHICS_API_OPENGL_ES */
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
#define XR_FB_swapchain_update_state_vulkan 1
|
||||
#define XR_FB_swapchain_update_state_vulkan_SPEC_VERSION 1
|
||||
#define XR_FB_SWAPCHAIN_UPDATE_STATE_VULKAN_EXTENSION_NAME "XR_FB_swapchain_update_state_vulkan"
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
typedef struct XrSwapchainStateSamplerVulkanFB {
|
||||
XrStructureType type;
|
||||
void* XR_MAY_ALIAS next;
|
||||
VkFilter minFilter;
|
||||
VkFilter magFilter;
|
||||
VkSamplerMipmapMode mipmapMode;
|
||||
VkSamplerAddressMode wrapModeS;
|
||||
VkSamplerAddressMode wrapModeT;
|
||||
VkComponentSwizzle swizzleRed;
|
||||
VkComponentSwizzle swizzleGreen;
|
||||
VkComponentSwizzle swizzleBlue;
|
||||
VkComponentSwizzle swizzleAlpha;
|
||||
float maxAnisotropy;
|
||||
XrColor4f borderColor;
|
||||
} XrSwapchainStateSamplerVulkanFB;
|
||||
#endif // XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
#endif /* XR_USE_GRAPHICS_API_VULKAN */
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
#define XR_META_vulkan_swapchain_create_info 1
|
||||
#define XR_META_vulkan_swapchain_create_info_SPEC_VERSION 1
|
||||
#define XR_META_VULKAN_SWAPCHAIN_CREATE_INFO_EXTENSION_NAME "XR_META_vulkan_swapchain_create_info"
|
||||
// XrVulkanSwapchainCreateInfoMETA extends XrSwapchainCreateInfo
|
||||
typedef struct XrVulkanSwapchainCreateInfoMETA {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
VkImageCreateFlags additionalCreateFlags;
|
||||
VkImageUsageFlags additionalUsageFlags;
|
||||
} XrVulkanSwapchainCreateInfoMETA;
|
||||
|
||||
#endif /* XR_USE_GRAPHICS_API_VULKAN */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
** Copyright (c) 2017-2021, The Khronos Group Inc.
|
||||
** Copyright (c) 2017-2022, The Khronos Group Inc.
|
||||
**
|
||||
** SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*/
|
||||
|
||||
+1414
-13
File diff suppressed because it is too large.
Load diff
@@ -597,6 +597,7 @@ static void check_variables(CoreParameter &coreParam)
|
||||
int iInternalResolution_prev;
|
||||
int iTexScalingType_prev;
|
||||
int iTexScalingLevel_prev;
|
||||
int iMultiSampleLevel_prev;
|
||||
|
||||
var.key = "ppsspp_language";
|
||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
||||
@@ -745,6 +746,21 @@ static void check_variables(CoreParameter &coreParam)
|
||||
g_Config.iInternalResolution = 10;
|
||||
}
|
||||
|
||||
var.key = "ppsspp_mulitsample_level";
|
||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
||||
{
|
||||
iMultiSampleLevel_prev = g_Config.iMultiSampleLevel;
|
||||
|
||||
if (!strcmp(var.value, "Disabled"))
|
||||
g_Config.iMultiSampleLevel = 0;
|
||||
else if (!strcmp(var.value, "x2"))
|
||||
g_Config.iMultiSampleLevel = 1;
|
||||
else if (!strcmp(var.value, "x4"))
|
||||
g_Config.iMultiSampleLevel = 2;
|
||||
else if (!strcmp(var.value, "x8"))
|
||||
g_Config.iMultiSampleLevel = 3;
|
||||
}
|
||||
|
||||
var.key = "ppsspp_skip_buffer_effects";
|
||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
||||
{
|
||||
@@ -1134,6 +1150,14 @@ static void check_variables(CoreParameter &coreParam)
|
||||
}
|
||||
}
|
||||
|
||||
if (g_Config.iMultiSampleLevel != iMultiSampleLevel_prev && PSP_IsInited())
|
||||
{
|
||||
if (gpu)
|
||||
{
|
||||
gpu->NotifyRenderResized();
|
||||
}
|
||||
}
|
||||
|
||||
if (updateAvInfo)
|
||||
{
|
||||
retro_system_av_info avInfo;
|
||||
|
||||
@@ -283,6 +283,22 @@ struct retro_core_option_v2_definition option_defs_us[] = {
|
||||
},
|
||||
"480x272"
|
||||
},
|
||||
{
|
||||
"ppsspp_mulitsample_level",
|
||||
"MSAA Antialiasing (Vulkan Only)",
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
"video",
|
||||
{
|
||||
{"Disabled", NULL},
|
||||
{"x2", NULL},
|
||||
{"x4", NULL},
|
||||
{"x8", NULL},
|
||||
{NULL, NULL}
|
||||
},
|
||||
"Disabled"
|
||||
},
|
||||
{
|
||||
"ppsspp_skip_buffer_effects",
|
||||
"Skip Buffer Effects",
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
Loaded 100 of 111 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user