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 "cfg.h"
|
||||||
#include "hw/maple/maple_cfg.h"
|
#include "hw/maple/maple_cfg.h"
|
||||||
|
|
||||||
extern int renderer_changed;
|
|
||||||
|
|
||||||
namespace config {
|
namespace config {
|
||||||
|
|
||||||
class BaseOption {
|
class BaseOption {
|
||||||
|
@ -113,7 +111,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void reset() override {
|
virtual void reset() override {
|
||||||
value = defaultValue;
|
set(defaultValue);
|
||||||
overridden = false;
|
overridden = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,25 +314,35 @@ public:
|
||||||
bool isOpenGL() const {
|
bool isOpenGL() const {
|
||||||
return value == RenderType::OpenGL || value == RenderType::OpenGL_OIT;
|
return value == RenderType::OpenGL || value == RenderType::OpenGL_OIT;
|
||||||
}
|
}
|
||||||
|
void set(RenderType v)
|
||||||
|
{
|
||||||
|
newValue = v;
|
||||||
|
}
|
||||||
RenderType& operator=(const RenderType& v) { set(v); return value; }
|
RenderType& operator=(const RenderType& v) { set(v); return value; }
|
||||||
|
|
||||||
virtual void load() override {
|
virtual void load() override {
|
||||||
RenderType current = value;
|
RenderType current = value;
|
||||||
Option<RenderType>::load();
|
Option<RenderType>::load();
|
||||||
if (current != value) {
|
newValue = value;
|
||||||
::renderer_changed = (int)value;
|
value = current;
|
||||||
value = current;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void reset() override {
|
virtual void reset() override {
|
||||||
RenderType current = value;
|
RenderType current = value;
|
||||||
Option<RenderType>::reset();
|
Option<RenderType>::reset();
|
||||||
if (current != value) {
|
newValue = value;
|
||||||
::renderer_changed = (int)value;
|
value = current;
|
||||||
value = current;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool pendingChange() {
|
||||||
|
return newValue != value;
|
||||||
|
}
|
||||||
|
void commit() {
|
||||||
|
value = newValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
RenderType newValue = RenderType();
|
||||||
};
|
};
|
||||||
extern RendererOption RendererType;
|
extern RendererOption RendererType;
|
||||||
extern Option<bool> UseMipmaps;
|
extern Option<bool> UseMipmaps;
|
||||||
|
|
|
@ -405,8 +405,7 @@ int reicast_init(int argc, char* argv[])
|
||||||
config::Settings::instance().load(false);
|
config::Settings::instance().load(false);
|
||||||
}
|
}
|
||||||
// Force the renderer type now since we're not switching
|
// Force the renderer type now since we're not switching
|
||||||
if (renderer_changed != -1)
|
config::RendererType.commit();
|
||||||
config::RendererType = (RenderType)renderer_changed;
|
|
||||||
|
|
||||||
os_CreateWindow();
|
os_CreateWindow();
|
||||||
os_SetupInput();
|
os_SetupInput();
|
||||||
|
|
|
@ -1613,7 +1613,7 @@ static void gui_display_settings()
|
||||||
if (vulkan != !config::RendererType.isOpenGL())
|
if (vulkan != !config::RendererType.isOpenGL())
|
||||||
pvr_rend = !vulkan ? RenderType::OpenGL
|
pvr_rend = !vulkan ? RenderType::OpenGL
|
||||||
: config::RendererType == RenderType::OpenGL_OIT ? RenderType::Vulkan_OIT : RenderType::Vulkan;
|
: 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)
|
void gui_display_notification(const char *msg, int duration)
|
||||||
|
|
|
@ -26,8 +26,8 @@
|
||||||
#include "cfg/option.h"
|
#include "cfg/option.h"
|
||||||
|
|
||||||
bool mainui_enabled;
|
bool mainui_enabled;
|
||||||
int renderer_changed = -1; // Signals the renderer thread to switch renderer
|
|
||||||
u32 MainFrameCount;
|
u32 MainFrameCount;
|
||||||
|
static bool forceReinit;
|
||||||
|
|
||||||
void UpdateInputState();
|
void UpdateInputState();
|
||||||
|
|
||||||
|
@ -69,7 +69,6 @@ void mainui_term()
|
||||||
void mainui_loop()
|
void mainui_loop()
|
||||||
{
|
{
|
||||||
mainui_enabled = true;
|
mainui_enabled = true;
|
||||||
renderer_changed = (int)(RenderType)config::RendererType;
|
|
||||||
mainui_init();
|
mainui_init();
|
||||||
|
|
||||||
while (mainui_enabled)
|
while (mainui_enabled)
|
||||||
|
@ -84,21 +83,16 @@ void mainui_loop()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (renderer_changed != (int)(RenderType)config::RendererType)
|
if (config::RendererType.pendingChange() || forceReinit)
|
||||||
{
|
{
|
||||||
|
bool openGl = config::RendererType.isOpenGL();
|
||||||
mainui_term();
|
mainui_term();
|
||||||
if (renderer_changed == -1
|
config::RendererType.commit();
|
||||||
|| config::RendererType.isOpenGL() != ((RenderType)renderer_changed == RenderType::OpenGL || (RenderType)renderer_changed == RenderType::OpenGL_OIT))
|
if (openGl != config::RendererType.isOpenGL() || forceReinit)
|
||||||
{
|
|
||||||
// Switch between vulkan and opengl (or full reinit)
|
// Switch between vulkan and opengl (or full reinit)
|
||||||
SwitchRenderApi(renderer_changed == -1 ? config::RendererType : (RenderType)renderer_changed);
|
SwitchRenderApi();
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
config::RendererType = (RenderType)renderer_changed;
|
|
||||||
}
|
|
||||||
renderer_changed = (int)(RenderType)config::RendererType;
|
|
||||||
mainui_init();
|
mainui_init();
|
||||||
|
forceReinit = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,5 +106,5 @@ void mainui_stop()
|
||||||
|
|
||||||
void mainui_reinit()
|
void mainui_reinit()
|
||||||
{
|
{
|
||||||
renderer_changed = -1;
|
forceReinit = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
extern bool mainui_enabled; // Signals the UI thread to exit
|
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;
|
extern u32 MainFrameCount;
|
||||||
|
|
||||||
bool mainui_rend_frame();
|
bool mainui_rend_frame();
|
||||||
|
|
|
@ -26,6 +26,11 @@
|
||||||
extern VulkanContext theVulkanContext;
|
extern VulkanContext theVulkanContext;
|
||||||
#endif
|
#endif
|
||||||
void InitRenderApi();
|
void InitRenderApi();
|
||||||
void SwitchRenderApi(RenderType newApi);
|
|
||||||
void TermRenderApi();
|
void TermRenderApi();
|
||||||
|
|
||||||
|
static inline void SwitchRenderApi()
|
||||||
|
{
|
||||||
|
TermRenderApi();
|
||||||
|
InitRenderApi();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,13 +42,6 @@ void InitRenderApi()
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SwitchRenderApi(RenderType newApi)
|
|
||||||
{
|
|
||||||
TermRenderApi();
|
|
||||||
config::RendererType = newApi;
|
|
||||||
InitRenderApi();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TermRenderApi()
|
void TermRenderApi()
|
||||||
{
|
{
|
||||||
#ifdef USE_VULKAN
|
#ifdef USE_VULKAN
|
||||||
|
|
Loading…
Reference in New Issue