github.com/Konstantin8105/c4go@v0.0.0-20240505174241-768bb1c65a51/tests/raylib/external/glfw/src/platform.c (about)

     1  //========================================================================
     2  // GLFW 3.4 - www.glfw.org
     3  //------------------------------------------------------------------------
     4  // Copyright (c) 2002-2006 Marcus Geelnard
     5  // Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
     6  //
     7  // This software is provided 'as-is', without any express or implied
     8  // warranty. In no event will the authors be held liable for any damages
     9  // arising from the use of this software.
    10  //
    11  // Permission is granted to anyone to use this software for any purpose,
    12  // including commercial applications, and to alter it and redistribute it
    13  // freely, subject to the following restrictions:
    14  //
    15  // 1. The origin of this software must not be misrepresented; you must not
    16  //    claim that you wrote the original software. If you use this software
    17  //    in a product, an acknowledgment in the product documentation would
    18  //    be appreciated but is not required.
    19  //
    20  // 2. Altered source versions must be plainly marked as such, and must not
    21  //    be misrepresented as being the original software.
    22  //
    23  // 3. This notice may not be removed or altered from any source
    24  //    distribution.
    25  //
    26  //========================================================================
    27  // Please use C89 style variable declarations in this file because VS 2010
    28  //========================================================================
    29  
    30  #include "internal.h"
    31  
    32  //////////////////////////////////////////////////////////////////////////
    33  //////                       GLFW internal API                      //////
    34  //////////////////////////////////////////////////////////////////////////
    35  
    36  static const struct
    37  {
    38      int ID;
    39      GLFWbool (*connect)(int,_GLFWplatform*);
    40  } supportedPlatforms[] =
    41  {
    42  #if defined(_GLFW_WIN32)
    43      { GLFW_PLATFORM_WIN32, _glfwConnectWin32 },
    44  #endif
    45  #if defined(_GLFW_COCOA)
    46      { GLFW_PLATFORM_COCOA, _glfwConnectCocoa },
    47  #endif
    48  #if defined(_GLFW_X11)
    49      { GLFW_PLATFORM_X11, _glfwConnectX11 },
    50  #endif
    51  #if defined(_GLFW_WAYLAND)
    52      { GLFW_PLATFORM_WAYLAND, _glfwConnectWayland },
    53  #endif
    54  };
    55  
    56  GLFWbool _glfwSelectPlatform(int desiredID, _GLFWplatform* platform)
    57  {
    58      const size_t count = sizeof(supportedPlatforms) / sizeof(supportedPlatforms[0]);
    59      size_t i;
    60  
    61      if (desiredID != GLFW_ANY_PLATFORM &&
    62          desiredID != GLFW_PLATFORM_WIN32 &&
    63          desiredID != GLFW_PLATFORM_COCOA &&
    64          desiredID != GLFW_PLATFORM_WAYLAND &&
    65          desiredID != GLFW_PLATFORM_X11 &&
    66          desiredID != GLFW_PLATFORM_NULL)
    67      {
    68          _glfwInputError(GLFW_INVALID_ENUM, "Invalid platform ID 0x%08X", desiredID);
    69          return GLFW_FALSE;
    70      }
    71  
    72      // Only allow the Null platform if specifically requested
    73      if (desiredID == GLFW_PLATFORM_NULL)
    74          return GLFW_FALSE; //_glfwConnectNull(desiredID, platform);  // @raysan5
    75      else if (count == 0)
    76      {
    77          _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "This binary only supports the Null platform");
    78          return GLFW_FALSE;
    79      }
    80  
    81      if (desiredID == GLFW_ANY_PLATFORM)
    82      {
    83          // If there is exactly one platform available for auto-selection, let it emit the
    84          // error on failure as the platform-specific error description may be more helpful
    85          if (count == 1)
    86              return supportedPlatforms[0].connect(supportedPlatforms[0].ID, platform);
    87  
    88          for (i = 0;  i < count;  i++)
    89          {
    90              if (supportedPlatforms[i].connect(desiredID, platform))
    91                  return GLFW_TRUE;
    92          }
    93  
    94          _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "Failed to detect any supported platform");
    95      }
    96      else
    97      {
    98          for (i = 0;  i < count;  i++)
    99          {
   100              if (supportedPlatforms[i].ID == desiredID)
   101                  return supportedPlatforms[i].connect(desiredID, platform);
   102          }
   103  
   104          _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, "The requested platform is not supported");
   105      }
   106  
   107      return GLFW_FALSE;
   108  }
   109  
   110  //////////////////////////////////////////////////////////////////////////
   111  //////                        GLFW public API                       //////
   112  //////////////////////////////////////////////////////////////////////////
   113  
   114  GLFWAPI int glfwGetPlatform(void)
   115  {
   116      _GLFW_REQUIRE_INIT_OR_RETURN(0);
   117      return _glfw.platform.platformID;
   118  }
   119  
   120  GLFWAPI int glfwPlatformSupported(int platformID)
   121  {
   122      const size_t count = sizeof(supportedPlatforms) / sizeof(supportedPlatforms[0]);
   123      size_t i;
   124  
   125      if (platformID != GLFW_PLATFORM_WIN32 &&
   126          platformID != GLFW_PLATFORM_COCOA &&
   127          platformID != GLFW_PLATFORM_WAYLAND &&
   128          platformID != GLFW_PLATFORM_X11 &&
   129          platformID != GLFW_PLATFORM_NULL)
   130      {
   131          _glfwInputError(GLFW_INVALID_ENUM, "Invalid platform ID 0x%08X", platformID);
   132          return GLFW_FALSE;
   133      }
   134  
   135      if (platformID == GLFW_PLATFORM_NULL)
   136          return GLFW_TRUE;
   137  
   138      for (i = 0;  i < count;  i++)
   139      {
   140          if (platformID == supportedPlatforms[i].ID)
   141              return GLFW_TRUE;
   142      }
   143  
   144      return GLFW_FALSE;
   145  }
   146  
   147  GLFWAPI const char* glfwGetVersionString(void)
   148  {
   149      return _GLFW_VERSION_NUMBER
   150  #if defined(_GLFW_WIN32)
   151          " Win32 WGL"
   152  #endif
   153  #if defined(_GLFW_COCOA)
   154          " Cocoa NSGL"
   155  #endif
   156  #if defined(_GLFW_WAYLAND)
   157          " Wayland"
   158  #endif
   159  #if defined(_GLFW_X11)
   160          " X11 GLX"
   161  #endif
   162          " Null"
   163          " EGL"
   164          " OSMesa"
   165  #if defined(__MINGW64_VERSION_MAJOR)
   166          " MinGW-w64"
   167  #elif defined(__MINGW32__)
   168          " MinGW"
   169  #elif defined(_MSC_VER)
   170          " VisualC"
   171  #endif
   172  #if defined(_GLFW_USE_HYBRID_HPG) || defined(_GLFW_USE_OPTIMUS_HPG)
   173          " hybrid-GPU"
   174  #endif
   175  #if defined(_POSIX_MONOTONIC_CLOCK)
   176          " monotonic"
   177  #endif
   178  #if defined(_GLFW_BUILD_DLL)
   179  #if defined(_WIN32)
   180          " DLL"
   181  #elif defined(__APPLE__)
   182          " dynamic"
   183  #else
   184          " shared"
   185  #endif
   186  #endif
   187          ;
   188  }
   189