VideoCommon: Pass WindowSystemInfo to InitBackendInfo
This commit is contained in:
parent
7845fb00ee
commit
c63f0f37cd
|
@ -261,7 +261,7 @@ bool Init(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
|
||||||
Host_UpdateMainFrame(); // Disable any menus or buttons at boot
|
Host_UpdateMainFrame(); // Disable any menus or buttons at boot
|
||||||
|
|
||||||
// Manually reactivate the video backend in case a GameINI overrides the video backend setting.
|
// Manually reactivate the video backend in case a GameINI overrides the video backend setting.
|
||||||
VideoBackendBase::PopulateBackendInfo();
|
VideoBackendBase::PopulateBackendInfo(wsi);
|
||||||
|
|
||||||
// Issue any API calls which must occur on the main thread for the graphics backend.
|
// Issue any API calls which must occur on the main thread for the graphics backend.
|
||||||
WindowSystemInfo prepared_wsi(wsi);
|
WindowSystemInfo prepared_wsi(wsi);
|
||||||
|
@ -579,7 +579,7 @@ static void EmuThread(std::unique_ptr<BootParameters> boot, WindowSystemInfo wsi
|
||||||
system.GetPowerPC().GetDebugInterface().Clear(guard);
|
system.GetPowerPC().GetDebugInterface().Clear(guard);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
VideoBackendBase::PopulateBackendInfo();
|
VideoBackendBase::PopulateBackendInfo(wsi);
|
||||||
|
|
||||||
if (!g_video_backend->Initialize(wsi))
|
if (!g_video_backend->Initialize(wsi))
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include "VideoCommon/VideoBackendBase.h"
|
#include "VideoCommon/VideoBackendBase.h"
|
||||||
#include "VideoCommon/VideoConfig.h"
|
#include "VideoCommon/VideoConfig.h"
|
||||||
|
|
||||||
GraphicsWindow::GraphicsWindow(MainWindow* parent) : QDialog(parent)
|
GraphicsWindow::GraphicsWindow(MainWindow* parent) : QDialog(parent), m_main_window(parent)
|
||||||
{
|
{
|
||||||
CreateMainLayout();
|
CreateMainLayout();
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ void GraphicsWindow::CreateMainLayout()
|
||||||
void GraphicsWindow::OnBackendChanged(const QString& backend_name)
|
void GraphicsWindow::OnBackendChanged(const QString& backend_name)
|
||||||
{
|
{
|
||||||
Config::SetBase(Config::MAIN_GFX_BACKEND, backend_name.toStdString());
|
Config::SetBase(Config::MAIN_GFX_BACKEND, backend_name.toStdString());
|
||||||
VideoBackendBase::PopulateBackendInfoFromUI();
|
VideoBackendBase::PopulateBackendInfoFromUI(m_main_window->GetWindowSystemInfo());
|
||||||
|
|
||||||
setWindowTitle(
|
setWindowTitle(
|
||||||
tr("%1 Graphics Configuration").arg(tr(g_video_backend->GetDisplayName().c_str())));
|
tr("%1 Graphics Configuration").arg(tr(g_video_backend->GetDisplayName().c_str())));
|
||||||
|
|
|
@ -28,4 +28,6 @@ signals:
|
||||||
private:
|
private:
|
||||||
void CreateMainLayout();
|
void CreateMainLayout();
|
||||||
void OnBackendChanged(const QString& backend);
|
void OnBackendChanged(const QString& backend);
|
||||||
|
|
||||||
|
MainWindow* const m_main_window;
|
||||||
};
|
};
|
||||||
|
|
|
@ -343,12 +343,17 @@ MainWindow::~MainWindow()
|
||||||
Config::Save();
|
Config::Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WindowSystemInfo MainWindow::GetWindowSystemInfo() const
|
||||||
|
{
|
||||||
|
return ::GetWindowSystemInfo(m_render_widget->windowHandle());
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::InitControllers()
|
void MainWindow::InitControllers()
|
||||||
{
|
{
|
||||||
if (g_controller_interface.IsInit())
|
if (g_controller_interface.IsInit())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
UICommon::InitControllers(GetWindowSystemInfo(windowHandle()));
|
UICommon::InitControllers(::GetWindowSystemInfo(windowHandle()));
|
||||||
|
|
||||||
m_hotkey_scheduler = new HotkeyScheduler();
|
m_hotkey_scheduler = new HotkeyScheduler();
|
||||||
m_hotkey_scheduler->Start();
|
m_hotkey_scheduler->Start();
|
||||||
|
@ -1098,7 +1103,7 @@ void MainWindow::StartGame(std::unique_ptr<BootParameters>&& parameters)
|
||||||
|
|
||||||
// Boot up, show an error if it fails to load the game.
|
// Boot up, show an error if it fails to load the game.
|
||||||
if (!BootManager::BootCore(std::move(parameters),
|
if (!BootManager::BootCore(std::move(parameters),
|
||||||
GetWindowSystemInfo(m_render_widget->windowHandle())))
|
::GetWindowSystemInfo(m_render_widget->windowHandle())))
|
||||||
{
|
{
|
||||||
ModalMessageBox::critical(this, tr("Error"), tr("Failed to init core"), QMessageBox::Ok);
|
ModalMessageBox::critical(this, tr("Error"), tr("Failed to init core"), QMessageBox::Ok);
|
||||||
HideRenderWidget();
|
HideRenderWidget();
|
||||||
|
@ -1206,7 +1211,7 @@ void MainWindow::HideRenderWidget(bool reinit, bool is_exit)
|
||||||
// The controller interface will still be registered to the old render widget, if the core
|
// The controller interface will still be registered to the old render widget, if the core
|
||||||
// has booted. Therefore, we should re-bind it to the main window for now. When the core
|
// has booted. Therefore, we should re-bind it to the main window for now. When the core
|
||||||
// is next started, it will be swapped back to the new render widget.
|
// is next started, it will be swapped back to the new render widget.
|
||||||
g_controller_interface.ChangeWindow(GetWindowSystemInfo(windowHandle()).render_window,
|
g_controller_interface.ChangeWindow(::GetWindowSystemInfo(windowHandle()).render_window,
|
||||||
is_exit ? ControllerInterface::WindowChangeReason::Exit :
|
is_exit ? ControllerInterface::WindowChangeReason::Exit :
|
||||||
ControllerInterface::WindowChangeReason::Other);
|
ControllerInterface::WindowChangeReason::Other);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ class ThreadWidget;
|
||||||
class ToolBar;
|
class ToolBar;
|
||||||
class WatchWidget;
|
class WatchWidget;
|
||||||
class WiiTASInputWindow;
|
class WiiTASInputWindow;
|
||||||
|
struct WindowSystemInfo;
|
||||||
|
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
|
@ -76,6 +77,7 @@ public:
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
void Show();
|
void Show();
|
||||||
|
WindowSystemInfo GetWindowSystemInfo() const;
|
||||||
|
|
||||||
bool eventFilter(QObject* object, QEvent* event) override;
|
bool eventFilter(QObject* object, QEvent* event) override;
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ std::optional<std::string> VideoBackend::GetWarningMessage() const
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::InitBackendInfo()
|
void VideoBackend::InitBackendInfo(const WindowSystemInfo& wsi)
|
||||||
{
|
{
|
||||||
if (!D3DCommon::LoadLibraries())
|
if (!D3DCommon::LoadLibraries())
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -18,7 +18,7 @@ public:
|
||||||
std::string GetDisplayName() const override;
|
std::string GetDisplayName() const override;
|
||||||
std::optional<std::string> GetWarningMessage() const override;
|
std::optional<std::string> GetWarningMessage() const override;
|
||||||
|
|
||||||
void InitBackendInfo() override;
|
void InitBackendInfo(const WindowSystemInfo& wsi) override;
|
||||||
|
|
||||||
static constexpr const char* NAME = "D3D";
|
static constexpr const char* NAME = "D3D";
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ std::string VideoBackend::GetDisplayName() const
|
||||||
return "Direct3D 12";
|
return "Direct3D 12";
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::InitBackendInfo()
|
void VideoBackend::InitBackendInfo(const WindowSystemInfo& wsi)
|
||||||
{
|
{
|
||||||
if (!D3DCommon::LoadLibraries())
|
if (!D3DCommon::LoadLibraries())
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -16,7 +16,7 @@ public:
|
||||||
|
|
||||||
std::string GetName() const override;
|
std::string GetName() const override;
|
||||||
std::string GetDisplayName() const override;
|
std::string GetDisplayName() const override;
|
||||||
void InitBackendInfo() override;
|
void InitBackendInfo(const WindowSystemInfo& wsi) override;
|
||||||
|
|
||||||
static constexpr const char* NAME = "D3D12";
|
static constexpr const char* NAME = "D3D12";
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ void Metal::VideoBackend::Shutdown()
|
||||||
ObjectCache::Shutdown();
|
ObjectCache::Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Metal::VideoBackend::InitBackendInfo()
|
void Metal::VideoBackend::InitBackendInfo(const WindowSystemInfo& wsi)
|
||||||
{
|
{
|
||||||
@autoreleasepool
|
@autoreleasepool
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,7 +18,7 @@ public:
|
||||||
std::string GetDisplayName() const override;
|
std::string GetDisplayName() const override;
|
||||||
std::optional<std::string> GetWarningMessage() const override;
|
std::optional<std::string> GetWarningMessage() const override;
|
||||||
|
|
||||||
void InitBackendInfo() override;
|
void InitBackendInfo(const WindowSystemInfo& wsi) override;
|
||||||
|
|
||||||
void PrepareWindow(WindowSystemInfo& wsi) override;
|
void PrepareWindow(WindowSystemInfo& wsi) override;
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
namespace Null
|
namespace Null
|
||||||
{
|
{
|
||||||
void VideoBackend::InitBackendInfo()
|
void VideoBackend::InitBackendInfo(const WindowSystemInfo& wsi)
|
||||||
{
|
{
|
||||||
g_Config.backend_info.api_type = APIType::Nothing;
|
g_Config.backend_info.api_type = APIType::Nothing;
|
||||||
g_Config.backend_info.MaxTextureSize = 16384;
|
g_Config.backend_info.MaxTextureSize = 16384;
|
||||||
|
|
|
@ -15,7 +15,7 @@ public:
|
||||||
|
|
||||||
std::string GetName() const override { return NAME; }
|
std::string GetName() const override { return NAME; }
|
||||||
std::string GetDisplayName() const override;
|
std::string GetDisplayName() const override;
|
||||||
void InitBackendInfo() override;
|
void InitBackendInfo(const WindowSystemInfo& wsi) override;
|
||||||
|
|
||||||
static constexpr const char* NAME = "Null";
|
static constexpr const char* NAME = "Null";
|
||||||
};
|
};
|
||||||
|
|
|
@ -74,8 +74,45 @@ std::string VideoBackend::GetDisplayName() const
|
||||||
return _trans("OpenGL");
|
return _trans("OpenGL");
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackend::InitBackendInfo()
|
void VideoBackend::InitBackendInfo(const WindowSystemInfo& wsi)
|
||||||
{
|
{
|
||||||
|
std::unique_ptr<GLContext> temp_gl_context =
|
||||||
|
GLContext::Create(wsi, g_Config.stereo_mode == StereoMode::QuadBuffer, true, false,
|
||||||
|
Config::Get(Config::GFX_PREFER_GLES));
|
||||||
|
|
||||||
|
if (!temp_gl_context)
|
||||||
|
return;
|
||||||
|
|
||||||
|
FillBackendInfo(temp_gl_context.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VideoBackend::InitializeGLExtensions(GLContext* context)
|
||||||
|
{
|
||||||
|
// Init extension support.
|
||||||
|
if (!GLExtensions::Init(context))
|
||||||
|
{
|
||||||
|
// OpenGL 2.0 is required for all shader based drawings. There is no way to get this by
|
||||||
|
// extensions
|
||||||
|
PanicAlertFmtT("GPU: OGL ERROR: Does your video card support OpenGL 2.0?");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GLExtensions::Version() < 300)
|
||||||
|
{
|
||||||
|
// integer vertex attributes require a gl3 only function
|
||||||
|
PanicAlertFmtT("GPU: OGL ERROR: Need OpenGL version 3.\n"
|
||||||
|
"GPU: Does your video card support OpenGL 3?");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VideoBackend::FillBackendInfo(GLContext* context)
|
||||||
|
{
|
||||||
|
if (!InitializeGLExtensions(context))
|
||||||
|
return false;
|
||||||
|
|
||||||
g_Config.backend_info.api_type = APIType::OpenGL;
|
g_Config.backend_info.api_type = APIType::OpenGL;
|
||||||
g_Config.backend_info.MaxTextureSize = 16384;
|
g_Config.backend_info.MaxTextureSize = 16384;
|
||||||
g_Config.backend_info.bUsesLowerLeftOrigin = true;
|
g_Config.backend_info.bUsesLowerLeftOrigin = true;
|
||||||
|
@ -123,33 +160,6 @@ void VideoBackend::InitBackendInfo()
|
||||||
|
|
||||||
// aamodes - 1 is to stay consistent with D3D (means no AA)
|
// aamodes - 1 is to stay consistent with D3D (means no AA)
|
||||||
g_Config.backend_info.AAModes = {1, 2, 4, 8};
|
g_Config.backend_info.AAModes = {1, 2, 4, 8};
|
||||||
}
|
|
||||||
|
|
||||||
bool VideoBackend::InitializeGLExtensions(GLContext* context)
|
|
||||||
{
|
|
||||||
// Init extension support.
|
|
||||||
if (!GLExtensions::Init(context))
|
|
||||||
{
|
|
||||||
// OpenGL 2.0 is required for all shader based drawings. There is no way to get this by
|
|
||||||
// extensions
|
|
||||||
PanicAlertFmtT("GPU: OGL ERROR: Does your video card support OpenGL 2.0?");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GLExtensions::Version() < 300)
|
|
||||||
{
|
|
||||||
// integer vertex attributes require a gl3 only function
|
|
||||||
PanicAlertFmtT("GPU: OGL ERROR: Need OpenGL version 3.\n"
|
|
||||||
"GPU: Does your video card support OpenGL 3?");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VideoBackend::FillBackendInfo()
|
|
||||||
{
|
|
||||||
InitBackendInfo();
|
|
||||||
|
|
||||||
// check for the max vertex attributes
|
// check for the max vertex attributes
|
||||||
GLint numvertexattribs = 0;
|
GLint numvertexattribs = 0;
|
||||||
|
@ -184,7 +194,7 @@ bool VideoBackend::Initialize(const WindowSystemInfo& wsi)
|
||||||
if (!main_gl_context)
|
if (!main_gl_context)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!InitializeGLExtensions(main_gl_context.get()) || !FillBackendInfo())
|
if (!FillBackendInfo(main_gl_context.get()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
auto gfx = std::make_unique<OGLGfx>(std::move(main_gl_context), wsi.render_surface_scale);
|
auto gfx = std::make_unique<OGLGfx>(std::move(main_gl_context), wsi.render_surface_scale);
|
||||||
|
|
|
@ -19,12 +19,12 @@ public:
|
||||||
std::string GetName() const override;
|
std::string GetName() const override;
|
||||||
std::string GetDisplayName() const override;
|
std::string GetDisplayName() const override;
|
||||||
|
|
||||||
void InitBackendInfo() override;
|
void InitBackendInfo(const WindowSystemInfo& wsi) override;
|
||||||
|
|
||||||
static constexpr const char* NAME = "OGL";
|
static constexpr const char* NAME = "OGL";
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool InitializeGLExtensions(GLContext* context);
|
bool InitializeGLExtensions(GLContext* context);
|
||||||
bool FillBackendInfo();
|
bool FillBackendInfo(GLContext* context);
|
||||||
};
|
};
|
||||||
} // namespace OGL
|
} // namespace OGL
|
||||||
|
|
|
@ -62,7 +62,7 @@ std::optional<std::string> VideoSoftware::GetWarningMessage() const
|
||||||
"really want to enable software rendering? If unsure, select 'No'.");
|
"really want to enable software rendering? If unsure, select 'No'.");
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoSoftware::InitBackendInfo()
|
void VideoSoftware::InitBackendInfo(const WindowSystemInfo& wsi)
|
||||||
{
|
{
|
||||||
g_Config.backend_info.api_type = APIType::Nothing;
|
g_Config.backend_info.api_type = APIType::Nothing;
|
||||||
g_Config.backend_info.MaxTextureSize = 16384;
|
g_Config.backend_info.MaxTextureSize = 16384;
|
||||||
|
|
|
@ -17,7 +17,7 @@ class VideoSoftware : public VideoBackendBase
|
||||||
std::string GetDisplayName() const override;
|
std::string GetDisplayName() const override;
|
||||||
std::optional<std::string> GetWarningMessage() const override;
|
std::optional<std::string> GetWarningMessage() const override;
|
||||||
|
|
||||||
void InitBackendInfo() override;
|
void InitBackendInfo(const WindowSystemInfo& wsi) override;
|
||||||
|
|
||||||
static constexpr const char* NAME = "Software Renderer";
|
static constexpr const char* NAME = "Software Renderer";
|
||||||
};
|
};
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
namespace Vulkan
|
namespace Vulkan
|
||||||
{
|
{
|
||||||
void VideoBackend::InitBackendInfo()
|
void VideoBackend::InitBackendInfo(const WindowSystemInfo& wsi)
|
||||||
{
|
{
|
||||||
VulkanContext::PopulateBackendInfo(&g_Config);
|
VulkanContext::PopulateBackendInfo(&g_Config);
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ public:
|
||||||
|
|
||||||
std::string GetName() const override { return NAME; }
|
std::string GetName() const override { return NAME; }
|
||||||
std::string GetDisplayName() const override { return _trans("Vulkan"); }
|
std::string GetDisplayName() const override { return _trans("Vulkan"); }
|
||||||
void InitBackendInfo() override;
|
void InitBackendInfo(const WindowSystemInfo& wsi) override;
|
||||||
void PrepareWindow(WindowSystemInfo& wsi) override;
|
void PrepareWindow(WindowSystemInfo& wsi) override;
|
||||||
|
|
||||||
static constexpr const char* NAME = "Vulkan";
|
static constexpr const char* NAME = "Vulkan";
|
||||||
|
|
|
@ -281,7 +281,7 @@ void VideoBackendBase::ActivateBackend(const std::string& name)
|
||||||
g_video_backend = iter->get();
|
g_video_backend = iter->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackendBase::PopulateBackendInfo()
|
void VideoBackendBase::PopulateBackendInfo(const WindowSystemInfo& wsi)
|
||||||
{
|
{
|
||||||
g_Config.Refresh();
|
g_Config.Refresh();
|
||||||
// Reset backend_info so if the backend forgets to initialize something it doesn't end up using
|
// Reset backend_info so if the backend forgets to initialize something it doesn't end up using
|
||||||
|
@ -289,18 +289,18 @@ void VideoBackendBase::PopulateBackendInfo()
|
||||||
g_Config.backend_info = {};
|
g_Config.backend_info = {};
|
||||||
ActivateBackend(Config::Get(Config::MAIN_GFX_BACKEND));
|
ActivateBackend(Config::Get(Config::MAIN_GFX_BACKEND));
|
||||||
g_Config.backend_info.DisplayName = g_video_backend->GetDisplayName();
|
g_Config.backend_info.DisplayName = g_video_backend->GetDisplayName();
|
||||||
g_video_backend->InitBackendInfo();
|
g_video_backend->InitBackendInfo(wsi);
|
||||||
// We validate the config after initializing the backend info, as system-specific settings
|
// We validate the config after initializing the backend info, as system-specific settings
|
||||||
// such as anti-aliasing, or the selected adapter may be invalid, and should be checked.
|
// such as anti-aliasing, or the selected adapter may be invalid, and should be checked.
|
||||||
g_Config.VerifyValidity();
|
g_Config.VerifyValidity();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackendBase::PopulateBackendInfoFromUI()
|
void VideoBackendBase::PopulateBackendInfoFromUI(const WindowSystemInfo& wsi)
|
||||||
{
|
{
|
||||||
// If the core is running, the backend info will have been populated already.
|
// If the core is running, the backend info will have been populated already.
|
||||||
// If we did it here, the UI thread can race with the with the GPU thread.
|
// If we did it here, the UI thread can race with the with the GPU thread.
|
||||||
if (!Core::IsRunning())
|
if (!Core::IsRunning())
|
||||||
PopulateBackendInfo();
|
PopulateBackendInfo(wsi);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBackendBase::DoState(PointerWrap& p)
|
void VideoBackendBase::DoState(PointerWrap& p)
|
||||||
|
|
|
@ -47,7 +47,7 @@ public:
|
||||||
|
|
||||||
virtual std::string GetName() const = 0;
|
virtual std::string GetName() const = 0;
|
||||||
virtual std::string GetDisplayName() const { return GetName(); }
|
virtual std::string GetDisplayName() const { return GetName(); }
|
||||||
virtual void InitBackendInfo() = 0;
|
virtual void InitBackendInfo(const WindowSystemInfo& wsi) = 0;
|
||||||
virtual std::optional<std::string> GetWarningMessage() const { return {}; }
|
virtual std::optional<std::string> GetWarningMessage() const { return {}; }
|
||||||
|
|
||||||
// Prepares a native window for rendering. This is called on the main thread, or the
|
// Prepares a native window for rendering. This is called on the main thread, or the
|
||||||
|
@ -69,9 +69,9 @@ public:
|
||||||
static void ActivateBackend(const std::string& name);
|
static void ActivateBackend(const std::string& name);
|
||||||
|
|
||||||
// Fills the backend_info fields with the capabilities of the selected backend/device.
|
// Fills the backend_info fields with the capabilities of the selected backend/device.
|
||||||
static void PopulateBackendInfo();
|
static void PopulateBackendInfo(const WindowSystemInfo& wsi);
|
||||||
// Called by the UI thread when the graphics config is opened.
|
// Called by the UI thread when the graphics config is opened.
|
||||||
static void PopulateBackendInfoFromUI();
|
static void PopulateBackendInfoFromUI(const WindowSystemInfo& wsi);
|
||||||
|
|
||||||
// Wrapper function which pushes the event to the GPU thread.
|
// Wrapper function which pushes the event to the GPU thread.
|
||||||
void DoState(PointerWrap& p);
|
void DoState(PointerWrap& p);
|
||||||
|
|
Loading…
Reference in New Issue