123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /*!
- @page internals_guide Internal structure
- @tableofcontents
- There are several interfaces inside GLFW. Each interface has its own area of
- responsibility and its own naming conventions.
- @section internals_public Public interface
- The most well-known is the public interface, described in the glfw3.h header
- file. This is implemented in source files shared by all platforms and these
- files contain no platform-specific code. This code usually ends up calling the
- platform and internal interfaces to do the actual work.
- The public interface uses the OpenGL naming conventions except with GLFW and
- glfw instead of GL and gl. For struct members, where OpenGL sets no precedent,
- it use headless camel case.
- Examples: `glfwCreateWindow`, `GLFWwindow`, `GLFW_RED_BITS`
- @section internals_native Native interface
- The [native interface](@ref native) is a small set of publicly available
- but platform-specific functions, described in the glfw3native.h header file and
- used to gain access to the underlying window, context and (on some platforms)
- display handles used by the platform interface.
- The function names of the native interface are similar to those of the public
- interface, but embeds the name of the interface that the returned handle is
- from.
- Examples: `glfwGetX11Window`, `glfwGetWGLContext`
- @section internals_internal Internal interface
- The internal interface consists of utility functions used by all other
- interfaces. It is shared code implemented in the same shared source files as
- the public and event interfaces. The internal interface is described in the
- internal.h header file.
- The internal interface is in charge of GLFW's global data, which it stores in
- a `_GLFWlibrary` struct named `_glfw`.
- The internal interface uses the same style as the public interface, except all
- global names have a leading underscore.
- Examples: `_glfwIsValidContextConfig`, `_GLFWwindow`, `_glfw.monitorCount`
- @section internals_platform Platform interface
- The platform interface implements all platform-specific operations as a service
- to the public interface. This includes event processing. The platform
- interface is never directly called by application code and never directly calls
- application-provided callbacks. It is also prohibited from modifying the
- platform-independent part of the internal structs. Instead, it calls the event
- interface when events interesting to GLFW are received.
- The platform interface mirrors those parts of the public interface that needs to
- perform platform-specific operations on some or all platforms. The are also
- named the same except that the glfw function prefix is replaced by
- _glfwPlatform.
- Examples: `_glfwPlatformCreateWindow`
- The platform interface also defines structs that contain platform-specific
- global and per-object state. Their names mirror those of the internal
- interface, except that an interface-specific suffix is added.
- Examples: `_GLFWwindowX11`, `_GLFWcontextWGL`
- These structs are incorporated as members into the internal interface structs
- using special macros that name them after the specific interface used. This
- prevents shared code from accidentally using these members.
- Examples: `window->win32.handle`, `_glfw.x11.display`
- @section internals_event Event interface
- The event interface is implemented in the same shared source files as the public
- interface and is responsible for delivering the events it receives to the
- application, either via callbacks, via window state changes or both.
- The function names of the event interface use a `_glfwInput` prefix and the
- ObjectEvent pattern.
- Examples: `_glfwInputWindowFocus`, `_glfwInputCursorPos`
- @section internals_static Static functions
- Static functions may be used by any interface and have no prefixes or suffixes.
- These use headless camel case.
- Examples: `isValidElementForJoystick`
- @section internals_config Configuration macros
- GLFW uses a number of configuration macros to select at compile time which
- interfaces and code paths to use. They are defined in the glfw_config.h header file,
- which is generated from the `glfw_config.h.in` file by CMake.
- Configuration macros the same style as tokens in the public interface, except
- with a leading underscore.
- Examples: `_GLFW_WIN32`, `_GLFW_BUILD_DLL`
- */
|