HostInterface: Add function to switch between sw/hw rendering
This commit is contained in:
@ -36,8 +36,8 @@ System::System(HostInterface* host_interface) : m_host_interface(host_interface)
|
||||
m_spu = std::make_unique<SPU>();
|
||||
m_mdec = std::make_unique<MDEC>();
|
||||
m_sio = std::make_unique<SIO>();
|
||||
m_region = host_interface->GetSettings().region;
|
||||
m_cpu_execution_mode = host_interface->GetSettings().cpu_execution_mode;
|
||||
m_region = host_interface->m_settings.region;
|
||||
m_cpu_execution_mode = host_interface->m_settings.cpu_execution_mode;
|
||||
}
|
||||
|
||||
System::~System() = default;
|
||||
@ -45,13 +45,13 @@ System::~System() = default;
|
||||
std::unique_ptr<System> System::Create(HostInterface* host_interface)
|
||||
{
|
||||
std::unique_ptr<System> system(new System(host_interface));
|
||||
if (!system->CreateGPU())
|
||||
if (!system->CreateGPU(host_interface->m_settings.gpu_renderer))
|
||||
return {};
|
||||
|
||||
return system;
|
||||
}
|
||||
|
||||
bool System::RecreateGPU()
|
||||
bool System::RecreateGPU(GPURenderer renderer)
|
||||
{
|
||||
// save current state
|
||||
std::unique_ptr<ByteStream> state_stream = ByteStream_CreateGrowableMemoryStream();
|
||||
@ -62,7 +62,7 @@ bool System::RecreateGPU()
|
||||
|
||||
// create new renderer
|
||||
m_gpu.reset();
|
||||
if (!CreateGPU())
|
||||
if (!CreateGPU(renderer))
|
||||
{
|
||||
Panic("Failed to recreate GPU");
|
||||
return false;
|
||||
@ -193,9 +193,9 @@ void System::InitializeComponents()
|
||||
m_mdec->Initialize(this, m_dma.get());
|
||||
}
|
||||
|
||||
bool System::CreateGPU()
|
||||
bool System::CreateGPU(GPURenderer renderer)
|
||||
{
|
||||
switch (m_host_interface->GetSettings().gpu_renderer)
|
||||
switch (renderer)
|
||||
{
|
||||
case GPURenderer::HardwareOpenGL:
|
||||
m_gpu = m_host_interface->GetDisplay()->GetRenderAPI() == HostDisplay::RenderAPI::OpenGLES ?
|
||||
@ -220,7 +220,6 @@ bool System::CreateGPU()
|
||||
{
|
||||
Log_ErrorPrintf("Failed to initialize GPU, falling back to software");
|
||||
m_gpu.reset();
|
||||
m_host_interface->GetSettings().gpu_renderer = GPURenderer::Software;
|
||||
m_gpu = GPU::CreateSoftwareRenderer();
|
||||
if (!m_gpu->Initialize(m_host_interface->GetDisplay(), this, m_dma.get(), m_interrupt_controller.get(),
|
||||
m_timers.get()))
|
||||
|
||||
Reference in New Issue
Block a user