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