diff --git a/CMakeLists.txt b/CMakeLists.txt index 778d9dbd..9c9e94e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,6 @@ set(LIB_SUFFIX "" CACHE STRING "Takes an empty string or 64. Directory where lib option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" ON) option(GLFW_BUILD_TESTS "Build the GLFW test programs" ON) -option(GLFW_NATIVE_API "Build the GLFW native API" OFF) option(BUILD_SHARED_LIBS "Build shared libraries" OFF) if (NOT APPLE) @@ -355,12 +354,7 @@ configure_file(${GLFW_SOURCE_DIR}/src/config.h.in # The src directory's CMakeLists.txt file installs the library #-------------------------------------------------------------------- install(DIRECTORY include/GL DESTINATION include - FILES_MATCHING PATTERN glfw3.h) - -if (GLFW_NATIVE_API) - install(DIRECTORY include/GL DESTINATION include - FILES_MATCHING PATTERN glfw3native.h) -endif() + FILES_MATCHING PATTERN glfw3.h PATTERN glfw3native.h) install(FILES COPYING.txt readme.html DESTINATION share/doc/glfw-${GLFW_VERSION_FULL}) diff --git a/include/GL/glfw3native.h b/include/GL/glfw3native.h index 1dd4fbff..fc20884e 100644 --- a/include/GL/glfw3native.h +++ b/include/GL/glfw3native.h @@ -51,29 +51,30 @@ extern "C" { * System headers and types *************************************************************************/ -#if defined(GLFW_EXPOSE_NATIVE_WIN32_WGL) - - /* We are building for Win32 and WGL */ +#if defined(GLFW_EXPOSE_NATIVE_WIN32) #include - -#elif defined(GLFW_EXPOSE_NATIVE_COCOA_NSGL) - - /* We are building for Cocoa and NSOpenGL */ +#elif defined(GLFW_EXPOSE_NATIVE_COCOA) #if defined(__OBJC__) #import #else typedef void* id; #endif - -#elif defined(GLFW_EXPOSE_NATIVE_X11_GLX) - - /* We are building for X11 and GLX */ +#elif defined(GLFW_EXPOSE_NATIVE_X11) #include - #else + #error "No window API specified" +#endif - #error "No platform specified" - +#if defined(GLFW_EXPOSE_NATIVE_WGL) + /* WGL is declared by windows.h */ +#elif defined(GLFW_EXPOSE_NATIVE_NSGL) + /* NSGL is declared by Cocoa.h */ +#elif defined(GLFW_EXPOSE_NATIVE_GLX) + #include +#elif defined(GLFW_EXPOSE_NATIVE_EGL) + #include +#else + #error "No context API specified" #endif @@ -81,56 +82,76 @@ extern "C" { * Functions *************************************************************************/ -#if defined(GLFW_EXPOSE_NATIVE_WIN32_WGL) - +#if defined(GLFW_EXPOSE_NATIVE_WIN32) /*! @brief Returns the @c HWND of the specified window. * @return The @c HWND of the specified window. * @ingroup native */ -GLFWAPI HWND glfwGetWin32Window(GLFWwindow window); +GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window); +#endif +#if defined(GLFW_EXPOSE_NATIVE_WGL) /*! @brief Returns the @c HGLRC of the specified window. * @return The @c HGLRC of the specified window. * @ingroup native */ -GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow window); - -#elif defined(GLFW_EXPOSE_NATIVE_COCOA_NSGL) +GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window); +#endif +#if defined(GLFW_EXPOSE_NATIVE_COCOA) /*! @brief Returns the @c NSWindow of the specified window. * @return The @c NSWindow of the specified window. * @ingroup native */ -GLFWAPI id glfwGetCocoaWindow(GLFWwindow window); +GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window); +#endif +#if defined(GLFW_EXPOSE_NATIVE_NSGL) /*! @brief Returns the @c NSOpenGLContext of the specified window. * @return The @c NSOpenGLContext of the specified window. * @ingroup native */ -GLFWAPI id glfwGetNSGLContext(GLFWwindow window); - -#elif defined(GLFW_EXPOSE_NATIVE_X11_GLX) +GLFWAPI id glfwGetNSGLContext(GLFWwindow* window); +#endif +#if defined(GLFW_EXPOSE_NATIVE_X11) /*! @brief Returns the @c Display used by GLFW. * @return The @c Display used by GLFW. * @ingroup native */ GLFWAPI Display* glfwGetX11Display(void); - /*! @brief Returns the @c Window of the specified window. * @return The @c Window of the specified window. * @ingroup native */ -GLFWAPI Window glfwGetX11Window(GLFWwindow window); +GLFWAPI Window glfwGetX11Window(GLFWwindow* window); +#endif +#if defined(GLFW_EXPOSE_NATIVE_GLX) /*! @brief Returns the @c GLXContext of the specified window. * @return The @c GLXContext of the specified window. * @ingroup native */ -GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow window); - +GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window); #endif +#if defined(GLFW_EXPOSE_NATIVE_EGL) +/*! @brief Returns the @c EGLDisplay used by GLFW. + * @return The @c EGLDisplay used by GLFW. + * @ingroup native + */ +GLFWAPI EGLDisplay glfwGetEGLDisplay(void); +/*! @brief Returns the @c EGLContext of the specified window. + * @return The @c EGLContext of the specified window. + * @ingroup native + */ +GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window); +/*! @brief Returns the @c EGLSurface of the specified window. + * @return The @c EGLSurface of the specified window. + * @ingroup native + */ +GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window); +#endif #ifdef __cplusplus } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 05ee10e8..d0dae923 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,28 +16,16 @@ if (_GLFW_COCOA) set(glfw_SOURCES ${common_SOURCES} cocoa_clipboard.m cocoa_gamma.c cocoa_init.m cocoa_joystick.m cocoa_monitor.m cocoa_time.c cocoa_window.m) - - if (GLFW_NATIVE_API) - list(APPEND glfw_SOURCES cocoa_native.m) - endif() elseif (_GLFW_WIN32) set(glfw_HEADERS ${common_HEADERS} win32_platform.h) set(glfw_SOURCES ${common_SOURCES} win32_clipboard.c win32_gamma.c win32_init.c win32_joystick.c win32_monitor.c win32_time.c win32_window.c) - - if (GLFW_NATIVE_API) - list(APPEND glfw_SOURCES win32_native.c) - endif() elseif (_GLFW_X11) set(glfw_HEADERS ${common_HEADERS} x11_platform.h) set(glfw_SOURCES ${common_SOURCES} x11_clipboard.c x11_gamma.c x11_init.c x11_joystick.c x11_keysym2unicode.c x11_monitor.c x11_time.c x11_window.c) - - if (GLFW_NATIVE_API) - list(APPEND glfw_SOURCES x11_native.c) - endif() endif() if (_GLFW_EGL) diff --git a/src/cocoa_native.m b/src/cocoa_native.m deleted file mode 100644 index b0d7e1be..00000000 --- a/src/cocoa_native.m +++ /dev/null @@ -1,74 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL library -// Platform: Cocoa/NSOpenGL -// API version: 3.0 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2010 Camilla Berglund -// -// 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. -// -//======================================================================== - -#include "internal.h" - -#define GLFW_EXPOSE_NATIVE_COCOA_NSGL -#include "../include/GL/glfw3native.h" - - -////////////////////////////////////////////////////////////////////////// -////// GLFW native API ////// -////////////////////////////////////////////////////////////////////////// - -//======================================================================== -// Returns the X11 handle of the specified window -//======================================================================== - -GLFWAPI id glfwGetCocoaWindow(GLFWwindow handle) -{ - _GLFWwindow* window = (_GLFWwindow*) handle; - - if (!_glfwInitialized) - { - _glfwInputError(GLFW_NOT_INITIALIZED, NULL); - return 0; - } - - return window->ns.object; -} - - -//======================================================================== -// Return the GLX context of the specified window -//======================================================================== - -GLFWAPI id glfwGetNSGLContext(GLFWwindow handle) -{ - _GLFWwindow* window = (_GLFWwindow*) handle; - - if (!_glfwInitialized) - { - _glfwInputError(GLFW_NOT_INITIALIZED, NULL); - return NULL; - } - - return window->nsgl.context; -} - diff --git a/src/cocoa_window.m b/src/cocoa_window.m index b8722a41..22a792ea 100644 --- a/src/cocoa_window.m +++ b/src/cocoa_window.m @@ -969,3 +969,25 @@ void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode) } } + +////////////////////////////////////////////////////////////////////////// +////// GLFW native API ////// +////////////////////////////////////////////////////////////////////////// + +//======================================================================== +// Returns the Cocoa object of the specified window +//======================================================================== + +GLFWAPI id glfwGetCocoaWindow(GLFWwindow* handle) +{ + _GLFWwindow* window = (_GLFWwindow*) handle; + + if (!_glfwInitialized) + { + _glfwInputError(GLFW_NOT_INITIALIZED, NULL); + return 0; + } + + return window->ns.object; +} + diff --git a/src/egl_context.c b/src/egl_context.c index 7119a796..cc95951b 100644 --- a/src/egl_context.c +++ b/src/egl_context.c @@ -434,3 +434,58 @@ GLFWglproc _glfwPlatformGetProcAddress(const char* procname) return eglGetProcAddress(procname); } + +////////////////////////////////////////////////////////////////////////// +////// GLFW native API ////// +////////////////////////////////////////////////////////////////////////// + +//======================================================================== +// Return the EGL display +//======================================================================== + +GLFWAPI EGLDisplay glfwGetEGLDisplay(void) +{ + if (!_glfwInitialized) + { + _glfwInputError(GLFW_NOT_INITIALIZED, NULL); + return NULL; + } + + return _glfw.egl.display; +} + + +//======================================================================== +// Return the WGL context of the specified window +//======================================================================== + +GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* handle) +{ + _GLFWwindow* window = (_GLFWwindow*) handle; + + if (!_glfwInitialized) + { + _glfwInputError(GLFW_NOT_INITIALIZED, NULL); + return 0; + } + + return window->egl.context; +} + +//======================================================================== +// Return the EGL surface of the specified window +//======================================================================== + +GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* handle) +{ + _GLFWwindow* window = (_GLFWwindow*) handle; + + if (!_glfwInitialized) + { + _glfwInputError(GLFW_NOT_INITIALIZED, NULL); + return 0; + } + + return window->egl.surface; +} + diff --git a/src/glx_context.c b/src/glx_context.c index 9c105bf5..d110afbd 100644 --- a/src/glx_context.c +++ b/src/glx_context.c @@ -633,3 +633,25 @@ GLFWglproc _glfwPlatformGetProcAddress(const char* procname) return _glfw_glXGetProcAddress((const GLubyte*) procname); } + +////////////////////////////////////////////////////////////////////////// +////// GLFW native API ////// +////////////////////////////////////////////////////////////////////////// + +//======================================================================== +// Return the GLX context of the specified window +//======================================================================== + +GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* handle) +{ + _GLFWwindow* window = (_GLFWwindow*) handle; + + if (!_glfwInitialized) + { + _glfwInputError(GLFW_NOT_INITIALIZED, NULL); + return NULL; + } + + return window->glx.context; +} + diff --git a/src/nsgl_context.m b/src/nsgl_context.m index 91e098c0..4b340e3d 100644 --- a/src/nsgl_context.m +++ b/src/nsgl_context.m @@ -325,3 +325,25 @@ GLFWglproc _glfwPlatformGetProcAddress(const char* procname) return symbol; } + +////////////////////////////////////////////////////////////////////////// +////// GLFW native API ////// +////////////////////////////////////////////////////////////////////////// + +//======================================================================== +// Return the NSGL context of the specified window +//======================================================================== + +GLFWAPI id glfwGetNSGLContext(GLFWwindow* handle) +{ + _GLFWwindow* window = (_GLFWwindow*) handle; + + if (!_glfwInitialized) + { + _glfwInputError(GLFW_NOT_INITIALIZED, NULL); + return NULL; + } + + return window->nsgl.context; +} + diff --git a/src/wgl_context.c b/src/wgl_context.c index 8ec09049..4fc9f51e 100644 --- a/src/wgl_context.c +++ b/src/wgl_context.c @@ -593,3 +593,25 @@ GLFWglproc _glfwPlatformGetProcAddress(const char* procname) return (GLFWglproc) wglGetProcAddress(procname); } + +////////////////////////////////////////////////////////////////////////// +////// GLFW native API ////// +////////////////////////////////////////////////////////////////////////// + +//======================================================================== +// Return the WGL context of the specified window +//======================================================================== + +GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* handle) +{ + _GLFWwindow* window = (_GLFWwindow*) handle; + + if (!_glfwInitialized) + { + _glfwInputError(GLFW_NOT_INITIALIZED, NULL); + return NULL; + } + + return window->wgl.context; +} + diff --git a/src/win32_native.c b/src/win32_native.c deleted file mode 100644 index 48cd7d0e..00000000 --- a/src/win32_native.c +++ /dev/null @@ -1,74 +0,0 @@ -_glfw -// GLFW - An OpenGL library -// Platform: Win32/WGL -// API version: 3.0 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2010 Camilla Berglund -// -// 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. -// -//======================================================================== - -#include "internal.h" - -#define GLFW_EXPOSE_NATIVE_WIN32_WGL -#include "../include/GL/glfw3native.h" - - -////////////////////////////////////////////////////////////////////////// -////// GLFW native API ////// -////////////////////////////////////////////////////////////////////////// - -//======================================================================== -// Returns the Win32 handle of the specified window -//======================================================================== - -GLFWAPI HWND glfwGetWin32Window(GLFWwindow handle) -{ - _GLFWwindow* window = (_GLFWwindow*) handle; - - if (!_glfwInitialized) - { - _glfwInputError(GLFW_NOT_INITIALIZED, NULL); - return NULL; - } - - return window->win32.handle; -} - - -//======================================================================== -// Return the WGL context of the specified window -//======================================================================== - -GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow handle) -{ - _GLFWwindow* window = (_GLFWwindow*) handle; - - if (!_glfwInitialized) - { - _glfwInputError(GLFW_NOT_INITIALIZED, NULL); - return NULL; - } - - return window->WGL.context; -} - diff --git a/src/win32_window.c b/src/win32_window.c index ba60b3a6..3d4175e8 100644 --- a/src/win32_window.c +++ b/src/win32_window.c @@ -1141,4 +1141,24 @@ void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode) } } +////////////////////////////////////////////////////////////////////////// +////// GLFW native API ////// +////////////////////////////////////////////////////////////////////////// + +//======================================================================== +// Returns the Win32 handle of the specified window +//======================================================================== + +GLFWAPI HWND glfwGetWin32Window(GLFWwindow* handle) +{ + _GLFWwindow* window = (_GLFWwindow*) handle; + + if (!_glfwInitialized) + { + _glfwInputError(GLFW_NOT_INITIALIZED, NULL); + return NULL; + } + + return window->win32.handle; +} diff --git a/src/x11_native.c b/src/x11_native.c deleted file mode 100644 index 0048b07d..00000000 --- a/src/x11_native.c +++ /dev/null @@ -1,84 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL library -// Platform: Win32/WGL -// API version: 3.0 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2010 Camilla Berglund -// -// 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. -// -//======================================================================== - -#include "internal.h" - -#define GLFW_EXPOSE_NATIVE_X11_GLX -#include "../include/GL/glfw3native.h" - - -////////////////////////////////////////////////////////////////////////// -////// GLFW native API ////// -////////////////////////////////////////////////////////////////////////// - -//======================================================================== -// Returns the X11 display -//======================================================================== - -GLFWAPI Display* glfwGetX11Display(void) -{ - return _glfw.x11.display; -} - - -//======================================================================== -// Returns the X11 handle of the specified window -//======================================================================== - -GLFWAPI Window glfwGetX11Window(GLFWwindow handle) -{ - _GLFWwindow* window = (_GLFWwindow*) handle; - - if (!_glfwInitialized) - { - _glfwInputError(GLFW_NOT_INITIALIZED, NULL); - return 0; - } - - return window->x11.handle; -} - - -//======================================================================== -// Return the GLX context of the specified window -//======================================================================== - -GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow handle) -{ - _GLFWwindow* window = (_GLFWwindow*) handle; - - if (!_glfwInitialized) - { - _glfwInputError(GLFW_NOT_INITIALIZED, NULL); - return NULL; - } - - return window->glx.context; -} - diff --git a/src/x11_window.c b/src/x11_window.c index 5e266c66..c9878920 100644 --- a/src/x11_window.c +++ b/src/x11_window.c @@ -1111,3 +1111,41 @@ void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode) } } + +////////////////////////////////////////////////////////////////////////// +////// GLFW native API ////// +////////////////////////////////////////////////////////////////////////// + +//======================================================================== +// Return the X11 display +//======================================================================== + +GLFWAPI Display* glfwGetX11Display(void) +{ + if (!_glfwInitialized) + { + _glfwInputError(GLFW_NOT_INITIALIZED, NULL); + return NULL; + } + + return _glfw.x11.display; +} + + +//======================================================================== +// Return the X11 handle of the specified window +//======================================================================== + +GLFWAPI Window glfwGetX11Window(GLFWwindow* handle) +{ + _GLFWwindow* window = (_GLFWwindow*) handle; + + if (!_glfwInitialized) + { + _glfwInputError(GLFW_NOT_INITIALIZED, NULL); + return 0; + } + + return window->x11.handle; +} +