Initial support for building and running SDL platform on macOS
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
#include "../RenderToolsVulkan.h"
|
#include "../RenderToolsVulkan.h"
|
||||||
#include "Engine/Platform/Window.h"
|
#include "Engine/Platform/Window.h"
|
||||||
#include <Cocoa/Cocoa.h>
|
#include <Cocoa/Cocoa.h>
|
||||||
|
#include <QuartzCore/CAMetalLayer.h>
|
||||||
|
|
||||||
void MacVulkanPlatform::GetInstanceExtensions(Array<const char*>& extensions, Array<const char*>& layers)
|
void MacVulkanPlatform::GetInstanceExtensions(Array<const char*>& extensions, Array<const char*>& layers)
|
||||||
{
|
{
|
||||||
@@ -17,10 +18,14 @@ void MacVulkanPlatform::CreateSurface(Window* window, VkInstance instance, VkSur
|
|||||||
{
|
{
|
||||||
void* windowHandle = window->GetNativePtr();
|
void* windowHandle = window->GetNativePtr();
|
||||||
NSWindow* nswindow = (NSWindow*)windowHandle;
|
NSWindow* nswindow = (NSWindow*)windowHandle;
|
||||||
VkMacOSSurfaceCreateInfoMVK surfaceCreateInfo;
|
#if PLATFORM_SDL
|
||||||
RenderToolsVulkan::ZeroStruct(surfaceCreateInfo, VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK);
|
nswindow.contentView.wantsLayer = YES;
|
||||||
surfaceCreateInfo.pView = (void*)nswindow.contentView;
|
nswindow.contentView.layer = [CAMetalLayer layer];
|
||||||
VALIDATE_VULKAN_RESULT(vkCreateMacOSSurfaceMVK(instance, &surfaceCreateInfo, nullptr, surface));
|
#endif
|
||||||
|
VkMacOSSurfaceCreateInfoMVK surfaceCreateInfo;
|
||||||
|
RenderToolsVulkan::ZeroStruct(surfaceCreateInfo, VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK);
|
||||||
|
surfaceCreateInfo.pView = (void*)nswindow.contentView;
|
||||||
|
VALIDATE_VULKAN_RESULT(vkCreateMacOSSurfaceMVK(instance, &surfaceCreateInfo, nullptr, surface));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -423,11 +423,15 @@ String MacPlatform::GetMainDirectory()
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !PLATFORM_SDL
|
||||||
|
|
||||||
Window* MacPlatform::CreateWindow(const CreateWindowSettings& settings)
|
Window* MacPlatform::CreateWindow(const CreateWindowSettings& settings)
|
||||||
{
|
{
|
||||||
return New<MacWindow>(settings);
|
return New<MacWindow>(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
int32 MacPlatform::CreateProcess(CreateProcessSettings& settings)
|
int32 MacPlatform::CreateProcess(CreateProcessSettings& settings)
|
||||||
{
|
{
|
||||||
LOG(Info, "Command: {0} {1}", settings.FileName, settings.Arguments);
|
LOG(Info, "Command: {0} {1}", settings.FileName, settings.Arguments);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// Copyright (c) Wojciech Figat. All rights reserved.
|
// Copyright (c) Wojciech Figat. All rights reserved.
|
||||||
|
|
||||||
#if PLATFORM_MAC
|
#if PLATFORM_MAC && !PLATFORM_SDL
|
||||||
|
|
||||||
#include "../Window.h"
|
#include "../Window.h"
|
||||||
#include "Engine/Platform/Apple/AppleUtils.h"
|
#include "Engine/Platform/Apple/AppleUtils.h"
|
||||||
|
|||||||
@@ -2,11 +2,81 @@
|
|||||||
|
|
||||||
#if PLATFORM_SDL && PLATFORM_MAC
|
#if PLATFORM_SDL && PLATFORM_MAC
|
||||||
|
|
||||||
static_assert(false, "TODO");
|
#include "SDLWindow.h"
|
||||||
|
#include "Engine/Core/Log.h"
|
||||||
|
#include "Engine/Core/Collections/Array.h"
|
||||||
|
#include "Engine/Engine/CommandLine.h"
|
||||||
|
#include "Engine/Engine/Engine.h"
|
||||||
|
#include "Engine/Engine/Time.h"
|
||||||
|
#include "Engine/Graphics/RenderTask.h"
|
||||||
|
#include "Engine/Input/Input.h"
|
||||||
|
#include "Engine/Input/Mouse.h"
|
||||||
|
#include "Engine/Platform/IGuiData.h"
|
||||||
|
#include "Engine/Platform/MessageBox.h"
|
||||||
|
#include "Engine/Platform/Platform.h"
|
||||||
|
#include "Engine/Platform/WindowsManager.h"
|
||||||
|
#include "Engine/Platform/Base/DragDropHelper.h"
|
||||||
|
#include "Engine/Platform/SDL/SDLClipboard.h"
|
||||||
|
#include "Engine/Platform/Unix/UnixFile.h"
|
||||||
|
#include "Engine/Profiler/ProfilerCPU.h"
|
||||||
|
|
||||||
|
#include "Engine/Platform/Linux/IncludeX11.h"
|
||||||
|
|
||||||
|
#include <SDL3/SDL_events.h>
|
||||||
|
#include <SDL3/SDL_hints.h>
|
||||||
|
#include <SDL3/SDL_messagebox.h>
|
||||||
|
#include <SDL3/SDL_mouse.h>
|
||||||
|
#include <SDL3/SDL_system.h>
|
||||||
|
#include <SDL3/SDL_timer.h>
|
||||||
|
#include <SDL3/SDL_video.h>
|
||||||
|
|
||||||
|
bool SDLPlatform::InitInternal()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDLPlatform::UsesWindows()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDLPlatform::UsesWayland()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDLPlatform::UsesX11()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDLPlatform::PreHandleEvents()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDLPlatform::PostHandleEvents()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDLWindow::HandleEventInternal(SDL_Event& event)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void SDLPlatform::SetHighDpiAwarenessEnabled(bool enable)
|
void SDLPlatform::SetHighDpiAwarenessEnabled(bool enable)
|
||||||
{
|
{
|
||||||
// TODO: This is now called before Platform::Init, ensure the scaling is changed accordingly during Platform::Init (see ApplePlatform::SetHighDpiAwarenessEnabled)
|
// TODO: This is now called before Platform::Init, ensure the scaling is changed accordingly during Platform::Init (see ApplePlatform::SetHighDpiAwarenessEnabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DragDropEffect SDLWindow::DoDragDrop(const StringView& data)
|
||||||
|
{
|
||||||
|
return DragDropEffect::None;
|
||||||
|
}
|
||||||
|
|
||||||
|
DragDropEffect SDLWindow::DoDragDrop(const StringView& data, const Float2& offset, Window* dragSourceWindow)
|
||||||
|
{
|
||||||
|
Show();
|
||||||
|
return DragDropEffect::None;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -11,7 +11,10 @@ typedef struct tagMSG MSG;
|
|||||||
#elif PLATFORM_LINUX
|
#elif PLATFORM_LINUX
|
||||||
#include "Engine/Platform/Linux/LinuxPlatform.h"
|
#include "Engine/Platform/Linux/LinuxPlatform.h"
|
||||||
union _XEvent;
|
union _XEvent;
|
||||||
|
#elif PLATFORM_MAC
|
||||||
|
#include "Engine/Platform/Mac/MacPlatform.h"
|
||||||
#else
|
#else
|
||||||
|
static_assert(false, "Unsupported Platform");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class SDLWindow;
|
class SDLWindow;
|
||||||
@@ -29,8 +32,13 @@ class FLAXENGINE_API SDLPlatform
|
|||||||
: public LinuxPlatform
|
: public LinuxPlatform
|
||||||
{
|
{
|
||||||
using base = LinuxPlatform;
|
using base = LinuxPlatform;
|
||||||
|
#elif PLATFORM_MAC
|
||||||
|
: public MacPlatform
|
||||||
|
{
|
||||||
|
using base = MacPlatform;
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
|
static_assert(false, "Unsupported Platform");
|
||||||
#endif
|
#endif
|
||||||
friend SDLWindow;
|
friend SDLWindow;
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,10 @@
|
|||||||
#endif
|
#endif
|
||||||
#elif PLATFORM_LINUX
|
#elif PLATFORM_LINUX
|
||||||
#include "Engine/Platform/Linux/IncludeX11.h"
|
#include "Engine/Platform/Linux/IncludeX11.h"
|
||||||
|
#elif PLATFORM_MAC
|
||||||
|
|
||||||
|
#else
|
||||||
|
static_assert(false, "Unsupported Platform");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DefaultDPI 96
|
#define DefaultDPI 96
|
||||||
|
|||||||
@@ -265,10 +265,12 @@ class AppleThread;
|
|||||||
typedef AppleThread Thread;
|
typedef AppleThread Thread;
|
||||||
class MacClipboard;
|
class MacClipboard;
|
||||||
typedef MacClipboard Clipboard;
|
typedef MacClipboard Clipboard;
|
||||||
|
#if !PLATFORM_SDL
|
||||||
class MacPlatform;
|
class MacPlatform;
|
||||||
typedef MacPlatform Platform;
|
typedef MacPlatform Platform;
|
||||||
class MacWindow;
|
class MacWindow;
|
||||||
typedef MacWindow Window;
|
typedef MacWindow Window;
|
||||||
|
#endif
|
||||||
class UnixNetwork;
|
class UnixNetwork;
|
||||||
typedef UnixNetwork Network;
|
typedef UnixNetwork Network;
|
||||||
class UserBase;
|
class UserBase;
|
||||||
|
|||||||
@@ -300,7 +300,9 @@ namespace Flax.Build
|
|||||||
|
|
||||||
public static bool WithSDL(NativeCpp.BuildOptions options)
|
public static bool WithSDL(NativeCpp.BuildOptions options)
|
||||||
{
|
{
|
||||||
bool supportedPlatform = options.Platform.Target == TargetPlatform.Windows || options.Platform.Target == TargetPlatform.Linux;
|
bool supportedPlatform = options.Platform.Target == TargetPlatform.Windows ||
|
||||||
|
options.Platform.Target == TargetPlatform.Linux ||
|
||||||
|
options.Platform.Target == TargetPlatform.Mac;
|
||||||
return UseSDL && supportedPlatform;
|
return UseSDL && supportedPlatform;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ namespace Flax.Deps.Dependencies
|
|||||||
return new[]
|
return new[]
|
||||||
{
|
{
|
||||||
TargetPlatform.Mac,
|
TargetPlatform.Mac,
|
||||||
TargetPlatform.iOS,
|
|
||||||
};
|
};
|
||||||
default: return new TargetPlatform[0];
|
default: return new TargetPlatform[0];
|
||||||
}
|
}
|
||||||
@@ -63,6 +62,7 @@ namespace Flax.Deps.Dependencies
|
|||||||
"-DSDL_RENDER_VULKAN=OFF",
|
"-DSDL_RENDER_VULKAN=OFF",
|
||||||
|
|
||||||
"-DSDL_DIRECTX=OFF",
|
"-DSDL_DIRECTX=OFF",
|
||||||
|
"-DSDL_METAL=OFF",
|
||||||
"-DSDL_VULKAN=OFF",
|
"-DSDL_VULKAN=OFF",
|
||||||
"-DSDL_OPENGL=OFF",
|
"-DSDL_OPENGL=OFF",
|
||||||
"-DSDL_OPENGLES=OFF",
|
"-DSDL_OPENGLES=OFF",
|
||||||
@@ -123,8 +123,9 @@ namespace Flax.Deps.Dependencies
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TargetPlatform.Linux:
|
case TargetPlatform.Linux:
|
||||||
|
case TargetPlatform.Mac:
|
||||||
{
|
{
|
||||||
foreach (var architecture in new TargetArchitecture[] { TargetArchitecture.x64 })
|
foreach (var architecture in new [] { TargetArchitecture.x64, TargetArchitecture.ARM64 })
|
||||||
{
|
{
|
||||||
var buildDir = Path.Combine(root, "build-" + architecture.ToString());
|
var buildDir = Path.Combine(root, "build-" + architecture.ToString());
|
||||||
|
|
||||||
@@ -147,11 +148,6 @@ namespace Flax.Deps.Dependencies
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TargetPlatform.Mac:
|
|
||||||
{
|
|
||||||
// TODO
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,14 @@ namespace Flax.Build.Platforms
|
|||||||
options.LinkEnv.InputLibraries.Add("Cocoa.framework");
|
options.LinkEnv.InputLibraries.Add("Cocoa.framework");
|
||||||
options.LinkEnv.InputLibraries.Add("QuartzCore.framework");
|
options.LinkEnv.InputLibraries.Add("QuartzCore.framework");
|
||||||
options.LinkEnv.InputLibraries.Add("AVFoundation.framework");
|
options.LinkEnv.InputLibraries.Add("AVFoundation.framework");
|
||||||
|
|
||||||
|
// SDL3 requires the following frameworks:
|
||||||
|
options.LinkEnv.InputLibraries.Add("Foundation.framework");
|
||||||
|
options.LinkEnv.InputLibraries.Add("GameController.framework");
|
||||||
|
options.LinkEnv.InputLibraries.Add("Carbon.framework");
|
||||||
|
options.LinkEnv.InputLibraries.Add("ForceFeedback.framework");
|
||||||
|
options.LinkEnv.InputLibraries.Add("UniformTypeIdentifiers.framework");
|
||||||
|
options.LinkEnv.InputLibraries.Add("CoreHaptics.framework");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void AddArgsCommon(BuildOptions options, List<string> args)
|
protected override void AddArgsCommon(BuildOptions options, List<string> args)
|
||||||
|
|||||||
Reference in New Issue
Block a user