mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-05 14:31:24 +12:00
Always initialize SDL from main thread
This commit is contained in:
parent
cb5fd17635
commit
7e7943f962
3 changed files with 29 additions and 16 deletions
|
@ -1,6 +1,8 @@
|
||||||
#ifdef HAVE_SDL3
|
#ifdef HAVE_SDL3
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
#include "sdl_instance.h"
|
||||||
|
#include "Emu/System.h"
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
|
@ -11,10 +13,6 @@
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "util/logs.hpp"
|
|
||||||
|
|
||||||
#include "sdl_instance.h"
|
|
||||||
|
|
||||||
LOG_CHANNEL(sdl_log, "SDL");
|
LOG_CHANNEL(sdl_log, "SDL");
|
||||||
|
|
||||||
sdl_instance::~sdl_instance()
|
sdl_instance::~sdl_instance()
|
||||||
|
@ -35,9 +33,12 @@ sdl_instance& sdl_instance::get_instance()
|
||||||
|
|
||||||
void sdl_instance::pump_events()
|
void sdl_instance::pump_events()
|
||||||
{
|
{
|
||||||
const std::lock_guard<std::mutex> lock(m_instance_mutex);
|
std::lock_guard lock(m_instance_mutex);
|
||||||
|
|
||||||
if (m_initialized)
|
if (m_initialized)
|
||||||
|
{
|
||||||
SDL_PumpEvents();
|
SDL_PumpEvents();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sdl_instance::set_hint(const char* name, const char* value)
|
void sdl_instance::set_hint(const char* name, const char* value)
|
||||||
|
@ -50,7 +51,25 @@ void sdl_instance::set_hint(const char* name, const char* value)
|
||||||
|
|
||||||
bool sdl_instance::initialize()
|
bool sdl_instance::initialize()
|
||||||
{
|
{
|
||||||
const std::lock_guard<std::mutex> lock(m_instance_mutex);
|
std::lock_guard lock(m_instance_mutex);
|
||||||
|
|
||||||
|
if (m_initialized)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool instance_success = false;
|
||||||
|
|
||||||
|
Emu.BlockingCallFromMainThread([this, &instance_success]()
|
||||||
|
{
|
||||||
|
instance_success = initialize_impl();
|
||||||
|
});
|
||||||
|
|
||||||
|
return instance_success;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool sdl_instance::initialize_impl()
|
||||||
|
{
|
||||||
// Only init SDL once. SDL uses a global state internally...
|
// Only init SDL once. SDL uses a global state internally...
|
||||||
if (m_initialized)
|
if (m_initialized)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,7 +8,7 @@ struct sdl_instance
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
sdl_instance() = default;
|
sdl_instance() = default;
|
||||||
~sdl_instance();
|
virtual ~sdl_instance();
|
||||||
|
|
||||||
static sdl_instance& get_instance();
|
static sdl_instance& get_instance();
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void set_hint(const char* name, const char* value);
|
void set_hint(const char* name, const char* value);
|
||||||
|
bool initialize_impl();
|
||||||
|
|
||||||
bool m_initialized = false;
|
bool m_initialized = false;
|
||||||
std::mutex m_instance_mutex;
|
std::mutex m_instance_mutex;
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "sdl_pad_handler.h"
|
#include "sdl_pad_handler.h"
|
||||||
|
#include "sdl_instance.h"
|
||||||
#include "Emu/system_utils.hpp"
|
#include "Emu/system_utils.hpp"
|
||||||
#include "Emu/system_config.h"
|
#include "Emu/system_config.h"
|
||||||
#include "Emu/System.h"
|
#include "Emu/System.h"
|
||||||
#include "sdl_instance.h"
|
|
||||||
|
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
|
@ -180,14 +180,7 @@ bool sdl_pad_handler::Init()
|
||||||
if (m_is_init)
|
if (m_is_init)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
bool instance_success;
|
if (!sdl_instance::get_instance().initialize())
|
||||||
|
|
||||||
Emu.BlockingCallFromMainThread([&instance_success]()
|
|
||||||
{
|
|
||||||
instance_success = sdl_instance::get_instance().initialize();
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!instance_success)
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (g_cfg.io.load_sdl_mappings)
|
if (g_cfg.io.load_sdl_mappings)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue