win32: detect platform. SDL support
This commit is contained in:
parent
424a02cdf3
commit
3415ce5577
|
@ -3,6 +3,9 @@
|
|||
#include "oslib.h"
|
||||
#include <initguid.h>
|
||||
#include <dsound.h>
|
||||
#ifdef USE_SDL
|
||||
#include "sdl/sdl.h"
|
||||
#endif
|
||||
|
||||
#define verifyc(x) verify(!FAILED(x))
|
||||
|
||||
|
@ -18,7 +21,11 @@ static void directsound_init()
|
|||
{
|
||||
verifyc(DirectSoundCreate8(NULL,&dsound,NULL));
|
||||
|
||||
#ifdef USE_SDL
|
||||
verifyc(dsound->SetCooperativeLevel(sdl_get_native_hwnd(), DSSCL_PRIORITY));
|
||||
#else
|
||||
verifyc(dsound->SetCooperativeLevel((HWND)libPvr_GetRenderTarget(), DSSCL_PRIORITY));
|
||||
#endif
|
||||
IDirectSoundBuffer* buffer_;
|
||||
|
||||
WAVEFORMATEX wfx;
|
||||
|
|
|
@ -669,7 +669,13 @@ bool VulkanContext::Init()
|
|||
{
|
||||
std::vector<const char *> extensions;
|
||||
extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME);
|
||||
#if defined(_WIN32)
|
||||
#if defined(USE_SDL)
|
||||
sdl_recreate_window(SDL_WINDOW_VULKAN);
|
||||
uint32_t extensionsCount = 0;
|
||||
SDL_Vulkan_GetInstanceExtensions((SDL_Window *)window, &extensionsCount, NULL);
|
||||
extensions.resize(extensionsCount + 1);
|
||||
SDL_Vulkan_GetInstanceExtensions((SDL_Window *)window, &extensionsCount, &extensions[1]);
|
||||
#elif defined(_WIN32)
|
||||
os_CreateWindow();
|
||||
extensions.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
|
||||
#elif defined(__MACH__)
|
||||
|
@ -678,17 +684,15 @@ bool VulkanContext::Init()
|
|||
extensions.push_back(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
|
||||
#elif defined(__ANDROID__)
|
||||
extensions.push_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME);
|
||||
#elif defined(USE_SDL)
|
||||
sdl_recreate_window(SDL_WINDOW_VULKAN);
|
||||
uint32_t extensionsCount = 0;
|
||||
SDL_Vulkan_GetInstanceExtensions((SDL_Window *)window, &extensionsCount, NULL);
|
||||
extensions.resize(extensionsCount + 1);
|
||||
SDL_Vulkan_GetInstanceExtensions((SDL_Window *)window, &extensionsCount, &extensions[1]);
|
||||
#endif
|
||||
if (!InitInstance(&extensions[0], extensions.size()))
|
||||
return false;
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(USE_SDL)
|
||||
VkSurfaceKHR surface;
|
||||
if (SDL_Vulkan_CreateSurface((SDL_Window *)window, *instance, (VkSurfaceKHR *)&this->surface) == 0)
|
||||
return false;
|
||||
#elif defined(_WIN32)
|
||||
vk::Win32SurfaceCreateInfoKHR createInfo(vk::Win32SurfaceCreateFlagsKHR(), GetModuleHandle(NULL), (HWND)window);
|
||||
surface = instance->createWin32SurfaceKHRUnique(createInfo);
|
||||
#elif defined(SUPPORT_X11)
|
||||
|
@ -697,10 +701,6 @@ bool VulkanContext::Init()
|
|||
#elif defined(__ANDROID__)
|
||||
vk::AndroidSurfaceCreateInfoKHR createInfo(vk::AndroidSurfaceCreateFlagsKHR(), (struct ANativeWindow*)window);
|
||||
surface = instance->createAndroidSurfaceKHRUnique(createInfo);
|
||||
#elif defined(USE_SDL)
|
||||
VkSurfaceKHR surface;
|
||||
if (SDL_Vulkan_CreateSurface((SDL_Window *)window, *instance, (VkSurfaceKHR *)&this->surface) == 0)
|
||||
return false;
|
||||
#endif
|
||||
|
||||
return InitDevice();
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "cfg/cfg.h"
|
||||
#include "linux-dist/main.h"
|
||||
#include "sdl/sdl.h"
|
||||
#include <SDL2/SDL_syswm.h>
|
||||
#endif
|
||||
#include "hw/maple/maple_devs.h"
|
||||
#include "sdl_gamepad.h"
|
||||
|
@ -246,5 +247,13 @@ void sdl_window_destroy()
|
|||
TermRenderApi();
|
||||
SDL_DestroyWindow(window);
|
||||
}
|
||||
|
||||
HWND sdl_get_native_hwnd()
|
||||
{
|
||||
SDL_SysWMinfo wmInfo;
|
||||
SDL_VERSION(&wmInfo.version);
|
||||
SDL_GetWindowWMInfo(window, &wmInfo);
|
||||
return wmInfo.info.win.window;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -8,3 +8,6 @@ extern void sdl_window_create();
|
|||
extern void sdl_window_set_text(const char* text);
|
||||
extern void sdl_window_destroy();
|
||||
extern void sdl_recreate_window(u32 flags);
|
||||
#ifdef WIN32
|
||||
HWND sdl_get_native_hwnd();
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
#include "hw/sh4/dyna/blockmanager.h"
|
||||
#include "log/LogManager.h"
|
||||
#include "wsi/context.h"
|
||||
#if defined(USE_SDL)
|
||||
#include "sdl/sdl.h"
|
||||
#endif
|
||||
|
||||
#define _WIN32_WINNT 0x0500
|
||||
#include <windows.h>
|
||||
|
@ -122,11 +125,15 @@ static std::shared_ptr<WinMouseGamepadDevice> mouse_gamepad;
|
|||
|
||||
void os_SetupInput()
|
||||
{
|
||||
#if defined(USE_SDL)
|
||||
input_sdl_init();
|
||||
#else
|
||||
XInputGamepadDevice::CreateDevices();
|
||||
kb_gamepad = std::make_shared<WinKbGamepadDevice>(0);
|
||||
GamepadDevice::Register(kb_gamepad);
|
||||
mouse_gamepad = std::make_shared<WinMouseGamepadDevice>(0);
|
||||
GamepadDevice::Register(mouse_gamepad);
|
||||
#endif
|
||||
}
|
||||
|
||||
LONG ExeptionHandler(EXCEPTION_POINTERS *ExceptionInfo)
|
||||
|
@ -216,6 +223,9 @@ void ToggleFullscreen();
|
|||
|
||||
void UpdateInputState(u32 port)
|
||||
{
|
||||
#if defined(USE_SDL)
|
||||
input_sdl_handle(port);
|
||||
#else
|
||||
/*
|
||||
Disabled for now. Need new EMU_BTN_ANA_LEFT/RIGHT/.. virtual controller keys
|
||||
|
||||
|
@ -234,6 +244,7 @@ void UpdateInputState(u32 port)
|
|||
std::shared_ptr<XInputGamepadDevice> gamepad = XInputGamepadDevice::GetXInputDevice(port);
|
||||
if (gamepad != NULL)
|
||||
gamepad->ReadInput();
|
||||
#endif
|
||||
}
|
||||
|
||||
// Windows class name to register
|
||||
|
@ -373,6 +384,9 @@ static int window_x, window_y;
|
|||
|
||||
void os_CreateWindow()
|
||||
{
|
||||
#if defined(USE_SDL)
|
||||
sdl_window_create();
|
||||
#else
|
||||
if (hWnd != NULL)
|
||||
return;
|
||||
HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(0);
|
||||
|
@ -411,6 +425,8 @@ void os_CreateWindow()
|
|||
#endif
|
||||
theGLContext.SetWindow(hWnd);
|
||||
theGLContext.SetDeviceContext(GetDC(hWnd));
|
||||
InitRenderApi();
|
||||
#endif // !USE_SDL
|
||||
}
|
||||
|
||||
void DestroyWindow()
|
||||
|
@ -492,10 +508,14 @@ BOOL CtrlHandler( DWORD fdwCtrlType )
|
|||
|
||||
void os_SetWindowText(const char* text)
|
||||
{
|
||||
#if defined(USE_SDL)
|
||||
sdl_window_set_text(text);
|
||||
#else
|
||||
if (GetWindowLong(hWnd, GWL_STYLE) & WS_BORDER)
|
||||
{
|
||||
SetWindowText(hWnd, text);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void ReserveBottomMemory()
|
||||
|
@ -739,7 +759,6 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
|
|||
#ifdef _WIN64
|
||||
setup_seh();
|
||||
#endif
|
||||
InitRenderApi();
|
||||
|
||||
rend_thread(NULL);
|
||||
|
||||
|
|
|
@ -42,6 +42,16 @@ endif
|
|||
# Platform auto-detection
|
||||
# Can be overridden by using:
|
||||
# make platform=x64
|
||||
ifeq (,$(platform))
|
||||
UNAME = $(shell uname -a)
|
||||
ifeq ($(UNAME),)
|
||||
platform = win32
|
||||
else ifneq ($(findstring MINGW,$(UNAME)),)
|
||||
platform = win32
|
||||
else ifneq ($(findstring win,$(UNAME)),)
|
||||
platform = win32
|
||||
endif
|
||||
endif
|
||||
ifeq (,$(platform))
|
||||
ARCH = $(shell uname -m)
|
||||
ifeq ($(ARCH), $(filter $(ARCH), i386 i686))
|
||||
|
@ -302,9 +312,14 @@ MENUENTRY_DIR ?= ${PREFIX}/share/applications
|
|||
ICON_DIR ?= ${PREFIX}/share/pixmaps
|
||||
|
||||
ifdef USE_SDL
|
||||
ifdef FOR_WINDOWS
|
||||
CXXFLAGS += -D USE_SDL
|
||||
LIBS += -lsdl2.dll
|
||||
else
|
||||
CXXFLAGS += `sdl2-config --cflags` -D USE_SDL
|
||||
LIBS += `sdl2-config --libs`
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef PGO_MAKE
|
||||
CFLAGS += -fprofile-generate -pg
|
||||
|
|
Loading…
Reference in New Issue