parent
52354bf382
commit
3274dc9a61
3 changed files with 128 additions and 2 deletions
@ -0,0 +1,116 @@ |
||||
/*! |
||||
|
||||
@page internals 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: @ref glfwCreateWindow, @ref GLFWwindow, @ref GLFWvidmode.redBits, |
||||
`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: @ref glfwGetX11Window, @ref 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: @ref _glfwIsValidContextConfig, @ref _GLFWwindow, `_glfw.currentRamp` |
||||
|
||||
|
||||
@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 users of GLFW and never directly calls the |
||||
user's code. 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: @ref _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 user, |
||||
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: @ref _glfwInputWindowFocus, @ref _glfwInputCursorMotion |
||||
|
||||
|
||||
@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: `clearScrollOffsets` |
||||
|
||||
|
||||
@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 config.h header file, |
||||
which is generated from the `config.h.in` file by CMake. |
||||
|
||||
Configuration macros the same style as tokens in the public interface, except |
||||
with a leading underscore. |
||||
|
||||
Examples: `_GLFW_HAS_GLXGETPROCADDRESS` |
||||
|
||||
*/ |
Loading…
Reference in New Issue