Vulkan renderer setting was reset to off when starting a game
This commit is contained in:
parent
60ae4bcfc1
commit
ca107953fe
|
@ -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;
|
||||
newValue = value;
|
||||
value = current;
|
||||
}
|
||||
}
|
||||
|
||||
virtual void reset() override {
|
||||
RenderType current = value;
|
||||
Option<RenderType>::reset();
|
||||
if (current != value) {
|
||||
::renderer_changed = (int)value;
|
||||
newValue = value;
|
||||
value = current;
|
||||
}
|
||||
|
||||
bool pendingChange() {
|
||||
return newValue != value;
|
||||
}
|
||||
void commit() {
|
||||
value = newValue;
|
||||
}
|
||||
|
||||
private:
|
||||
RenderType newValue = RenderType();
|
||||
};
|
||||
extern RendererOption RendererType;
|
||||
extern Option<bool> UseMipmaps;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -26,6 +26,11 @@
|
|||
extern VulkanContext theVulkanContext;
|
||||
#endif
|
||||
void InitRenderApi();
|
||||
void SwitchRenderApi(RenderType newApi);
|
||||
void TermRenderApi();
|
||||
|
||||
static inline void SwitchRenderApi()
|
||||
{
|
||||
TermRenderApi();
|
||||
InitRenderApi();
|
||||
}
|
||||
|
||||
|
|
|
@ -42,13 +42,6 @@ void InitRenderApi()
|
|||
exit(1);
|
||||
}
|
||||
|
||||
void SwitchRenderApi(RenderType newApi)
|
||||
{
|
||||
TermRenderApi();
|
||||
config::RendererType = newApi;
|
||||
InitRenderApi();
|
||||
}
|
||||
|
||||
void TermRenderApi()
|
||||
{
|
||||
#ifdef USE_VULKAN
|
||||
|
|
Loading…
Reference in New Issue