mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2026-04-11 14:00:51 -04:00
* Add missing Language setting loading/saving. This was added after the original OnionConfig PR, which is why support for it was missing. * Change MovieConfigLoader to reuse ConfigInfos. Less duplication. * Extract MovieConfigLoader::Save into SaveToDTM. The DTM should use the current config and not just the movie layer. This makes more sense than just saving the movie layer, which may not always exist, and also fixes a crash that would happen when creating a new recording because the movie layer wouldn't exist in that case. (Plus, having to get the loader from the layer and call ChangeDTM on it manually is not very pretty.)
97 lines
3.6 KiB
C++
97 lines
3.6 KiB
C++
// Copyright 2016 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#include "Core/ConfigLoaders/MovieConfigLoader.h"
|
|
|
|
#include <cstring>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
#include "Common/CommonFuncs.h"
|
|
#include "Common/CommonTypes.h"
|
|
#include "Common/Config/Config.h"
|
|
#include "Common/FileUtil.h"
|
|
|
|
#include "Core/Config/GraphicsSettings.h"
|
|
#include "Core/Config/MainSettings.h"
|
|
#include "Core/Config/SYSCONFSettings.h"
|
|
#include "Core/ConfigManager.h"
|
|
#include "Core/Movie.h"
|
|
#include "VideoCommon/VideoConfig.h"
|
|
|
|
namespace ConfigLoaders
|
|
{
|
|
static void LoadFromDTM(Config::Layer* config_layer, Movie::DTMHeader* dtm)
|
|
{
|
|
config_layer->Set(Config::MAIN_CPU_THREAD, dtm->bDualCore);
|
|
config_layer->Set(Config::MAIN_DSP_HLE, dtm->bDSPHLE);
|
|
config_layer->Set(Config::MAIN_FAST_DISC_SPEED, dtm->bFastDiscSpeed);
|
|
config_layer->Set(Config::MAIN_CPU_CORE, static_cast<int>(dtm->CPUCore));
|
|
config_layer->Set(Config::MAIN_SYNC_GPU, dtm->bSyncGPU);
|
|
config_layer->Set(Config::MAIN_GFX_BACKEND,
|
|
std::string(reinterpret_cast<char*>(dtm->videoBackend)));
|
|
|
|
config_layer->Set(Config::SYSCONF_PROGRESSIVE_SCAN, dtm->bProgressive);
|
|
config_layer->Set(Config::SYSCONF_PAL60, dtm->bPAL60);
|
|
if (dtm->bWii)
|
|
config_layer->Set(Config::SYSCONF_LANGUAGE, static_cast<u32>(dtm->language));
|
|
else
|
|
config_layer->Set(Config::MAIN_GC_LANGUAGE, static_cast<int>(dtm->language));
|
|
|
|
config_layer->Set(Config::GFX_USE_XFB, dtm->bUseXFB);
|
|
config_layer->Set(Config::GFX_USE_REAL_XFB, dtm->bUseRealXFB);
|
|
config_layer->Set(Config::GFX_HACK_EFB_ACCESS_ENABLE, dtm->bEFBAccessEnable);
|
|
config_layer->Set(Config::GFX_HACK_SKIP_EFB_COPY_TO_RAM, dtm->bSkipEFBCopyToRam);
|
|
config_layer->Set(Config::GFX_HACK_EFB_EMULATE_FORMAT_CHANGES, dtm->bEFBEmulateFormatChanges);
|
|
}
|
|
|
|
void SaveToDTM(Config::Layer* config_layer, Movie::DTMHeader* dtm)
|
|
{
|
|
dtm->bDualCore = config_layer->Get(Config::MAIN_CPU_THREAD);
|
|
dtm->bDSPHLE = config_layer->Get(Config::MAIN_DSP_HLE);
|
|
dtm->bFastDiscSpeed = config_layer->Get(Config::MAIN_FAST_DISC_SPEED);
|
|
dtm->CPUCore = config_layer->Get(Config::MAIN_CPU_CORE);
|
|
dtm->bSyncGPU = config_layer->Get(Config::MAIN_SYNC_GPU);
|
|
const std::string video_backend = config_layer->Get(Config::MAIN_GFX_BACKEND);
|
|
|
|
dtm->bProgressive = config_layer->Get(Config::SYSCONF_PROGRESSIVE_SCAN);
|
|
dtm->bPAL60 = config_layer->Get(Config::SYSCONF_PAL60);
|
|
if (dtm->bWii)
|
|
dtm->language = config_layer->Get(Config::SYSCONF_LANGUAGE);
|
|
else
|
|
dtm->language = config_layer->Get(Config::MAIN_GC_LANGUAGE);
|
|
|
|
dtm->bUseXFB = config_layer->Get(Config::GFX_USE_XFB);
|
|
dtm->bUseRealXFB = config_layer->Get(Config::GFX_USE_REAL_XFB);
|
|
dtm->bEFBAccessEnable = config_layer->Get(Config::GFX_HACK_EFB_ACCESS_ENABLE);
|
|
dtm->bSkipEFBCopyToRam = config_layer->Get(Config::GFX_HACK_SKIP_EFB_COPY_TO_RAM);
|
|
dtm->bEFBEmulateFormatChanges = config_layer->Get(Config::GFX_HACK_EFB_EMULATE_FORMAT_CHANGES);
|
|
|
|
// This never used the regular config
|
|
dtm->bSkipIdle = true;
|
|
dtm->bEFBCopyEnable = true;
|
|
dtm->bEFBCopyCacheEnable = false;
|
|
|
|
strncpy(reinterpret_cast<char*>(dtm->videoBackend), video_backend.c_str(),
|
|
ArraySize(dtm->videoBackend));
|
|
}
|
|
|
|
// TODO: Future project, let this support all the configuration options.
|
|
// This will require a large break to the DTM format
|
|
void MovieConfigLayerLoader::Load(Config::Layer* config_layer)
|
|
{
|
|
LoadFromDTM(config_layer, m_header);
|
|
}
|
|
|
|
void MovieConfigLayerLoader::Save(Config::Layer* config_layer)
|
|
{
|
|
}
|
|
|
|
// Loader generation
|
|
std::unique_ptr<Config::ConfigLayerLoader> GenerateMovieConfigLoader(Movie::DTMHeader* header)
|
|
{
|
|
return std::make_unique<MovieConfigLayerLoader>(header);
|
|
}
|
|
}
|