aboutsummaryrefslogtreecommitdiff
path: root/3rdparty/glfw/source/src/platform.c
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2023-09-20 23:58:58 -0700
committerrtk0c <[email protected]>2023-09-20 23:58:58 -0700
commitf138311d2d2e0cc9ba0496d523bb46f2c1c9fb73 (patch)
treef96100a813a4ffb28dcd074455d3a2f8ee426430 /3rdparty/glfw/source/src/platform.c
Copy from the PlasticSCM repo, replace vendored glm wtih conan
Diffstat (limited to '3rdparty/glfw/source/src/platform.c')
-rw-r--r--3rdparty/glfw/source/src/platform.c189
1 files changed, 189 insertions, 0 deletions
diff --git a/3rdparty/glfw/source/src/platform.c b/3rdparty/glfw/source/src/platform.c
new file mode 100644
index 0000000..d0bbd06
--- /dev/null
+++ b/3rdparty/glfw/source/src/platform.c
@@ -0,0 +1,189 @@
+//========================================================================
+// GLFW 3.4 - www.glfw.org
+//------------------------------------------------------------------------
+// Copyright (c) 2002-2006 Marcus Geelnard
+// Copyright (c) 2006-2018 Camilla Löwy <[email protected]>
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would
+// be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such, and must not
+// be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source
+// distribution.
+//
+//========================================================================
+// Please use C89 style variable declarations in this file because VS 2010
+//========================================================================
+
+#include "internal.h"
+
+//////////////////////////////////////////////////////////////////////////
+////// GLFW internal API //////
+//////////////////////////////////////////////////////////////////////////
+
+static const struct
+{
+ int ID;
+ GLFWbool (*connect)(int,_GLFWplatform*);
+} supportedPlatforms[] =
+{
+#if defined(_GLFW_WIN32)
+ { GLFW_PLATFORM_WIN32, _glfwConnectWin32 },
+#endif
+#if defined(_GLFW_COCOA)
+ { GLFW_PLATFORM_COCOA, _glfwConnectCocoa },
+#endif
+#if defined(_GLFW_X11)
+ { GLFW_PLATFORM_X11, _glfwConnectX11 },
+#endif
+#if defined(_GLFW_WAYLAND)
+ { GLFW_PLATFORM_WAYLAND, _glfwConnectWayland },
+#endif
+};
+
+GLFWbool _glfwSelectPlatform(int desiredID, _GLFWplatform* platform)
+{
+ const size_t count = sizeof(supportedPlatforms) / sizeof(supportedPlatforms[0]);
+ size_t i;
+
+ if (desiredID != GLFW_ANY_PLATFORM &&
+ desiredID != GLFW_PLATFORM_WIN32 &&
+ desiredID != GLFW_PLATFORM_COCOA &&
+ desiredID != GLFW_PLATFORM_WAYLAND &&
+ desiredID != GLFW_PLATFORM_X11 &&
+ desiredID != GLFW_PLATFORM_NULL)
+ {
+ _glfwInputError(GLFW_INVALID_ENUM, "Invalid platform ID 0x%08X", desiredID);
+ return GLFW_FALSE;
+ }
+
+ // Only allow the Null platform if specifically requested
+ if (desiredID == GLFW_PLATFORM_NULL)
+ return _glfwConnectNull(desiredID, platform);
+ else if (count == 0)
+ {
+ _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "This binary only supports the Null platform");
+ return GLFW_FALSE;
+ }
+
+ if (desiredID == GLFW_ANY_PLATFORM)
+ {
+ // If there is exactly one platform available for auto-selection, let it emit the
+ // error on failure as the platform-specific error description may be more helpful
+ if (count == 1)
+ return supportedPlatforms[0].connect(supportedPlatforms[0].ID, platform);
+
+ for (i = 0; i < count; i++)
+ {
+ if (supportedPlatforms[i].connect(desiredID, platform))
+ return GLFW_TRUE;
+ }
+
+ _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "Failed to detect any supported platform");
+ }
+ else
+ {
+ for (i = 0; i < count; i++)
+ {
+ if (supportedPlatforms[i].ID == desiredID)
+ return supportedPlatforms[i].connect(desiredID, platform);
+ }
+
+ _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "The requested platform is not supported");
+ }
+
+ return GLFW_FALSE;
+}
+
+//////////////////////////////////////////////////////////////////////////
+////// GLFW public API //////
+//////////////////////////////////////////////////////////////////////////
+
+GLFWAPI int glfwGetPlatform(void)
+{
+ _GLFW_REQUIRE_INIT_OR_RETURN(0);
+ return _glfw.platform.platformID;
+}
+
+GLFWAPI int glfwPlatformSupported(int platformID)
+{
+ const size_t count = sizeof(supportedPlatforms) / sizeof(supportedPlatforms[0]);
+ size_t i;
+
+ if (platformID != GLFW_PLATFORM_WIN32 &&
+ platformID != GLFW_PLATFORM_COCOA &&
+ platformID != GLFW_PLATFORM_WAYLAND &&
+ platformID != GLFW_PLATFORM_X11 &&
+ platformID != GLFW_PLATFORM_NULL)
+ {
+ _glfwInputError(GLFW_INVALID_ENUM, "Invalid platform ID 0x%08X", platformID);
+ return GLFW_FALSE;
+ }
+
+ if (platformID == GLFW_PLATFORM_NULL)
+ return GLFW_TRUE;
+
+ for (i = 0; i < count; i++)
+ {
+ if (platformID == supportedPlatforms[i].ID)
+ return GLFW_TRUE;
+ }
+
+ return GLFW_FALSE;
+}
+
+GLFWAPI const char* glfwGetVersionString(void)
+{
+ return _GLFW_VERSION_NUMBER
+#if defined(_GLFW_WIN32)
+ " Win32 WGL"
+#endif
+#if defined(_GLFW_COCOA)
+ " Cocoa NSGL"
+#endif
+#if defined(_GLFW_WAYLAND)
+ " Wayland"
+#endif
+#if defined(_GLFW_X11)
+ " X11 GLX"
+#endif
+ " Null"
+ " EGL"
+ " OSMesa"
+#if defined(__MINGW64_VERSION_MAJOR)
+ " MinGW-w64"
+#elif defined(__MINGW32__)
+ " MinGW"
+#elif defined(_MSC_VER)
+ " VisualC"
+#endif
+#if defined(_GLFW_USE_HYBRID_HPG) || defined(_GLFW_USE_OPTIMUS_HPG)
+ " hybrid-GPU"
+#endif
+#if defined(_POSIX_MONOTONIC_CLOCK)
+ " monotonic"
+#endif
+#if defined(_GLFW_BUILD_DLL)
+#if defined(_WIN32)
+ " DLL"
+#elif defined(__APPLE__)
+ " dynamic"
+#else
+ " shared"
+#endif
+#endif
+ ;
+}
+