|
|
@@ -0,0 +1,90 @@
|
|
|
+/*
|
|
|
+
|
|
|
+Boost Software License - Version 1.0 - August 17th, 2003
|
|
|
+
|
|
|
+Permission is hereby granted, free of charge, to any person or organization
|
|
|
+obtaining a copy of the software and accompanying documentation covered by
|
|
|
+this license (the "Software") to use, reproduce, display, distribute,
|
|
|
+execute, and transmit the Software, and to prepare derivative works of the
|
|
|
+Software, and to permit third-parties to whom the Software is furnished to
|
|
|
+do so, all subject to the following:
|
|
|
+
|
|
|
+The copyright notices in the Software and this entire statement, including
|
|
|
+the above license grant, this restriction and the following disclaimer,
|
|
|
+must be included in all copies of the Software, in whole or in part, and
|
|
|
+all derivative works of the Software, unless such copies or derivative
|
|
|
+works are solely in the form of machine-executable object code generated by
|
|
|
+a source language processor.
|
|
|
+
|
|
|
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
|
|
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
|
|
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
|
|
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
|
+DEALINGS IN THE SOFTWARE.
|
|
|
+
|
|
|
+*/
|
|
|
+
|
|
|
+module derelict.vulkan.system;
|
|
|
+
|
|
|
+import derelict.util.system;
|
|
|
+
|
|
|
+enum VKSystem {
|
|
|
+ Other = 0,
|
|
|
+ Windows = 1 << 0,
|
|
|
+ Android = 1 << 1,
|
|
|
+ Posix = 1 << 2
|
|
|
+}
|
|
|
+
|
|
|
+mixin SystemFunctionality;
|
|
|
+
|
|
|
+private:
|
|
|
+import std.conv;
|
|
|
+
|
|
|
+auto derelictVulkanSystem() {
|
|
|
+ static if (Derelict_OS_Posix) {
|
|
|
+ return VKSystem.Posix;
|
|
|
+ } else static if (Derelict_OS_Windows) {
|
|
|
+ return VKSystem.Windows;
|
|
|
+ } else static if (Derelict_OS_Android) {
|
|
|
+ return VKSystem.Android;
|
|
|
+ } else {
|
|
|
+ pragma(msg, "Non of currently supported systems is fit to yours. "
|
|
|
+ , "If required functionality is missed, feel free to extend and share on GitHub.");
|
|
|
+ return VKSystem.Other;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+mixin template SystemFunctionality() {
|
|
|
+ enum currentSystem = derelictVulkanSystem();
|
|
|
+ pragma(msg, "DerelictVulkanSystem: ", to!string(currentSystem));
|
|
|
+
|
|
|
+ static if (currentSystem == VKSystem.Windows) {
|
|
|
+ mixin WindowsSys;
|
|
|
+ } else static if (currentSystem == VKSystem.Android) {
|
|
|
+ mixin AndroidSys;
|
|
|
+ } else static if (currentSystem == VKSystem.Posix) {
|
|
|
+ mixin PosixSys;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+mixin template WindowsSys() {}
|
|
|
+
|
|
|
+mixin template AndroidSys() {}
|
|
|
+
|
|
|
+mixin template PosixSys() {
|
|
|
+ version (VK_USE_PLATFORM_XCB_KHR) mixin XCBProtocol;
|
|
|
+ version (VK_USE_PLATFORM_XLIB_KHR) mixin XLibProtocol;
|
|
|
+ version (VK_USE_PLATFORM_MIR_KHR) mixin MirProtocol;
|
|
|
+ version (VK_USE_PLATFORM_WAYLAND_KHR) mixin WaylandProtocol;
|
|
|
+ else pragma(msg, "Non protocol been selected for Posix system.");
|
|
|
+}
|
|
|
+
|
|
|
+mixin template XCBProtocol() {}
|
|
|
+
|
|
|
+mixin template XLibProtocol() {}
|
|
|
+
|
|
|
+mixin template MirProtocol() {}
|
|
|
+
|
|
|
+mixin template WaylandProtocol() {}
|