Libretro: Minor refactoring

This commit is contained in:
Sour 2018-12-26 19:12:06 -05:00
parent 7d3b229301
commit 544059ac2f
2 changed files with 31 additions and 34 deletions

View file

@ -18,9 +18,10 @@ private:
int32_t _previousWidth = -1; int32_t _previousWidth = -1;
public: public:
LibretroRenderer(shared_ptr<Console> console) LibretroRenderer(shared_ptr<Console> console, retro_environment_t retroEnv)
{ {
_console = console; _console = console;
_retroEnv = retroEnv;
_console->GetVideoRenderer()->RegisterRenderingDevice(this); _console->GetVideoRenderer()->RegisterRenderingDevice(this);
} }
@ -36,7 +37,7 @@ public:
//Use Blargg's NTSC filter's max size as a minimum resolution, to prevent changing resolution too often //Use Blargg's NTSC filter's max size as a minimum resolution, to prevent changing resolution too often
int32_t newWidth = std::max<int32_t>(width, NES_NTSC_OUT_WIDTH(256)); int32_t newWidth = std::max<int32_t>(width, NES_NTSC_OUT_WIDTH(256));
int32_t newHeight = std::max<int32_t>(height, 240); int32_t newHeight = std::max<int32_t>(height, 240);
if(_previousWidth != newWidth || _previousHeight != newHeight) { if(_retroEnv != nullptr && (_previousWidth != newWidth || _previousHeight != newHeight)) {
//Resolution change is needed //Resolution change is needed
retro_system_av_info avInfo = {}; retro_system_av_info avInfo = {};
GetSystemAudioVideoInfo(avInfo, newWidth, newHeight); GetSystemAudioVideoInfo(avInfo, newWidth, newHeight);
@ -79,10 +80,9 @@ public:
} }
} }
void SetCallbacks(retro_video_refresh_t sendFrame, retro_environment_t retroEnv) void SetVideoCallback(retro_video_refresh_t sendFrame)
{ {
_sendFrame = sendFrame; _sendFrame = sendFrame;
_retroEnv = retroEnv;
} }
void SetSkipMode(bool skip) void SetSkipMode(bool skip)

View file

@ -115,7 +115,7 @@ extern "C" {
_console.reset(new Console()); _console.reset(new Console());
_console->Init(); _console->Init();
_renderer.reset(new LibretroRenderer(_console)); _renderer.reset(new LibretroRenderer(_console, retroEnv));
_soundManager.reset(new LibretroSoundManager(_console)); _soundManager.reset(new LibretroSoundManager(_console));
_keyManager.reset(new LibretroKeyManager(_console)); _keyManager.reset(new LibretroKeyManager(_console));
_messageManager.reset(new LibretroMessageManager(logCallback, retroEnv)); _messageManager.reset(new LibretroMessageManager(logCallback, retroEnv));
@ -233,7 +233,7 @@ extern "C" {
RETRO_API void retro_set_video_refresh(retro_video_refresh_t sendFrame) RETRO_API void retro_set_video_refresh(retro_video_refresh_t sendFrame)
{ {
_renderer->SetCallbacks(sendFrame, retroEnv); _renderer->SetVideoCallback(sendFrame);
} }
RETRO_API void retro_set_audio_sample(retro_audio_sample_t sendAudioSample) RETRO_API void retro_set_audio_sample(retro_audio_sample_t sendAudioSample)
@ -260,11 +260,20 @@ extern "C" {
_console->Reset(true); _console->Reset(true);
} }
bool readVariable(const char* key, retro_variable &var)
{
var.key = key;
var.value = nullptr;
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value != nullptr) {
return true;
}
return false;
}
void set_flag(const char* flagName, uint64_t flagValue) void set_flag(const char* flagName, uint64_t flagValue)
{ {
struct retro_variable var = {}; struct retro_variable var = {};
var.key = flagName; if(readVariable(flagName, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
if(value == "disabled") { if(value == "disabled") {
_console->GetSettings()->ClearFlags(flagValue); _console->GetSettings()->ClearFlags(flagValue);
@ -314,8 +323,7 @@ extern "C" {
set_flag(MesenFdsAutoSelectDisk, EmulationFlags::FdsAutoInsertDisk); set_flag(MesenFdsAutoSelectDisk, EmulationFlags::FdsAutoInsertDisk);
set_flag(MesenFdsFastForwardLoad, EmulationFlags::FdsFastForwardOnLoad); set_flag(MesenFdsFastForwardLoad, EmulationFlags::FdsFastForwardOnLoad);
var.key = MesenFakeStereo; if(readVariable(MesenFakeStereo, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
AudioFilterSettings settings; AudioFilterSettings settings;
if(value == "enabled") { if(value == "enabled") {
@ -327,8 +335,7 @@ extern "C" {
} }
} }
var.key = MesenNtscFilter; if(readVariable(MesenNtscFilter, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
if(value == "Disabled") { if(value == "Disabled") {
_console->GetSettings()->SetVideoFilterType(VideoFilterType::None); _console->GetSettings()->SetVideoFilterType(VideoFilterType::None);
@ -358,8 +365,7 @@ extern "C" {
} }
} }
var.key = MesenPalette; if(readVariable(MesenPalette, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
if(value == "Default") { if(value == "Default") {
_console->GetSettings()->SetRgbPalette(defaultPalette); _console->GetSettings()->SetRgbPalette(defaultPalette);
@ -388,16 +394,14 @@ extern "C" {
} }
bool beforeNmi = true; bool beforeNmi = true;
var.key = MesenOverclockType; if(readVariable(MesenOverclockType, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
if(value == "After NMI") { if(value == "After NMI") {
beforeNmi = false; beforeNmi = false;
} }
} }
var.key = MesenOverclock; if(readVariable(MesenOverclock, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
int lineCount = 0; int lineCount = 0;
if(value == "None") { if(value == "None") {
@ -421,8 +425,7 @@ extern "C" {
int overscanHorizontal = 0; int overscanHorizontal = 0;
int overscanVertical = 0; int overscanVertical = 0;
var.key = MesenOverscanHorizontal; if(readVariable(MesenOverscanHorizontal, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
if(value == "8px") { if(value == "8px") {
overscanHorizontal = 8; overscanHorizontal = 8;
@ -431,8 +434,7 @@ extern "C" {
} }
} }
var.key = MesenOverscanVertical; if(readVariable(MesenOverscanVertical, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
if(value == "8px") { if(value == "8px") {
overscanVertical = 8; overscanVertical = 8;
@ -442,8 +444,7 @@ extern "C" {
} }
_console->GetSettings()->SetOverscanDimensions(overscanHorizontal, overscanHorizontal, overscanVertical, overscanVertical); _console->GetSettings()->SetOverscanDimensions(overscanHorizontal, overscanHorizontal, overscanVertical, overscanVertical);
var.key = MesenAspectRatio; if(readVariable(MesenAspectRatio, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
if(value == "Auto") { if(value == "Auto") {
_console->GetSettings()->SetVideoAspectRatio(VideoAspectRatio::Auto, 1.0); _console->GetSettings()->SetVideoAspectRatio(VideoAspectRatio::Auto, 1.0);
@ -460,8 +461,7 @@ extern "C" {
} }
} }
var.key = MesenRegion; if(readVariable(MesenRegion, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
if(value == "Auto") { if(value == "Auto") {
_console->GetSettings()->SetNesModel(NesModel::Auto); _console->GetSettings()->SetNesModel(NesModel::Auto);
@ -474,8 +474,7 @@ extern "C" {
} }
} }
var.key = MesenRamState; if(readVariable(MesenRamState, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
if(value == "All 0s (Default)") { if(value == "All 0s (Default)") {
_console->GetSettings()->SetRamPowerOnState(RamPowerOnState::AllZeros); _console->GetSettings()->SetRamPowerOnState(RamPowerOnState::AllZeros);
@ -486,8 +485,7 @@ extern "C" {
} }
} }
var.key = MesenScreenRotation; if(readVariable(MesenScreenRotation, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
if(value == "None") { if(value == "None") {
_console->GetSettings()->SetScreenRotation(0); _console->GetSettings()->SetScreenRotation(0);
@ -502,8 +500,7 @@ extern "C" {
int turboSpeed = 0; int turboSpeed = 0;
bool turboEnabled = true; bool turboEnabled = true;
var.key = MesenControllerTurboSpeed; if(readVariable(MesenControllerTurboSpeed, var)) {
if(retroEnv(RETRO_ENVIRONMENT_GET_VARIABLE, &var)) {
string value = string(var.value); string value = string(var.value);
if(value == "Slow") { if(value == "Slow") {
turboSpeed = 0; turboSpeed = 0;