Merge pull request #3452 from Morph1984/anisotropic-filtering
frontend/Graphics: Add "Advanced" graphics tab and experimental Anisotropic Filtering support
This commit is contained in:
commit
84e9f9f395
16 changed files with 245 additions and 35 deletions
|
@ -430,6 +430,7 @@ struct Values {
|
||||||
|
|
||||||
float resolution_factor;
|
float resolution_factor;
|
||||||
int aspect_ratio;
|
int aspect_ratio;
|
||||||
|
int max_anisotropy;
|
||||||
bool use_frame_limit;
|
bool use_frame_limit;
|
||||||
u16 frame_limit;
|
u16 frame_limit;
|
||||||
bool use_disk_shader_cache;
|
bool use_disk_shader_cache;
|
||||||
|
|
|
@ -38,7 +38,7 @@ OGLSampler SamplerCacheOpenGL::CreateSampler(const Tegra::Texture::TSCEntry& tsc
|
||||||
glSamplerParameterf(sampler_id, GL_TEXTURE_MAX_ANISOTROPY, tsc.GetMaxAnisotropy());
|
glSamplerParameterf(sampler_id, GL_TEXTURE_MAX_ANISOTROPY, tsc.GetMaxAnisotropy());
|
||||||
} else if (GLAD_GL_EXT_texture_filter_anisotropic) {
|
} else if (GLAD_GL_EXT_texture_filter_anisotropic) {
|
||||||
glSamplerParameterf(sampler_id, GL_TEXTURE_MAX_ANISOTROPY_EXT, tsc.GetMaxAnisotropy());
|
glSamplerParameterf(sampler_id, GL_TEXTURE_MAX_ANISOTROPY_EXT, tsc.GetMaxAnisotropy());
|
||||||
} else if (tsc.GetMaxAnisotropy() != 1) {
|
} else {
|
||||||
LOG_WARNING(Render_OpenGL, "Anisotropy not supported by host GPU driver");
|
LOG_WARNING(Render_OpenGL, "Anisotropy not supported by host GPU driver");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/bit_field.h"
|
#include "common/bit_field.h"
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
|
#include "core/settings.h"
|
||||||
|
|
||||||
namespace Tegra::Texture {
|
namespace Tegra::Texture {
|
||||||
|
|
||||||
|
@ -294,6 +295,14 @@ enum class TextureMipmapFilter : u32 {
|
||||||
Linear = 3,
|
Linear = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class Anisotropy {
|
||||||
|
Default,
|
||||||
|
Filter2x,
|
||||||
|
Filter4x,
|
||||||
|
Filter8x,
|
||||||
|
Filter16x,
|
||||||
|
};
|
||||||
|
|
||||||
struct TSCEntry {
|
struct TSCEntry {
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
|
@ -328,7 +337,20 @@ struct TSCEntry {
|
||||||
};
|
};
|
||||||
|
|
||||||
float GetMaxAnisotropy() const {
|
float GetMaxAnisotropy() const {
|
||||||
|
switch (static_cast<Anisotropy>(Settings::values.max_anisotropy)) {
|
||||||
|
case Anisotropy::Default:
|
||||||
return static_cast<float>(1U << max_anisotropy);
|
return static_cast<float>(1U << max_anisotropy);
|
||||||
|
case Anisotropy::Filter2x:
|
||||||
|
return static_cast<float>(2U << max_anisotropy);
|
||||||
|
case Anisotropy::Filter4x:
|
||||||
|
return static_cast<float>(4U << max_anisotropy);
|
||||||
|
case Anisotropy::Filter8x:
|
||||||
|
return static_cast<float>(8U << max_anisotropy);
|
||||||
|
case Anisotropy::Filter16x:
|
||||||
|
return static_cast<float>(16U << max_anisotropy);
|
||||||
|
default:
|
||||||
|
return static_cast<float>(1U << max_anisotropy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float GetMinLod() const {
|
float GetMinLod() const {
|
||||||
|
|
|
@ -42,6 +42,9 @@ add_executable(yuzu
|
||||||
configuration/configure_graphics.cpp
|
configuration/configure_graphics.cpp
|
||||||
configuration/configure_graphics.h
|
configuration/configure_graphics.h
|
||||||
configuration/configure_graphics.ui
|
configuration/configure_graphics.ui
|
||||||
|
configuration/configure_graphics_advanced.cpp
|
||||||
|
configuration/configure_graphics_advanced.h
|
||||||
|
configuration/configure_graphics_advanced.ui
|
||||||
configuration/configure_hotkeys.cpp
|
configuration/configure_hotkeys.cpp
|
||||||
configuration/configure_hotkeys.h
|
configuration/configure_hotkeys.h
|
||||||
configuration/configure_hotkeys.ui
|
configuration/configure_hotkeys.ui
|
||||||
|
|
|
@ -631,6 +631,7 @@ void Config::ReadRendererValues() {
|
||||||
Settings::values.resolution_factor =
|
Settings::values.resolution_factor =
|
||||||
ReadSetting(QStringLiteral("resolution_factor"), 1.0).toFloat();
|
ReadSetting(QStringLiteral("resolution_factor"), 1.0).toFloat();
|
||||||
Settings::values.aspect_ratio = ReadSetting(QStringLiteral("aspect_ratio"), 0).toInt();
|
Settings::values.aspect_ratio = ReadSetting(QStringLiteral("aspect_ratio"), 0).toInt();
|
||||||
|
Settings::values.max_anisotropy = ReadSetting(QStringLiteral("max_anisotropy"), 0).toInt();
|
||||||
Settings::values.use_frame_limit =
|
Settings::values.use_frame_limit =
|
||||||
ReadSetting(QStringLiteral("use_frame_limit"), true).toBool();
|
ReadSetting(QStringLiteral("use_frame_limit"), true).toBool();
|
||||||
Settings::values.frame_limit = ReadSetting(QStringLiteral("frame_limit"), 100).toInt();
|
Settings::values.frame_limit = ReadSetting(QStringLiteral("frame_limit"), 100).toInt();
|
||||||
|
@ -1067,6 +1068,7 @@ void Config::SaveRendererValues() {
|
||||||
WriteSetting(QStringLiteral("resolution_factor"),
|
WriteSetting(QStringLiteral("resolution_factor"),
|
||||||
static_cast<double>(Settings::values.resolution_factor), 1.0);
|
static_cast<double>(Settings::values.resolution_factor), 1.0);
|
||||||
WriteSetting(QStringLiteral("aspect_ratio"), Settings::values.aspect_ratio, 0);
|
WriteSetting(QStringLiteral("aspect_ratio"), Settings::values.aspect_ratio, 0);
|
||||||
|
WriteSetting(QStringLiteral("max_anisotropy"), Settings::values.max_anisotropy, 0);
|
||||||
WriteSetting(QStringLiteral("use_frame_limit"), Settings::values.use_frame_limit, true);
|
WriteSetting(QStringLiteral("use_frame_limit"), Settings::values.use_frame_limit, true);
|
||||||
WriteSetting(QStringLiteral("frame_limit"), Settings::values.frame_limit, 100);
|
WriteSetting(QStringLiteral("frame_limit"), Settings::values.frame_limit, 100);
|
||||||
WriteSetting(QStringLiteral("use_disk_shader_cache"), Settings::values.use_disk_shader_cache,
|
WriteSetting(QStringLiteral("use_disk_shader_cache"), Settings::values.use_disk_shader_cache,
|
||||||
|
|
|
@ -83,6 +83,11 @@
|
||||||
<string>Graphics</string>
|
<string>Graphics</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="ConfigureGraphicsAdvanced" name="graphicsAdvancedTab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>GraphicsAdvanced</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
<widget class="ConfigureAudio" name="audioTab">
|
<widget class="ConfigureAudio" name="audioTab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Audio</string>
|
<string>Audio</string>
|
||||||
|
@ -159,6 +164,12 @@
|
||||||
<header>configuration/configure_graphics.h</header>
|
<header>configuration/configure_graphics.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>ConfigureGraphicsAdvanced</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>configuration/configure_graphics_advanced.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>ConfigureWeb</class>
|
<class>ConfigureWeb</class>
|
||||||
<extends>QWidget</extends>
|
<extends>QWidget</extends>
|
||||||
|
|
|
@ -41,6 +41,7 @@ void ConfigureDialog::ApplyConfiguration() {
|
||||||
ui->inputTab->ApplyConfiguration();
|
ui->inputTab->ApplyConfiguration();
|
||||||
ui->hotkeysTab->ApplyConfiguration(registry);
|
ui->hotkeysTab->ApplyConfiguration(registry);
|
||||||
ui->graphicsTab->ApplyConfiguration();
|
ui->graphicsTab->ApplyConfiguration();
|
||||||
|
ui->graphicsAdvancedTab->ApplyConfiguration();
|
||||||
ui->audioTab->ApplyConfiguration();
|
ui->audioTab->ApplyConfiguration();
|
||||||
ui->debugTab->ApplyConfiguration();
|
ui->debugTab->ApplyConfiguration();
|
||||||
ui->webTab->ApplyConfiguration();
|
ui->webTab->ApplyConfiguration();
|
||||||
|
@ -76,7 +77,7 @@ void ConfigureDialog::PopulateSelectionList() {
|
||||||
const std::array<std::pair<QString, QList<QWidget*>>, 5> items{
|
const std::array<std::pair<QString, QList<QWidget*>>, 5> items{
|
||||||
{{tr("General"), {ui->generalTab, ui->webTab, ui->debugTab, ui->uiTab}},
|
{{tr("General"), {ui->generalTab, ui->webTab, ui->debugTab, ui->uiTab}},
|
||||||
{tr("System"), {ui->systemTab, ui->profileManagerTab, ui->serviceTab, ui->filesystemTab}},
|
{tr("System"), {ui->systemTab, ui->profileManagerTab, ui->serviceTab, ui->filesystemTab}},
|
||||||
{tr("Graphics"), {ui->graphicsTab}},
|
{tr("Graphics"), {ui->graphicsTab, ui->graphicsAdvancedTab}},
|
||||||
{tr("Audio"), {ui->audioTab}},
|
{tr("Audio"), {ui->audioTab}},
|
||||||
{tr("Controls"), {ui->inputTab, ui->hotkeysTab}}},
|
{tr("Controls"), {ui->inputTab, ui->hotkeysTab}}},
|
||||||
};
|
};
|
||||||
|
@ -105,6 +106,7 @@ void ConfigureDialog::UpdateVisibleTabs() {
|
||||||
{ui->inputTab, tr("Input")},
|
{ui->inputTab, tr("Input")},
|
||||||
{ui->hotkeysTab, tr("Hotkeys")},
|
{ui->hotkeysTab, tr("Hotkeys")},
|
||||||
{ui->graphicsTab, tr("Graphics")},
|
{ui->graphicsTab, tr("Graphics")},
|
||||||
|
{ui->graphicsAdvancedTab, tr("Advanced")},
|
||||||
{ui->audioTab, tr("Audio")},
|
{ui->audioTab, tr("Audio")},
|
||||||
{ui->debugTab, tr("Debug")},
|
{ui->debugTab, tr("Debug")},
|
||||||
{ui->webTab, tr("Web")},
|
{ui->webTab, tr("Web")},
|
||||||
|
|
|
@ -100,13 +100,8 @@ void ConfigureGraphics::SetConfiguration() {
|
||||||
ui->aspect_ratio_combobox->setCurrentIndex(Settings::values.aspect_ratio);
|
ui->aspect_ratio_combobox->setCurrentIndex(Settings::values.aspect_ratio);
|
||||||
ui->use_disk_shader_cache->setEnabled(runtime_lock);
|
ui->use_disk_shader_cache->setEnabled(runtime_lock);
|
||||||
ui->use_disk_shader_cache->setChecked(Settings::values.use_disk_shader_cache);
|
ui->use_disk_shader_cache->setChecked(Settings::values.use_disk_shader_cache);
|
||||||
ui->use_accurate_gpu_emulation->setChecked(Settings::values.use_accurate_gpu_emulation);
|
|
||||||
ui->use_asynchronous_gpu_emulation->setEnabled(runtime_lock);
|
ui->use_asynchronous_gpu_emulation->setEnabled(runtime_lock);
|
||||||
ui->use_asynchronous_gpu_emulation->setChecked(Settings::values.use_asynchronous_gpu_emulation);
|
ui->use_asynchronous_gpu_emulation->setChecked(Settings::values.use_asynchronous_gpu_emulation);
|
||||||
ui->use_vsync->setEnabled(runtime_lock);
|
|
||||||
ui->use_vsync->setChecked(Settings::values.use_vsync);
|
|
||||||
ui->force_30fps_mode->setEnabled(runtime_lock);
|
|
||||||
ui->force_30fps_mode->setChecked(Settings::values.force_30fps_mode);
|
|
||||||
UpdateBackgroundColorButton(QColor::fromRgbF(Settings::values.bg_red, Settings::values.bg_green,
|
UpdateBackgroundColorButton(QColor::fromRgbF(Settings::values.bg_red, Settings::values.bg_green,
|
||||||
Settings::values.bg_blue));
|
Settings::values.bg_blue));
|
||||||
UpdateDeviceComboBox();
|
UpdateDeviceComboBox();
|
||||||
|
@ -119,11 +114,8 @@ void ConfigureGraphics::ApplyConfiguration() {
|
||||||
ToResolutionFactor(static_cast<Resolution>(ui->resolution_factor_combobox->currentIndex()));
|
ToResolutionFactor(static_cast<Resolution>(ui->resolution_factor_combobox->currentIndex()));
|
||||||
Settings::values.aspect_ratio = ui->aspect_ratio_combobox->currentIndex();
|
Settings::values.aspect_ratio = ui->aspect_ratio_combobox->currentIndex();
|
||||||
Settings::values.use_disk_shader_cache = ui->use_disk_shader_cache->isChecked();
|
Settings::values.use_disk_shader_cache = ui->use_disk_shader_cache->isChecked();
|
||||||
Settings::values.use_accurate_gpu_emulation = ui->use_accurate_gpu_emulation->isChecked();
|
|
||||||
Settings::values.use_asynchronous_gpu_emulation =
|
Settings::values.use_asynchronous_gpu_emulation =
|
||||||
ui->use_asynchronous_gpu_emulation->isChecked();
|
ui->use_asynchronous_gpu_emulation->isChecked();
|
||||||
Settings::values.use_vsync = ui->use_vsync->isChecked();
|
|
||||||
Settings::values.force_30fps_mode = ui->force_30fps_mode->isChecked();
|
|
||||||
Settings::values.bg_red = static_cast<float>(bg_color.redF());
|
Settings::values.bg_red = static_cast<float>(bg_color.redF());
|
||||||
Settings::values.bg_green = static_cast<float>(bg_color.greenF());
|
Settings::values.bg_green = static_cast<float>(bg_color.greenF());
|
||||||
Settings::values.bg_blue = static_cast<float>(bg_color.blueF());
|
Settings::values.bg_blue = static_cast<float>(bg_color.blueF());
|
||||||
|
|
|
@ -84,30 +84,6 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="QCheckBox" name="use_vsync">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>VSync prevents the screen from tearing, but some graphics cards have lower performance with VSync enabled. Keep it enabled if you don't notice a performance difference.</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Use VSync (OpenGL only)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QCheckBox" name="use_accurate_gpu_emulation">
|
|
||||||
<property name="text">
|
|
||||||
<string>Use accurate GPU emulation (slow)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QCheckBox" name="force_30fps_mode">
|
|
||||||
<property name="text">
|
|
||||||
<string>Force 30 FPS mode</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
|
|
48
src/yuzu/configuration/configure_graphics_advanced.cpp
Normal file
48
src/yuzu/configuration/configure_graphics_advanced.cpp
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
// Copyright 2020 yuzu Emulator Project
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include "core/core.h"
|
||||||
|
#include "core/settings.h"
|
||||||
|
#include "ui_configure_graphics_advanced.h"
|
||||||
|
#include "yuzu/configuration/configure_graphics_advanced.h"
|
||||||
|
|
||||||
|
ConfigureGraphicsAdvanced::ConfigureGraphicsAdvanced(QWidget* parent)
|
||||||
|
: QWidget(parent), ui(new Ui::ConfigureGraphicsAdvanced) {
|
||||||
|
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
SetConfiguration();
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigureGraphicsAdvanced::~ConfigureGraphicsAdvanced() = default;
|
||||||
|
|
||||||
|
void ConfigureGraphicsAdvanced::SetConfiguration() {
|
||||||
|
const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn();
|
||||||
|
ui->use_accurate_gpu_emulation->setChecked(Settings::values.use_accurate_gpu_emulation);
|
||||||
|
ui->use_vsync->setEnabled(runtime_lock);
|
||||||
|
ui->use_vsync->setChecked(Settings::values.use_vsync);
|
||||||
|
ui->force_30fps_mode->setEnabled(runtime_lock);
|
||||||
|
ui->force_30fps_mode->setChecked(Settings::values.force_30fps_mode);
|
||||||
|
ui->anisotropic_filtering_combobox->setEnabled(runtime_lock);
|
||||||
|
ui->anisotropic_filtering_combobox->setCurrentIndex(Settings::values.max_anisotropy);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigureGraphicsAdvanced::ApplyConfiguration() {
|
||||||
|
Settings::values.use_accurate_gpu_emulation = ui->use_accurate_gpu_emulation->isChecked();
|
||||||
|
Settings::values.use_vsync = ui->use_vsync->isChecked();
|
||||||
|
Settings::values.force_30fps_mode = ui->force_30fps_mode->isChecked();
|
||||||
|
Settings::values.max_anisotropy = ui->anisotropic_filtering_combobox->currentIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) {
|
||||||
|
if (event->type() == QEvent::LanguageChange) {
|
||||||
|
RetranslateUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget::changeEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigureGraphicsAdvanced::RetranslateUI() {
|
||||||
|
ui->retranslateUi(this);
|
||||||
|
}
|
30
src/yuzu/configuration/configure_graphics_advanced.h
Normal file
30
src/yuzu/configuration/configure_graphics_advanced.h
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
// Copyright 2020 yuzu Emulator Project
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class ConfigureGraphicsAdvanced;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ConfigureGraphicsAdvanced : public QWidget {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ConfigureGraphicsAdvanced(QWidget* parent = nullptr);
|
||||||
|
~ConfigureGraphicsAdvanced() override;
|
||||||
|
|
||||||
|
void ApplyConfiguration();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void changeEvent(QEvent* event) override;
|
||||||
|
void RetranslateUI();
|
||||||
|
|
||||||
|
void SetConfiguration();
|
||||||
|
|
||||||
|
std::unique_ptr<Ui::ConfigureGraphicsAdvanced> ui;
|
||||||
|
};
|
111
src/yuzu/configuration/configure_graphics_advanced.ui
Normal file
111
src/yuzu/configuration/configure_graphics_advanced.ui
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ConfigureGraphicsAdvanced</class>
|
||||||
|
<widget class="QWidget" name="ConfigureGraphicsAdvanced">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>321</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_1">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_1">
|
||||||
|
<property name="title">
|
||||||
|
<string>Advanced Graphics Settings</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="use_accurate_gpu_emulation">
|
||||||
|
<property name="text">
|
||||||
|
<string>Use accurate GPU emulation (slow)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="use_vsync">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>VSync prevents the screen from tearing, but some graphics cards have lower performance with VSync enabled. Keep it enabled if you don't notice a performance difference.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Use VSync (OpenGL only)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="force_30fps_mode">
|
||||||
|
<property name="text">
|
||||||
|
<string>Force 30 FPS mode</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_1">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="af_label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Anisotropic Filtering:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="anisotropic_filtering_combobox">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Default</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>2x</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>4x</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>8x</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>16x</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -381,6 +381,8 @@ void Config::ReadValues() {
|
||||||
static_cast<float>(sdl2_config->GetReal("Renderer", "resolution_factor", 1.0));
|
static_cast<float>(sdl2_config->GetReal("Renderer", "resolution_factor", 1.0));
|
||||||
Settings::values.aspect_ratio =
|
Settings::values.aspect_ratio =
|
||||||
static_cast<int>(sdl2_config->GetInteger("Renderer", "aspect_ratio", 0));
|
static_cast<int>(sdl2_config->GetInteger("Renderer", "aspect_ratio", 0));
|
||||||
|
Settings::values.max_anisotropy =
|
||||||
|
static_cast<int>(sdl2_config->GetInteger("Renderer", "max_anisotropy", 0));
|
||||||
Settings::values.use_frame_limit = sdl2_config->GetBoolean("Renderer", "use_frame_limit", true);
|
Settings::values.use_frame_limit = sdl2_config->GetBoolean("Renderer", "use_frame_limit", true);
|
||||||
Settings::values.frame_limit =
|
Settings::values.frame_limit =
|
||||||
static_cast<u16>(sdl2_config->GetInteger("Renderer", "frame_limit", 100));
|
static_cast<u16>(sdl2_config->GetInteger("Renderer", "frame_limit", 100));
|
||||||
|
|
|
@ -126,6 +126,10 @@ resolution_factor =
|
||||||
# 0: Default (16:9), 1: Force 4:3, 2: Force 21:9, 3: Stretch to Window
|
# 0: Default (16:9), 1: Force 4:3, 2: Force 21:9, 3: Stretch to Window
|
||||||
aspect_ratio =
|
aspect_ratio =
|
||||||
|
|
||||||
|
# Anisotropic filtering
|
||||||
|
# 0: Default, 1: 2x, 2: 4x, 3: 8x, 4: 16x
|
||||||
|
max_anisotropy =
|
||||||
|
|
||||||
# Whether to enable V-Sync (caps the framerate at 60FPS) or not.
|
# Whether to enable V-Sync (caps the framerate at 60FPS) or not.
|
||||||
# 0 (default): Off, 1: On
|
# 0 (default): Off, 1: On
|
||||||
use_vsync =
|
use_vsync =
|
||||||
|
|
|
@ -120,6 +120,8 @@ void Config::ReadValues() {
|
||||||
static_cast<float>(sdl2_config->GetReal("Renderer", "resolution_factor", 1.0));
|
static_cast<float>(sdl2_config->GetReal("Renderer", "resolution_factor", 1.0));
|
||||||
Settings::values.aspect_ratio =
|
Settings::values.aspect_ratio =
|
||||||
static_cast<int>(sdl2_config->GetInteger("Renderer", "aspect_ratio", 0));
|
static_cast<int>(sdl2_config->GetInteger("Renderer", "aspect_ratio", 0));
|
||||||
|
Settings::values.max_anisotropy =
|
||||||
|
static_cast<int>(sdl2_config->GetInteger("Renderer", "max_anisotropy", 0));
|
||||||
Settings::values.use_frame_limit = false;
|
Settings::values.use_frame_limit = false;
|
||||||
Settings::values.frame_limit = 100;
|
Settings::values.frame_limit = 100;
|
||||||
Settings::values.use_disk_shader_cache =
|
Settings::values.use_disk_shader_cache =
|
||||||
|
|
|
@ -30,6 +30,10 @@ resolution_factor =
|
||||||
# 0: Default (16:9), 1: Force 4:3, 2: Force 21:9, 3: Stretch to Window
|
# 0: Default (16:9), 1: Force 4:3, 2: Force 21:9, 3: Stretch to Window
|
||||||
aspect_ratio =
|
aspect_ratio =
|
||||||
|
|
||||||
|
# Anisotropic filtering
|
||||||
|
# 0: Default, 1: 2x, 2: 4x, 3: 8x, 4: 16x
|
||||||
|
max_anisotropy =
|
||||||
|
|
||||||
# Whether to enable V-Sync (caps the framerate at 60FPS) or not.
|
# Whether to enable V-Sync (caps the framerate at 60FPS) or not.
|
||||||
# 0 (default): Off, 1: On
|
# 0 (default): Off, 1: On
|
||||||
use_vsync =
|
use_vsync =
|
||||||
|
|
Loading…
Reference in a new issue