mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 05:47:56 -07:00
51c984dde3
It was only implemented in OpenGL, though the option was visible in both backends, leading to memory leaks if you enabled it in DirectX. And it wasn't particularly useful as a debug feature as it only showed where in the EFB the copies were taken from, not what format it was, or what the copy was used for, or what content was in the EFB at that point in time. Also, it stretched the copy regions relative to the window, so the on-screen regions don't even line up with the window unless the game used the full EFB (some pal games) and you game image stretched to the full window.
187 lines
4.3 KiB
C++
187 lines
4.3 KiB
C++
// Copyright 2008 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
// IMPORTANT: UI etc should modify g_Config. Graphics code should read g_ActiveConfig.
|
|
// The reason for this is to get rid of race conditions etc when the configuration
|
|
// changes in the middle of a frame. This is done by copying g_Config to g_ActiveConfig
|
|
// at the start of every frame. Noone should ever change members of g_ActiveConfig
|
|
// directly.
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "Common/CommonTypes.h"
|
|
#include "VideoCommon/VideoCommon.h"
|
|
|
|
// Log in two categories, and save three other options in the same byte
|
|
#define CONF_LOG 1
|
|
#define CONF_PRIMLOG 2
|
|
#define CONF_SAVETARGETS 8
|
|
#define CONF_SAVESHADERS 16
|
|
|
|
enum AspectMode
|
|
{
|
|
ASPECT_AUTO = 0,
|
|
ASPECT_ANALOG_WIDE = 1,
|
|
ASPECT_ANALOG = 2,
|
|
ASPECT_STRETCH = 3,
|
|
};
|
|
|
|
enum EFBScale
|
|
{
|
|
SCALE_FORCE_INTEGRAL = -1,
|
|
SCALE_AUTO,
|
|
SCALE_AUTO_INTEGRAL,
|
|
SCALE_1X,
|
|
SCALE_1_5X,
|
|
SCALE_2X,
|
|
SCALE_2_5X,
|
|
};
|
|
|
|
enum StereoMode
|
|
{
|
|
STEREO_OFF = 0,
|
|
STEREO_SBS,
|
|
STEREO_TAB,
|
|
STEREO_ANAGLYPH,
|
|
STEREO_3DVISION
|
|
};
|
|
|
|
constexpr int STEREOSCOPY_PRESETS_NUM = 3;
|
|
|
|
struct StereoscopyPreset final
|
|
{
|
|
int depth;
|
|
int convergence;
|
|
};
|
|
|
|
// NEVER inherit from this class.
|
|
struct VideoConfig final
|
|
{
|
|
VideoConfig();
|
|
void Load(const std::string& ini_file);
|
|
void GameIniLoad();
|
|
void VerifyValidity();
|
|
void Save(const std::string& ini_file);
|
|
void UpdateProjectionHack();
|
|
bool IsVSync();
|
|
|
|
// General
|
|
bool bVSync;
|
|
bool bFullscreen;
|
|
bool bExclusiveMode;
|
|
bool bRunning;
|
|
bool bWidescreenHack;
|
|
int iAspectRatio;
|
|
bool bCrop; // Aspect ratio controls.
|
|
bool bUseXFB;
|
|
bool bUseRealXFB;
|
|
|
|
// Enhancements
|
|
int iMultisampleMode;
|
|
bool bSSAA;
|
|
int iEFBScale;
|
|
bool bForceFiltering;
|
|
int iMaxAnisotropy;
|
|
std::string sPostProcessingShader;
|
|
int iStereoMode;
|
|
int iStereoDepth;
|
|
int iStereoConvergence;
|
|
bool bStereoSwapEyes;
|
|
std::array<StereoscopyPreset, STEREOSCOPY_PRESETS_NUM> oStereoPresets;
|
|
int iStereoActivePreset;
|
|
|
|
// Information
|
|
bool bShowFPS;
|
|
bool bOverlayStats;
|
|
bool bOverlayProjStats;
|
|
bool bTexFmtOverlayEnable;
|
|
bool bTexFmtOverlayCenter;
|
|
bool bLogRenderTimeToFile;
|
|
|
|
// Render
|
|
bool bWireFrame;
|
|
bool bDisableFog;
|
|
|
|
// Utility
|
|
bool bDumpTextures;
|
|
bool bHiresTextures;
|
|
bool bConvertHiresTextures;
|
|
bool bCacheHiresTextures;
|
|
bool bDumpEFBTarget;
|
|
bool bUseFFV1;
|
|
bool bFreeLook;
|
|
bool bBorderlessFullscreen;
|
|
|
|
// Hacks
|
|
bool bEFBAccessEnable;
|
|
bool bPerfQueriesEnable;
|
|
bool bBBoxEnable;
|
|
bool bForceProgressive;
|
|
|
|
bool bEFBEmulateFormatChanges;
|
|
bool bSkipEFBCopyToRam;
|
|
bool bCopyEFBScaled;
|
|
int iSafeTextureCache_ColorSamples;
|
|
int iPhackvalue[3];
|
|
std::string sPhackvalue[2];
|
|
float fAspectRatioHackW, fAspectRatioHackH;
|
|
bool bEnablePixelLighting;
|
|
bool bFastDepthCalc;
|
|
int iLog; // CONF_ bits
|
|
int iSaveTargetId; // TODO: Should be dropped
|
|
|
|
// Stereoscopy
|
|
bool bStereoEFBMonoDepth;
|
|
int iStereoDepthPercentage;
|
|
int iStereoConvergenceMinimum;
|
|
|
|
// D3D only config, mostly to be merged into the above
|
|
int iAdapter;
|
|
|
|
// Debugging
|
|
bool bEnableShaderDebugging;
|
|
|
|
// Static config per API
|
|
// TODO: Move this out of VideoConfig
|
|
struct
|
|
{
|
|
API_TYPE APIType;
|
|
|
|
std::vector<std::string> Adapters; // for D3D
|
|
std::vector<int> AAModes;
|
|
std::vector<std::string> PPShaders; // post-processing shaders
|
|
std::vector<std::string> AnaglyphShaders; // anaglyph shaders
|
|
|
|
bool bSupportsExclusiveFullscreen;
|
|
bool bSupportsDualSourceBlend;
|
|
bool bSupportsPrimitiveRestart;
|
|
bool bSupportsOversizedViewports;
|
|
bool bSupportsGeometryShaders;
|
|
bool bSupports3DVision;
|
|
bool bSupportsEarlyZ; // needed by PixelShaderGen, so must stay in VideoCommon
|
|
bool bSupportsBindingLayout; // Needed by ShaderGen, so must stay in VideoCommon
|
|
bool bSupportsBBox;
|
|
bool bSupportsGSInstancing; // Needed by GeometryShaderGen, so must stay in VideoCommon
|
|
bool bSupportsPostProcessing;
|
|
bool bSupportsPaletteConversion;
|
|
bool bSupportsClipControl; // Needed by VertexShaderGen, so must stay in VideoCommon
|
|
bool bSupportsSSAA;
|
|
} backend_info;
|
|
|
|
// Utility
|
|
bool RealXFBEnabled() const { return bUseXFB && bUseRealXFB; }
|
|
bool VirtualXFBEnabled() const { return bUseXFB && !bUseRealXFB; }
|
|
bool ExclusiveFullscreenEnabled() const { return backend_info.bSupportsExclusiveFullscreen && !bBorderlessFullscreen; }
|
|
};
|
|
|
|
extern VideoConfig g_Config;
|
|
extern VideoConfig g_ActiveConfig;
|
|
|
|
// Called every frame.
|
|
void UpdateActiveConfig();
|