Vulkan renderer setting was reset to off when starting a game

This commit is contained in:
Flyinghead 2021-03-03 09:40:52 +01:00
parent 60ae4bcfc1
commit ca107953fe
7 changed files with 35 additions and 37 deletions

View File

@ -23,8 +23,6 @@
#include "cfg.h"
#include "hw/maple/maple_cfg.h"
extern int renderer_changed;
namespace config {
class BaseOption {
@ -113,7 +111,7 @@ public:
}
virtual void reset() override {
value = defaultValue;
set(defaultValue);
overridden = false;
}
@ -316,25 +314,35 @@ public:
bool isOpenGL() const {
return value == RenderType::OpenGL || value == RenderType::OpenGL_OIT;
}
void set(RenderType v)
{
newValue = v;
}
RenderType& operator=(const RenderType& v) { set(v); return value; }
virtual void load() override {
RenderType current = value;
Option<RenderType>::load();
if (current != value) {
::renderer_changed = (int)value;
value = current;
}
newValue = value;
value = current;
}
virtual void reset() override {
RenderType current = value;
Option<RenderType>::reset();
if (current != value) {
::renderer_changed = (int)value;
value = current;
}
newValue = value;
value = current;
}
bool pendingChange() {
return newValue != value;
}
void commit() {
value = newValue;
}
private:
RenderType newValue = RenderType();
};
extern RendererOption RendererType;
extern Option<bool> UseMipmaps;

View File

@ -405,8 +405,7 @@ int reicast_init(int argc, char* argv[])
config::Settings::instance().load(false);
}
// Force the renderer type now since we're not switching
if (renderer_changed != -1)
config::RendererType = (RenderType)renderer_changed;
config::RendererType.commit();
os_CreateWindow();
os_SetupInput();

View File

@ -1613,7 +1613,7 @@ static void gui_display_settings()
if (vulkan != !config::RendererType.isOpenGL())
pvr_rend = !vulkan ? RenderType::OpenGL
: config::RendererType == RenderType::OpenGL_OIT ? RenderType::Vulkan_OIT : RenderType::Vulkan;
renderer_changed = (int)pvr_rend;
config::RendererType = pvr_rend;
}
void gui_display_notification(const char *msg, int duration)

View File

@ -26,8 +26,8 @@
#include "cfg/option.h"
bool mainui_enabled;
int renderer_changed = -1; // Signals the renderer thread to switch renderer
u32 MainFrameCount;
static bool forceReinit;
void UpdateInputState();
@ -69,7 +69,6 @@ void mainui_term()
void mainui_loop()
{
mainui_enabled = true;
renderer_changed = (int)(RenderType)config::RendererType;
mainui_init();
while (mainui_enabled)
@ -84,21 +83,16 @@ void mainui_loop()
#endif
}
if (renderer_changed != (int)(RenderType)config::RendererType)
if (config::RendererType.pendingChange() || forceReinit)
{
bool openGl = config::RendererType.isOpenGL();
mainui_term();
if (renderer_changed == -1
|| config::RendererType.isOpenGL() != ((RenderType)renderer_changed == RenderType::OpenGL || (RenderType)renderer_changed == RenderType::OpenGL_OIT))
{
config::RendererType.commit();
if (openGl != config::RendererType.isOpenGL() || forceReinit)
// Switch between vulkan and opengl (or full reinit)
SwitchRenderApi(renderer_changed == -1 ? config::RendererType : (RenderType)renderer_changed);
}
else
{
config::RendererType = (RenderType)renderer_changed;
}
renderer_changed = (int)(RenderType)config::RendererType;
SwitchRenderApi();
mainui_init();
forceReinit = false;
}
}
@ -112,5 +106,5 @@ void mainui_stop()
void mainui_reinit()
{
renderer_changed = -1;
forceReinit = true;
}

View File

@ -20,7 +20,6 @@
#include "types.h"
extern bool mainui_enabled; // Signals the UI thread to exit
extern int renderer_changed; // Signals the UI thread to switch renderer when different from settings.pvr.rend
extern u32 MainFrameCount;
bool mainui_rend_frame();

View File

@ -26,6 +26,11 @@
extern VulkanContext theVulkanContext;
#endif
void InitRenderApi();
void SwitchRenderApi(RenderType newApi);
void TermRenderApi();
static inline void SwitchRenderApi()
{
TermRenderApi();
InitRenderApi();
}

View File

@ -42,13 +42,6 @@ void InitRenderApi()
exit(1);
}
void SwitchRenderApi(RenderType newApi)
{
TermRenderApi();
config::RendererType = newApi;
InitRenderApi();
}
void TermRenderApi()
{
#ifdef USE_VULKAN