mirror of
https://github.com/glfw/glfw.git
synced 2024-11-15 02:34:36 +00:00
56a4cb0a3a
This adds compile-time support for multiple platforms and runtime detection of them. Window system related platform functions are now called from shared code via the function pointer struct _GLFWplatform. The timer, thread and module loading platform functions are still called directly by name and the implementation chosen at link-time. These functions are the same for any backend on a given OS, including the Null backend. The platforms are now enabled via CMake dependent options following the GLFW_BUILD_<platform> pattern instead of a mix of automagic and ad-hoc option names. There is no longer any option for the Null backend as it is now always enabled. Much of the struct stitching work in platform.h was based on an earlier experimental branch for runtime platform selection by @ronchaine. Every platform function related to windows, contexts, monitors, input, event processing and Vulkan have been renamed so that multiple sets of them can exist without colliding. Calls to these are now routed through the _glfw.platform struct member. These changes makes up most of this commit. For Wayland and X11 the client library loading and display creation is used to detect a running compositor/server. The XDG_SESSION_TYPE environment variable is ignored for now, as X11 is still by far the more complete implementation. Closes #1655 Closes #1958
134 lines
4.4 KiB
C
134 lines
4.4 KiB
C
//========================================================================
|
|
// GLFW 3.4 - www.glfw.org
|
|
//------------------------------------------------------------------------
|
|
// Copyright (c) 2016 Google Inc.
|
|
// Copyright (c) 2016-2017 Camilla Löwy <elmindreda@glfw.org>
|
|
//
|
|
// 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.
|
|
//
|
|
//========================================================================
|
|
// It is fine to use C99 in this file because it will not be built with VS
|
|
//========================================================================
|
|
|
|
#include "internal.h"
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
////// GLFW platform API //////
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
GLFWbool _glfwConnectNull(int platformID, _GLFWplatform* platform)
|
|
{
|
|
const _GLFWplatform null =
|
|
{
|
|
GLFW_PLATFORM_NULL,
|
|
_glfwInitNull,
|
|
_glfwTerminateNull,
|
|
_glfwGetCursorPosNull,
|
|
_glfwSetCursorPosNull,
|
|
_glfwSetCursorModeNull,
|
|
_glfwSetRawMouseMotionNull,
|
|
_glfwRawMouseMotionSupportedNull,
|
|
_glfwCreateCursorNull,
|
|
_glfwCreateStandardCursorNull,
|
|
_glfwDestroyCursorNull,
|
|
_glfwSetCursorNull,
|
|
_glfwGetScancodeNameNull,
|
|
_glfwGetKeyScancodeNull,
|
|
_glfwSetClipboardStringNull,
|
|
_glfwGetClipboardStringNull,
|
|
_glfwInitJoysticksNull,
|
|
_glfwTerminateJoysticksNull,
|
|
_glfwPollJoystickNull,
|
|
_glfwGetMappingNameNull,
|
|
_glfwUpdateGamepadGUIDNull,
|
|
_glfwFreeMonitorNull,
|
|
_glfwGetMonitorPosNull,
|
|
_glfwGetMonitorContentScaleNull,
|
|
_glfwGetMonitorWorkareaNull,
|
|
_glfwGetVideoModesNull,
|
|
_glfwGetVideoModeNull,
|
|
_glfwGetGammaRampNull,
|
|
_glfwSetGammaRampNull,
|
|
_glfwCreateWindowNull,
|
|
_glfwDestroyWindowNull,
|
|
_glfwSetWindowTitleNull,
|
|
_glfwSetWindowIconNull,
|
|
_glfwGetWindowPosNull,
|
|
_glfwSetWindowPosNull,
|
|
_glfwGetWindowSizeNull,
|
|
_glfwSetWindowSizeNull,
|
|
_glfwSetWindowSizeLimitsNull,
|
|
_glfwSetWindowAspectRatioNull,
|
|
_glfwGetFramebufferSizeNull,
|
|
_glfwGetWindowFrameSizeNull,
|
|
_glfwGetWindowContentScaleNull,
|
|
_glfwIconifyWindowNull,
|
|
_glfwRestoreWindowNull,
|
|
_glfwMaximizeWindowNull,
|
|
_glfwShowWindowNull,
|
|
_glfwHideWindowNull,
|
|
_glfwRequestWindowAttentionNull,
|
|
_glfwFocusWindowNull,
|
|
_glfwSetWindowMonitorNull,
|
|
_glfwWindowFocusedNull,
|
|
_glfwWindowIconifiedNull,
|
|
_glfwWindowVisibleNull,
|
|
_glfwWindowMaximizedNull,
|
|
_glfwWindowHoveredNull,
|
|
_glfwFramebufferTransparentNull,
|
|
_glfwGetWindowOpacityNull,
|
|
_glfwSetWindowResizableNull,
|
|
_glfwSetWindowDecoratedNull,
|
|
_glfwSetWindowFloatingNull,
|
|
_glfwSetWindowOpacityNull,
|
|
_glfwSetWindowMousePassthroughNull,
|
|
_glfwPollEventsNull,
|
|
_glfwWaitEventsNull,
|
|
_glfwWaitEventsTimeoutNull,
|
|
_glfwPostEmptyEventNull,
|
|
_glfwGetEGLPlatformNull,
|
|
_glfwGetEGLNativeDisplayNull,
|
|
_glfwGetEGLNativeWindowNull,
|
|
_glfwGetRequiredInstanceExtensionsNull,
|
|
_glfwGetPhysicalDevicePresentationSupportNull,
|
|
_glfwCreateWindowSurfaceNull,
|
|
};
|
|
|
|
*platform = null;
|
|
return GLFW_TRUE;
|
|
}
|
|
|
|
int _glfwInitNull(void)
|
|
{
|
|
_glfwPollMonitorsNull();
|
|
return GLFW_TRUE;
|
|
}
|
|
|
|
void _glfwTerminateNull(void)
|
|
{
|
|
free(_glfw.null.clipboardString);
|
|
_glfwTerminateOSMesa();
|
|
_glfwTerminateEGL();
|
|
}
|
|
|