Przeglądaj źródła

Add derelict.utils.system wraper

Sky Thirteenth 8 lat temu
rodzic
commit
010d6aa3b1
1 zmienionych plików z 90 dodań i 0 usunięć
  1. 90 0
      source/derelict/vulkan/system.d

+ 90 - 0
source/derelict/vulkan/system.d

@@ -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() {}