mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
Add more UWP support (nw)
This commit is contained in:
parent
f9f30e95ef
commit
cddd8bbe7a
@ -233,8 +233,12 @@ if (STANDALONE~=true) then
|
||||
links {
|
||||
ext_lib("lua"),
|
||||
"lualibs",
|
||||
}
|
||||
if (_OPTIONS["osd"] ~= "uwp") then
|
||||
links {
|
||||
"linenoise-ng",
|
||||
}
|
||||
end
|
||||
end
|
||||
links {
|
||||
ext_lib("zlib"),
|
||||
|
@ -13,10 +13,10 @@
|
||||
#if (USE_OPENGL)
|
||||
#include "render/drawogl.h"
|
||||
#endif
|
||||
#ifdef OSD_WINDOWS
|
||||
#if defined(OSD_WINDOWS)
|
||||
#include "render/drawgdi.h"
|
||||
#include "render/drawd3d.h"
|
||||
#else
|
||||
#elif defined(OSD_SDL)
|
||||
#include "render/draw13.h"
|
||||
#include "render/drawsdl.h"
|
||||
#endif
|
||||
@ -30,7 +30,7 @@ std::unique_ptr<osd_renderer> osd_renderer::make_for_type(int mode, std::shared_
|
||||
{
|
||||
switch(mode)
|
||||
{
|
||||
#ifdef OSD_WINDOWS
|
||||
#if defined(OSD_WINDOWS) || defined(OSD_UWP)
|
||||
case VIDEO_MODE_NONE:
|
||||
return std::make_unique<renderer_none>(window);
|
||||
#endif
|
||||
@ -40,12 +40,12 @@ std::unique_ptr<osd_renderer> osd_renderer::make_for_type(int mode, std::shared_
|
||||
case VIDEO_MODE_OPENGL:
|
||||
return std::make_unique<renderer_ogl>(window);
|
||||
#endif
|
||||
#ifdef OSD_WINDOWS
|
||||
#if defined(OSD_WINDOWS)
|
||||
case VIDEO_MODE_GDI:
|
||||
return std::make_unique<renderer_gdi>(window);
|
||||
case VIDEO_MODE_D3D:
|
||||
return std::make_unique<renderer_d3d9>(window);
|
||||
#else
|
||||
#elif defined(OSD_SDL)
|
||||
case VIDEO_MODE_SDL2ACCEL:
|
||||
return std::make_unique<renderer_sdl2>(window, extra_flags);
|
||||
case VIDEO_MODE_SOFT:
|
||||
|
@ -21,13 +21,15 @@
|
||||
#include <windowsx.h>
|
||||
#include <mmsystem.h>
|
||||
#endif
|
||||
#undef min
|
||||
#undef max
|
||||
|
||||
#ifdef OSD_SDL
|
||||
// forward declaration
|
||||
struct SDL_Window;
|
||||
#elif defined(OSD_UWP)
|
||||
#include <Agile.h>
|
||||
#endif
|
||||
#undef min
|
||||
#undef max
|
||||
|
||||
//============================================================
|
||||
// TYPE DEFINITIONS
|
||||
@ -71,7 +73,7 @@ class osd_window : public std::enable_shared_from_this<osd_window>
|
||||
public:
|
||||
osd_window(const osd_window_config &config)
|
||||
:
|
||||
#ifndef OSD_SDL
|
||||
#ifdef OSD_WINDOW
|
||||
m_dc(nullptr), m_resize_state(0),
|
||||
#endif
|
||||
m_primlist(nullptr),
|
||||
@ -136,14 +138,16 @@ public:
|
||||
virtual void update() = 0;
|
||||
virtual void destroy() = 0;
|
||||
|
||||
#ifndef OSD_SDL
|
||||
#ifdef OSD_WINDOWS
|
||||
virtual bool win_has_menu() = 0;
|
||||
|
||||
HDC m_dc; // only used by GDI renderer!
|
||||
|
||||
int m_resize_state;
|
||||
#elif OSD_UWP
|
||||
virtual bool win_has_menu() = 0;
|
||||
Platform::Agile<Windows::UI::Core::CoreWindow^> m_window;
|
||||
#endif
|
||||
|
||||
render_primitive_list *m_primlist;
|
||||
osd_window_config m_win_config;
|
||||
int m_index;
|
||||
|
@ -5,7 +5,7 @@
|
||||
// drawbgfx.cpp - BGFX renderer
|
||||
//
|
||||
//============================================================
|
||||
#if defined(SDLMAME_WIN32) || defined(OSD_WINDOWS)
|
||||
#if defined(SDLMAME_WIN32) || defined(OSD_WINDOWS) || defined(OSD_UWP)
|
||||
// standard windows headers
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
@ -133,7 +133,7 @@ inline void winSetHwnd(::HWND _window)
|
||||
pd.backBufferDS = NULL;
|
||||
bgfx::setPlatformData(pd);
|
||||
}
|
||||
#else
|
||||
#elif defined(OSD_SDL)
|
||||
static void* sdlNativeWindowHandle(SDL_Window* _window)
|
||||
{
|
||||
SDL_SysWMinfo wmi;
|
||||
@ -186,6 +186,22 @@ inline bool sdlSetWindow(SDL_Window* _window)
|
||||
|
||||
return true;
|
||||
}
|
||||
#elif defined(OSD_UWP)
|
||||
inline void winrtSetWindow(::IUnknown* _window)
|
||||
{
|
||||
bgfx::PlatformData pd;
|
||||
pd.ndt = NULL;
|
||||
pd.nwh = _window;
|
||||
pd.context = NULL;
|
||||
pd.backBuffer = NULL;
|
||||
pd.backBufferDS = NULL;
|
||||
bgfx::setPlatformData(pd);
|
||||
}
|
||||
|
||||
IInspectable* AsInspectable(Platform::Object^ o)
|
||||
{
|
||||
return reinterpret_cast<IInspectable*>(o);
|
||||
}
|
||||
#endif
|
||||
|
||||
int renderer_bgfx::create()
|
||||
@ -211,6 +227,8 @@ int renderer_bgfx::create()
|
||||
}
|
||||
#ifdef OSD_WINDOWS
|
||||
winSetHwnd(win->platform_window<HWND>());
|
||||
#elif defined(OSD_UWP)
|
||||
winrtSetWindow(AsInspectable(win->m_window.Get()));
|
||||
#else
|
||||
sdlSetWindow(win->platform_window<SDL_Window*>());
|
||||
#endif
|
||||
@ -260,6 +278,8 @@ int renderer_bgfx::create()
|
||||
{
|
||||
#ifdef OSD_WINDOWS
|
||||
m_framebuffer = m_targets->create_backbuffer(win->platform_window<HWND>(), m_width[win->m_index], m_height[win->m_index]);
|
||||
#elif defined(OSD_UWP)
|
||||
m_framebuffer = m_targets->create_backbuffer(&win->m_window, m_width[win->m_index], m_height[win->m_index]);
|
||||
#else
|
||||
m_framebuffer = m_targets->create_backbuffer(sdlNativeWindowHandle(win->platform_window<SDL_Window*>()), m_width[win->m_index], m_height[win->m_index]);
|
||||
#endif
|
||||
@ -899,6 +919,8 @@ bool renderer_bgfx::update_dimensions()
|
||||
delete m_framebuffer;
|
||||
#ifdef OSD_WINDOWS
|
||||
m_framebuffer = m_targets->create_backbuffer(win->platform_window<HWND>(), width, height);
|
||||
#elif defined(OSD_UWP)
|
||||
m_framebuffer = m_targets->create_backbuffer(&win->m_window, width, height);
|
||||
#else
|
||||
m_framebuffer = m_targets->create_backbuffer(sdlNativeWindowHandle(win->platform_window<SDL_Window*>()), width, height);
|
||||
#endif
|
||||
|
@ -26,7 +26,15 @@ render_primitive_list *renderer_none::get_primitives()
|
||||
return nullptr;
|
||||
|
||||
RECT client;
|
||||
#if defined(OSD_WINDOWS)
|
||||
GetClientRect(win->platform_window<HWND>(), &client);
|
||||
#elif defined(OSD_UWP)
|
||||
auto bounds = win->m_window->Bounds;
|
||||
client.left = bounds.Left;
|
||||
client.right = bounds.Right;
|
||||
client.top = bounds.Top;
|
||||
client.bottom = bounds.Bottom;
|
||||
#endif
|
||||
win->target()->set_bounds(rect_width(&client), rect_height(&client), win->pixel_aspect());
|
||||
return &win->target()->get_primitives();
|
||||
}
|
||||
|
@ -107,7 +107,11 @@ void osd_subst_env(std::string &dst, const std::string &src)
|
||||
TCHAR buffer[MAX_PATH];
|
||||
|
||||
osd::text::tstring t_src = osd::text::to_tstring(src);
|
||||
#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
|
||||
ExpandEnvironmentStrings(t_src.c_str(), buffer, ARRAY_LENGTH(buffer));
|
||||
#else
|
||||
wcsncpy(buffer, t_src.c_str(), ARRAY_LENGTH(buffer));
|
||||
#endif
|
||||
osd::text::from_tstring(dst, buffer);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user