mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 13:57:57 -07:00
2f1a7cbee1
Skip ubershader mode works the same as hybrid ubershaders in that the shaders are compiled asynchronously. However, instead of using the ubershader to draw the object, it skips it entirely until the specialized shader is made available. This mode will likely result in broken effects where a game creates an EFB copy, and does not redraw it every frame. Therefore, it is not a recommended option, however, it may result in better performance on low-end systems.
209 lines
6.2 KiB
C++
209 lines
6.2 KiB
C++
// Copyright 2010 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <wx/button.h>
|
|
#include <wx/checkbox.h>
|
|
#include <wx/choice.h>
|
|
#include <wx/dialog.h>
|
|
#include <wx/msgdlg.h>
|
|
#include <wx/radiobut.h>
|
|
#include <wx/spinctrl.h>
|
|
#include <wx/stattext.h>
|
|
|
|
#include "Common/CommonTypes.h"
|
|
#include "Core/Config/GraphicsSettings.h"
|
|
|
|
class DolphinSlider;
|
|
struct VideoConfig;
|
|
|
|
class wxBoxSizer;
|
|
class wxControl;
|
|
class wxPanel;
|
|
|
|
template <typename W>
|
|
class BoolSetting : public W
|
|
{
|
|
public:
|
|
BoolSetting(wxWindow* parent, const wxString& label, const wxString& tooltip,
|
|
const Config::ConfigInfo<bool>& setting, bool reverse = false, long style = 0);
|
|
|
|
void UpdateValue(wxCommandEvent& ev)
|
|
{
|
|
Config::SetBaseOrCurrent(m_setting, (ev.GetInt() != 0) != m_reverse);
|
|
ev.Skip();
|
|
}
|
|
|
|
private:
|
|
Config::ConfigInfo<bool> m_setting;
|
|
const bool m_reverse;
|
|
};
|
|
|
|
template <typename W>
|
|
class RefBoolSetting : public W
|
|
{
|
|
public:
|
|
RefBoolSetting(wxWindow* parent, const wxString& label, const wxString& tooltip, bool& setting,
|
|
bool reverse = false, long style = 0);
|
|
|
|
void UpdateValue(wxCommandEvent& ev)
|
|
{
|
|
m_setting = (ev.GetInt() != 0) != m_reverse;
|
|
ev.Skip();
|
|
}
|
|
|
|
private:
|
|
bool& m_setting;
|
|
const bool m_reverse;
|
|
};
|
|
|
|
typedef BoolSetting<wxCheckBox> SettingCheckBox;
|
|
|
|
class IntegerSetting : public wxSpinCtrl
|
|
{
|
|
public:
|
|
IntegerSetting(wxWindow* parent, const wxString& label, const Config::ConfigInfo<int>& setting,
|
|
int minVal, int maxVal, long style = 0);
|
|
|
|
void UpdateValue(wxCommandEvent& ev)
|
|
{
|
|
Config::SetBaseOrCurrent(m_setting, ev.GetInt());
|
|
ev.Skip();
|
|
}
|
|
|
|
private:
|
|
Config::ConfigInfo<int> m_setting;
|
|
};
|
|
|
|
class SettingChoice : public wxChoice
|
|
{
|
|
public:
|
|
SettingChoice(wxWindow* parent, const Config::ConfigInfo<int>& setting, const wxString& tooltip,
|
|
int num = 0, const wxString choices[] = nullptr, long style = 0);
|
|
void UpdateValue(wxCommandEvent& ev);
|
|
|
|
private:
|
|
Config::ConfigInfo<int> m_setting;
|
|
};
|
|
|
|
template <typename ValueType>
|
|
class SettingRadioButton : public wxRadioButton
|
|
{
|
|
public:
|
|
SettingRadioButton(wxWindow* parent, const wxString& label, const wxString& tooltip,
|
|
const Config::ConfigInfo<ValueType>& setting, const ValueType& value,
|
|
long style = 0)
|
|
: wxRadioButton(parent, wxID_ANY, label, wxDefaultPosition, wxDefaultSize, style),
|
|
m_setting(setting), m_value(value)
|
|
{
|
|
SetToolTip(tooltip);
|
|
SetValue(Config::Get(m_setting) == m_value);
|
|
Bind(wxEVT_RADIOBUTTON, &SettingRadioButton::UpdateValue, this);
|
|
}
|
|
|
|
void UpdateValue(wxCommandEvent& ev)
|
|
{
|
|
if (ev.IsChecked())
|
|
Config::SetBaseOrCurrent(m_setting, m_value);
|
|
ev.Skip();
|
|
}
|
|
|
|
private:
|
|
Config::ConfigInfo<ValueType> m_setting;
|
|
ValueType m_value;
|
|
};
|
|
|
|
class VideoConfigDiag : public wxDialog
|
|
{
|
|
public:
|
|
VideoConfigDiag(wxWindow* parent, const std::string& title);
|
|
|
|
protected:
|
|
void Event_Backend(wxCommandEvent& ev);
|
|
void Event_ProgressiveScan(wxCommandEvent& ev);
|
|
void Event_SafeTextureCache(wxCommandEvent& ev);
|
|
|
|
void Event_PPShader(wxCommandEvent& ev);
|
|
void Event_ConfigurePPShader(wxCommandEvent& ev);
|
|
|
|
void Event_StereoDepth(wxCommandEvent& ev);
|
|
void Event_StereoConvergence(wxCommandEvent& ev);
|
|
void Event_StereoMode(wxCommandEvent& ev);
|
|
|
|
void Event_Close(wxCommandEvent&);
|
|
|
|
// Enables/disables UI elements depending on current config
|
|
void OnUpdateUI(wxUpdateUIEvent& ev);
|
|
|
|
// Creates controls and connects their enter/leave window events to Evt_Enter/LeaveControl
|
|
SettingCheckBox* CreateCheckBox(wxWindow* parent, const wxString& label,
|
|
const wxString& description,
|
|
const Config::ConfigInfo<bool>& setting, bool reverse = false,
|
|
long style = 0);
|
|
RefBoolSetting<wxCheckBox>* CreateCheckBoxRefBool(wxWindow* parent, const wxString& label,
|
|
const wxString& description, bool& setting);
|
|
SettingChoice* CreateChoice(wxWindow* parent, const Config::ConfigInfo<int>& setting,
|
|
const wxString& description, int num = 0,
|
|
const wxString choices[] = nullptr, long style = 0);
|
|
template <typename ValueType>
|
|
SettingRadioButton<ValueType>* CreateRadioButton(wxWindow* parent, const wxString& label,
|
|
const wxString& description,
|
|
const Config::ConfigInfo<ValueType>& setting,
|
|
const ValueType& value, long style = 0)
|
|
{
|
|
auto* const rb =
|
|
new SettingRadioButton<ValueType>(parent, label, wxString(), setting, value, style);
|
|
RegisterControl(rb, description);
|
|
return rb;
|
|
}
|
|
|
|
// Same as above but only connects enter/leave window events
|
|
wxControl* RegisterControl(wxControl* const control, const wxString& description);
|
|
|
|
void Evt_EnterControl(wxMouseEvent& ev);
|
|
void Evt_LeaveControl(wxMouseEvent& ev);
|
|
void CreateDescriptionArea(wxPanel* const page, wxBoxSizer* const sizer);
|
|
void PopulatePostProcessingShaders();
|
|
void PopulateAAList();
|
|
void OnAAChanged(wxCommandEvent& ev);
|
|
|
|
wxChoice* choice_backend;
|
|
wxChoice* choice_adapter;
|
|
|
|
wxStaticText* label_backend;
|
|
wxStaticText* label_adapter;
|
|
|
|
wxStaticText* text_aamode;
|
|
wxChoice* choice_aamode;
|
|
DolphinSlider* conv_slider;
|
|
|
|
wxStaticText* label_display_resolution;
|
|
|
|
wxButton* button_config_pp;
|
|
|
|
SettingCheckBox* borderless_fullscreen;
|
|
RefBoolSetting<wxCheckBox>* render_to_main_checkbox;
|
|
|
|
SettingCheckBox* cache_hires_textures;
|
|
|
|
wxCheckBox* progressive_scan_checkbox;
|
|
wxCheckBox* vertex_rounding_checkbox;
|
|
|
|
wxChoice* choice_ppshader;
|
|
|
|
std::map<wxWindow*, wxString> ctrl_descs; // maps setting controls to their descriptions
|
|
std::map<wxWindow*, wxStaticText*> desc_texts; // maps dialog tabs (which are the parents of the
|
|
// setting controls) to their description text
|
|
// objects
|
|
|
|
VideoConfig& vconfig;
|
|
|
|
size_t m_msaa_modes;
|
|
};
|