{ More info: http://forum.lazarus.freepascal.org/index.php/topic,21961.msg129100.html#msg129100 GLFW 3.3.8 - www.glfw.org A library for OpenGL, window and input ------------------------------------------------------------------------ Copyright (c) 2002-2006 Marcus Geelnard Copyright (c) 2006-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. Pascal header translate by: Jorge Turiel (Aka BlueIcaro) with the help of the lazarus community (http://www.lazarus.freepascal.org/index.php) GLFW 3.3.8; Date: 220822. Updated headers to 3.3.8 revision GLFW 3.3.7; Date: 220417. Updated headers to 3.3.7 revision GLFW 3.1; Date: 20150216 GLFW 3; Date: 20130912 } unit glfw; {$mode objfpc}{$H+} interface uses GL; type GLFW_INT = integer; GLFWwindow = integer; pGLFWwindow = ^GLFWwindow; GLFWmonitor = integer; pGLFWmonitor = ^GLFWmonitor; pFloat = ^longint; type GLFWvidmode = record Width: integer; Height: integer; redBits: integer; greenBits: integer; blueBits: integer; refreshRate: integer; end; pGLFWvidmode = ^GLFWvidmode; type PGLFWgammaramp = ^GLFWgammaramp; GLFWgammaramp = record red: smallint; green: smallint; blue: smallint; size: dword; end; type CharArray = array of char; pCharArray = CharArray; type pGLFWcursor = ^GLFWcursor; GLFWcursor = integer; type pGLFWimage = ^GLFWimage; GLFWimage = record Width: integer; Height: integer; pixels: ^byte; end; type pGLFWgamepadstate = ^GLFWgamepadstate; GLFWgamepadstate = record Buttons: array [0..15] of char; axex: array [0..6] of single; end; type pGLFWKeyFun = ^GLFWKeyFun; GLFWKeyFun = procedure(p: pGLFWWindow; i2, i3, i4, i5: longint); cdecl; pGLFWerrorfun = ^GLFWerrorfun; GLFWerrorfun = procedure(Error: GLFW_INT; Description: PChar); cdecl; pGLFWmonitorfun = ^GLFWmonitorfun; GLFWmonitorfun = procedure(Monitor: GLFWmonitor); cdecl; pGLFWjoystickfun = ^GLFWjoystickfun; GLFWjoystickfun = procedure(jig, event: GLFW_INT); cdecl; pGLFWwindowposfun = ^GLFWwindowposfun; GLFWwindowposfun = procedure(window: pGLFWwindow; PosX, PosY: integer); cdecl; pGLFWwindowsizefun = ^GLFWwindowsizefun; GLFWwindowsizefun = procedure(window: pGLFWwindow; Width, Height: integer); cdecl; pGLFWwindowclosefun = ^GLFWwindowclosefun; GLFWwindowclosefun = procedure(window: pGLFWwindow); cdecl; pGLFWwindowrefreshfun = ^GLFWwindowrefreshfun; GLFWwindowrefreshfun = procedure(window: pGLFWwindow); cdecl; pGLFWwindowfocusfun = ^GLFWwindowfocusfun; GLFWwindowfocusfun = procedure(window: pGLFWwindow); cdecl; pGLFWwindowiconifyfun = ^GLFWwindowiconifyfun; GLFWwindowiconifyfun = procedure(window: pGLFWwindow); cdecl; { The function pointer type for window maximize callbacks. This is the function pointer type for window maximize callbacks. A window maximize callback function has the following signature: void function_name(GLFWwindow window, int maximized) endcode param[in] window The window that was maximized or restored. param[in] maximized `GLFW_TRUE` if the window was maximized, or `GLFW_FALSE` if it was restored. sa ref window_maximize sa glfwSetWindowMaximizeCallback since Added in version 3.3. } pGLFWwindowmaximizefun = ^GLFWwindowmaximizefun; GLFWwindowmaximizefun = procedure(Windows: pGLFWwindow); cdecl; pGLFWframebuffersizefun = ^GLFWframebuffersizefun; GLFWframebuffersizefun = procedure(window: pGLFWwindow; witdth, Height: integer); cdecl; { The function pointer type for window content scale callbacks. This is the function pointer type for window content scale callbacks. A window content scale callback function has the following signature: void function_name(GLFWwindow window, float xscale, float yscale) endcode param[in] window The window whose content scale changed. param[in] xscale The new x-axis content scale of the window. param[in] yscale The new y-axis content scale of the window. sa ref window_scale sa ref glfwSetWindowContentScaleCallback since Added in version 3.3. ingroup window } pGLFWwindowcontentscalefun = ^GLFWwindowcontentscalefun; GLFWwindowcontentscalefun = procedure(window: pGLFWwindow; xscale, yscale: single); cdecl; pGLFWcharfun = ^GLFWcharfun; GLFWcharfun = procedure(window: pGLFWwindow); cdecl; pGLFWmousebuttonfun = ^GLFWmousebuttonfun; GLFWmousebuttonfun = procedure(window: pGLFWwindow; button, action, mods: integer); cdecl; pGLFWcursorposfun = ^GLFWcursorposfun; GLFWcursorposfun = procedure(window: pGLFWwindow; xpos, ypos: integer); cdecl; pGLFWcursorenterfun = ^GLFWcursorenterfun; GLFWcursorenterfun = procedure(window: pGLFWwindow); cdecl; pGLFWscrollfun = ^GLFWscrollfun; GLFWscrollfun = procedure(window: pGLFWwindow; xoffset, yoffset: integer); cdecl; pGLFWglproc = ^GLFWglproc; GLFWglproc = procedure; cdecl; { Vulkan API function pointer type. Generic function pointer used for returning Vulkan API function pointers without forcing a cast from a regular pointer. sa ref vulkan_proc sa ref glfwGetInstanceProcAddress since Added in version 3.2. ingroup vulkan } pGLFWvkproc = ^GLFWvkproc; GLFWvkproc = procedure; cdecl; PGLFWcharmodsfun = ^GLFWcharmodsfun; GLFWcharmodsfun = procedure(window: pGLFWwindow; cbfun: pGLFWcharmodsfun); type pGLFWdropfun = ^GLFWdropfun; GLFWdropfun = procedure(window: pGLFWwindow; Count: integer; names: PChar); const {$IFDEF MSWINDOWS} GLFW_DLL = 'GLFW3.DLL'; {$ELSE} GLFW_DLL = 'GLFW3.so'; {$ENDIF} //======================================================================== // GLFW version //======================================================================== { The major version number of the GLFW header. The major version number of the GLFW header. This is incremented when the API is changed in non-compatible ways. } GLFW_VERSION_MAJOR = 3; { The minor version number of the GLFW header. The minor version number of the GLFW header. This is incremented when features are added to the API but it remains backward-compatible. } GLFW_VERSION_MINOR = 3; { The revision number of the GLFW header. The revision number of the GLFW header. This is incremented when a bug fix release is made that does not contain any API changes. } GLFW_VERSION_REVISION = 8; { The key or mouse button was released. } GLFW_RELEASE = 0; { The key or mouse button was pressed. } GLFW_PRESS = 1; { The key was held down until it repeated. } GLFW_REPEAT = 2; //Version 334 { hat_state Joystick hat states Joystick hat states. See joystick hat input (ref joystick_hat) for how these are used. } GLFW_HAT_CENTERED = 0; GLFW_HAT_UP = 1; GLFW_HAT_RIGHT = 2; GLFW_HAT_DOWN = 4; GLFW_HAT_LEFT = 8; GLFW_HAT_RIGHT_UP = GLFW_HAT_RIGHT or GLFW_HAT_UP; GLFW_HAT_RIGHT_DOWN = GLFW_HAT_RIGHT or GLFW_HAT_DOWN; GLFW_HAT_LEFT_UP = GLFW_HAT_LEFT or GLFW_HAT_UP; GLFW_HAT_LEFT_DOWN = GLFW_HAT_LEFT or GLFW_HAT_DOWN; GLFW_KEY_UNKNOWN = -(1); GLFW_KEY_SPACE = 32; GLFW_KEY_APOSTROPHE = 39; GLFW_KEY_COMMA = 44; GLFW_KEY_MINUS = 45; GLFW_KEY_PERIOD = 46; GLFW_KEY_SLASH = 47; GLFW_KEY_0 = 48; GLFW_KEY_1 = 49; GLFW_KEY_2 = 50; GLFW_KEY_3 = 51; GLFW_KEY_4 = 52; GLFW_KEY_5 = 53; GLFW_KEY_6 = 54; GLFW_KEY_7 = 55; GLFW_KEY_8 = 56; GLFW_KEY_9 = 57; GLFW_KEY_SEMICOLON = 59; GLFW_KEY_EQUAL = 61; GLFW_KEY_A = 65; GLFW_KEY_B = 66; GLFW_KEY_C = 67; GLFW_KEY_D = 68; GLFW_KEY_E = 69; GLFW_KEY_F = 70; GLFW_KEY_G = 71; GLFW_KEY_H = 72; GLFW_KEY_I = 73; GLFW_KEY_J = 74; GLFW_KEY_K = 75; GLFW_KEY_L = 76; GLFW_KEY_M = 77; GLFW_KEY_N = 78; GLFW_KEY_O = 79; GLFW_KEY_P = 80; GLFW_KEY_Q = 81; GLFW_KEY_R = 82; GLFW_KEY_S = 83; GLFW_KEY_T = 84; GLFW_KEY_U = 85; GLFW_KEY_V = 86; GLFW_KEY_W = 87; GLFW_KEY_X = 88; GLFW_KEY_Y = 89; GLFW_KEY_Z = 90; GLFW_KEY_LEFT_BRACKET = 91; GLFW_KEY_BACKSLASH = 92; GLFW_KEY_RIGHT_BRACKET = 93; GLFW_KEY_GRAVE_ACCENT = 96; GLFW_KEY_WORLD_1 = 161; GLFW_KEY_WORLD_2 = 162; // non-US #2 GLFW_KEY_ESCAPE = 256; GLFW_KEY_ENTER = 257; GLFW_KEY_TAB = 258; GLFW_KEY_BACKSPACE = 259; GLFW_KEY_INSERT = 260; GLFW_KEY_DELETE = 261; GLFW_KEY_RIGHT = 262; GLFW_KEY_LEFT = 263; GLFW_KEY_DOWN = 264; GLFW_KEY_UP = 265; GLFW_KEY_PAGE_UP = 266; GLFW_KEY_PAGE_DOWN = 267; GLFW_KEY_HOME = 268; GLFW_KEY_END = 269; GLFW_KEY_CAPS_LOCK = 280; GLFW_KEY_SCROLL_LOCK = 281; GLFW_KEY_NUM_LOCK = 282; GLFW_KEY_PRINT_SCREEN = 283; GLFW_KEY_PAUSE = 284; GLFW_KEY_F1 = 290; GLFW_KEY_F2 = 291; GLFW_KEY_F3 = 292; GLFW_KEY_F4 = 293; GLFW_KEY_F5 = 294; GLFW_KEY_F6 = 295; GLFW_KEY_F7 = 296; GLFW_KEY_F8 = 297; GLFW_KEY_F9 = 298; GLFW_KEY_F10 = 299; GLFW_KEY_F11 = 300; GLFW_KEY_F12 = 301; GLFW_KEY_F13 = 302; GLFW_KEY_F14 = 303; GLFW_KEY_F15 = 304; GLFW_KEY_F16 = 305; GLFW_KEY_F17 = 306; GLFW_KEY_F18 = 307; GLFW_KEY_F19 = 308; GLFW_KEY_F20 = 309; GLFW_KEY_F21 = 310; GLFW_KEY_F22 = 311; GLFW_KEY_F23 = 312; GLFW_KEY_F24 = 313; GLFW_KEY_F25 = 314; GLFW_KEY_KP_0 = 320; GLFW_KEY_KP_1 = 321; GLFW_KEY_KP_2 = 322; GLFW_KEY_KP_3 = 323; GLFW_KEY_KP_4 = 324; GLFW_KEY_KP_5 = 325; GLFW_KEY_KP_6 = 326; GLFW_KEY_KP_7 = 327; GLFW_KEY_KP_8 = 328; GLFW_KEY_KP_9 = 329; GLFW_KEY_KP_DECIMAL = 330; GLFW_KEY_KP_DIVIDE = 331; GLFW_KEY_KP_MULTIPLY = 332; GLFW_KEY_KP_SUBTRACT = 333; GLFW_KEY_KP_ADD = 334; GLFW_KEY_KP_ENTER = 335; GLFW_KEY_KP_EQUAL = 336; GLFW_KEY_LEFT_SHIFT = 340; GLFW_KEY_LEFT_CONTROL = 341; GLFW_KEY_LEFT_ALT = 342; GLFW_KEY_LEFT_SUPER = 343; GLFW_KEY_RIGHT_SHIFT = 344; GLFW_KEY_RIGHT_CONTROL = 345; GLFW_KEY_RIGHT_ALT = 346; GLFW_KEY_RIGHT_SUPER = 347; GLFW_KEY_MENU = 348; GLFW_KEY_LAST = GLFW_KEY_MENU; GLFW_MOD_SHIFT = $0001; GLFW_MOD_CONTROL = $0002; GLFW_MOD_ALT = $0004; GLFW_MOD_SUPER = $0008; GLFW_MOUSE_BUTTON_1 = 0; GLFW_MOUSE_BUTTON_2 = 1; GLFW_MOUSE_BUTTON_3 = 2; GLFW_MOUSE_BUTTON_4 = 3; GLFW_MOUSE_BUTTON_5 = 4; GLFW_MOUSE_BUTTON_6 = 5; GLFW_MOUSE_BUTTON_7 = 6; GLFW_MOUSE_BUTTON_8 = 7; GLFW_MOUSE_BUTTON_LAST = GLFW_MOUSE_BUTTON_8; GLFW_MOUSE_BUTTON_LEFT = GLFW_MOUSE_BUTTON_1; GLFW_MOUSE_BUTTON_RIGHT = GLFW_MOUSE_BUTTON_2; GLFW_MOUSE_BUTTON_MIDDLE = GLFW_MOUSE_BUTTON_3; GLFW_JOYSTICK_1 = 0; GLFW_JOYSTICK_2 = 1; GLFW_JOYSTICK_3 = 2; GLFW_JOYSTICK_4 = 3; GLFW_JOYSTICK_5 = 4; GLFW_JOYSTICK_6 = 5; GLFW_JOYSTICK_7 = 6; GLFW_JOYSTICK_8 = 7; GLFW_JOYSTICK_9 = 8; GLFW_JOYSTICK_10 = 9; GLFW_JOYSTICK_11 = 10; GLFW_JOYSTICK_12 = 11; GLFW_JOYSTICK_13 = 12; GLFW_JOYSTICK_14 = 13; GLFW_JOYSTICK_15 = 14; GLFW_JOYSTICK_16 = 15; GLFW_JOYSTICK_LAST = GLFW_JOYSTICK_16; { See ref gamepad for how these are used. } GLFW_GAMEPAD_BUTTON_A = 0; GLFW_GAMEPAD_BUTTON_B = 1; GLFW_GAMEPAD_BUTTON_X = 2; GLFW_GAMEPAD_BUTTON_Y = 3; GLFW_GAMEPAD_BUTTON_LEFT_BUMPER = 4; GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER = 5; GLFW_GAMEPAD_BUTTON_BACK = 6; GLFW_GAMEPAD_BUTTON_START = 7; GLFW_GAMEPAD_BUTTON_GUIDE = 8; GLFW_GAMEPAD_BUTTON_LEFT_THUMB = 9; GLFW_GAMEPAD_BUTTON_RIGHT_THUMB = 10; GLFW_GAMEPAD_BUTTON_DPAD_UP = 11; GLFW_GAMEPAD_BUTTON_DPAD_RIGHT = 12; GLFW_GAMEPAD_BUTTON_DPAD_DOWN = 13; GLFW_GAMEPAD_BUTTON_DPAD_LEFT = 14; GLFW_GAMEPAD_BUTTON_LAST = GLFW_GAMEPAD_BUTTON_DPAD_LEFT; GLFW_GAMEPAD_BUTTON_CROSS = GLFW_GAMEPAD_BUTTON_A; GLFW_GAMEPAD_BUTTON_CIRCLE = GLFW_GAMEPAD_BUTTON_B; GLFW_GAMEPAD_BUTTON_SQUARE = GLFW_GAMEPAD_BUTTON_X; GLFW_GAMEPAD_BUTTON_TRIANGLE = GLFW_GAMEPAD_BUTTON_Y; { Gamepad axes. See ref gamepad for how these are used. } GLFW_GAMEPAD_AXIS_LEFT_X = 0; GLFW_GAMEPAD_AXIS_LEFT_Y = 1; GLFW_GAMEPAD_AXIS_RIGHT_X = 2; GLFW_GAMEPAD_AXIS_RIGHT_Y = 3; GLFW_GAMEPAD_AXIS_LEFT_TRIGGER = 4; GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER = 5; GLFW_GAMEPAD_AXIS_LAST = GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER; GLFW_NO_ERROR = $0; GLFW_NOT_INITIALIZED = $00010001; GLFW_NO_CURRENT_CONTEXT = $00010002; GLFW_INVALID_ENUM = $00010003; GLFW_INVALID_VALUE = $00010004; GLFW_OUT_OF_MEMORY = $00010005; GLFW_API_UNAVAILABLE = $00010006; GLFW_VERSION_UNAVAILABLE = $00010007; GLFW_PLATFORM_ERROR = $00010008; GLFW_FORMAT_UNAVAILABLE = $00010009; GLFW_FOCUSED = $00020001; GLFW_ICONIFIED = $00020002; GLFW_RESIZABLE = $00020003; GLFW_VISIBLE = $00020004; GLFW_DECORATED = $00020005; GLFW_AUTO_ICONIFY = $00020006; GLFW_FLOATING = $00020007; GLFW_RED_BITS = $00021001; GLFW_GREEN_BITS = $00021002; GLFW_BLUE_BITS = $00021003; GLFW_ALPHA_BITS = $00021004; GLFW_DEPTH_BITS = $00021005; GLFW_STENCIL_BITS = $00021006; GLFW_ACCUM_RED_BITS = $00021007; GLFW_ACCUM_GREEN_BITS = $00021008; GLFW_ACCUM_BLUE_BITS = $00021009; GLFW_ACCUM_ALPHA_BITS = $0002100A; GLFW_AUX_BUFFERS = $0002100B; GLFW_STEREO = $0002100C; GLFW_SAMPLES = $0002100D; GLFW_SRGB_CAPABLE = $0002100E; GLFW_REFRESH_RATE = $0002100F; GLFW_DOUBLEBUFFER = $00021010; GLFW_CLIENT_API = $00022001; GLFW_CONTEXT_VERSION_MAJOR = $00022002; GLFW_CONTEXT_VERSION_MINOR = $00022003; GLFW_CONTEXT_REVISION = $00022004; GLFW_CONTEXT_ROBUSTNESS = $00022005; GLFW_OPENGL_FORWARD_COMPAT = $00022006; GLFW_OPENGL_DEBUG_CONTEXT = $00022007; GLFW_OPENGL_PROFILE = $00022008; GLFW_CONTEXT_RELEASE_BEHAVIOR = $00022009; GLFW_OPENGL_API = $00030001; GLFW_OPENGL_ES_API = $00030002; GLFW_NO_ROBUSTNESS = 0; GLFW_NO_RESET_NOTIFICATION = $00031001; GLFW_LOSE_CONTEXT_ON_RESET = $00031002; GLFW_OPENGL_ANY_PROFILE = 0; GLFW_OPENGL_CORE_PROFILE = $00032001; GLFW_OPENGL_COMPAT_PROFILE = $00032002; GLFW_CURSOR = $00033001; GLFW_STICKY_KEYS = $00033002; GLFW_STICKY_MOUSE_BUTTONS = $00033003; GLFW_CURSOR_NORMAL = $00034001; GLFW_CURSOR_HIDDEN = $00034002; GLFW_CURSOR_DISABLED = $00034003; GLFW_ANY_RELEASE_BEHAVIOR = 0; GLFW_RELEASE_BEHAVIOR_FLUSH = $00035001; GLFW_RELEASE_BEHAVIOR_NONE = $00035002; GLFW_ARROW_CURSOR = $00036001; GLFW_IBEAM_CURSOR = $00036002; GLFW_CROSSHAIR_CURSOR = $00036003; GLFW_HAND_CURSOR = $00036004; GLFW_HRESIZE_CURSOR = $00036005; GLFW_VRESIZE_CURSOR = $00036006; GLFW_CONNECTED = $00040001; GLFW_DISCONNECTED = $00040002; { Joystick hat buttons init hint. Joystick hat buttons (ref GLFW_JOYSTICK_HAT_BUTTONS). } GLFW_JOYSTICK_HAT_BUTTONS = $00050001; { macOS specific init hint. macOS specific . } GLFW_COCOA_CHDIR_RESOURCES = $00051001; {! macOS specific init hint. macOS specific ). } GLFW_COCOA_MENUBAR = $00051002; GLFW_DONT_CARE = -1; //All call must be cdecl //======================================================================== //Init //======================================================================== { Initializes the GLFW library. This function initializes the GLFW library. Before most GLFW functions can be used, GLFW must be initialized, and before an application terminates GLFW should be terminated in order to free any resources allocated during or after initialization. If this function fails, it calls ref glfwTerminate before returning. If it succeeds, you should call ref glfwTerminate before the application exits. Additional calls to this function after successful initialization but before termination will return `GLFW_TRUE` immediately. return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an occurred. errors Possible errors include ref GLFW_PLATFORM_ERROR. remark macos This function will change the current directory of the application to the `Contents/Resources` subdirectory of the application's bundle, if present. This can be disabled with the ref GLFW_COCOA_CHDIR_RESOURCES init hint. remark x11 This function will set the `LC_CTYPE` category of the application locale according to the current environment if that category is still "C". This is because the "C" locale breaks Unicode text input. thread_safety This function must only be called from the main thread. since Added in version 1.0. } function glfwInit: integer cdecl; external GLFW_DLL; { Terminates the GLFW library. This function destroys all remaining windows and cursors, restores any modified gamma ramps and frees any other allocated resources. Once this function is called, you must again call ref glfwInit successfully before you will be able to use most GLFW functions. If GLFW has been successfully initialized, this function should be called before the application exits. If initialization fails, there is no need to call this function, as it is called by ref glfwInit before it returns failure. This function has no effect if GLFW is not initialized. errors Possible errors include ref GLFW_PLATFORM_ERROR. remark This function may be called before ref glfwInit. warning The contexts of any remaining windows must not be current on any other thread when this function is called. reentrancy This function must not be called from a callback. thread_safety This function must only be called from the main thread. sa ref intro_init sa ref glfwInit since Added in version 1.0. } procedure glfwTerminate; cdecl; external GLFW_DLL; { Sets the specified init hint to the desired value. This function sets hints for the next initialization of GLFW. The values you set hints to are never reset by GLFW, but they only take effect during initialization. Once GLFW has been initialized, any values you set will be ignored until the library is terminated and initialized again. Some hints are platform specific. These may be set on any platform but they will only affect their specific platform. Other platforms will ignore them. Setting these hints requires no platform specific headers or functions. param[in] hint The [init hint](ref init_hints) to set. param[in] value The new value of the init hint. errors Possible errors include ref GLFW_INVALID_ENUM and ref GLFW_INVALID_VALUE. remarks This function may be called before ref glfwInit. thread_safety This function must only be called from the main thread. } procedure glfwInitHint(hint: integer; Value: integer); cdecl; external GLFW_DLL; { Retrieves the version of the GLFW library. This function retrieves the major, minor and revision numbers of the GLFW library. It is intended for when you are using GLFW as a shared library and want to ensure that you are using the minimum required version. Any or all of the version arguments may be `NULL`. param[out] major Where to store the major version number, or `NULL`. param[out] minor Where to store the minor version number, or `NULL`. param[out] rev Where to store the revision number, or `NULL`. errors None. remark This function may be called before ref glfwInit. thread_safety This function may be called from any thread. } procedure glfwGetVersion(major, minor, rev: integer); cdecl; external GLFW_DLL; { Returns a string describing the compile-time configuration. This function returns the compile-time generated [version string](ref intro_version_string) of the GLFW library binary. It describes the version, platform, compiler and any platform-specific compile-time options. It should not be confused with the OpenGL or OpenGL ES version string, queried with `glGetString`. __Do not use the version string__ to parse the GLFW library version. The ref glfwGetVersion function provides the version of the running library binary in numerical format. return The ASCII encoded GLFW version string. errors None. remark This function may be called before ref glfwInit. pointer_lifetime The returned string is static and compile-time generated. thread_safety This function may be called from any thread. } function glfwGetVersionString: PChar; cdecl; external GLFW_DLL; { Returns and clears the last error for the calling thread. This function returns and clears the [error code](ref errors) of the last error that occurred on the calling thread, and optionally a UTF-8 encoded human-readable description of it. If no error has occurred since the last call, it returns ref GLFW_NO_ERROR (zero) and the description pointer is set to `NULL`. param[in] description Where to store the error description pointer, or `NULL`. return The last error code for the calling thread, or ref GLFW_NO_ERROR (zero). errors None. pointer_lifetime The returned string is allocated and freed by GLFW. You should not free it yourself. It is guaranteed to be valid only until the next error occurs or the library is terminated. remark This function may be called before ref glfwInit. thread_safety This function may be called from any thread. sa ref error_handling sa ref glfwSetErrorCallback since Added in version 3.3. ingroup init } function glfwGetError(description: PChar): integer; cdecl; external GLFW_DLL; //======================================================================== //Monitor //======================================================================== { /! Returns the currently connected monitors. This function returns an array of handles for all currently connected monitors. The primary monitor is always first in the returned array. If no monitors were found, this function returns `NULL`. param[out] count Where to store the number of monitors in the returned array. This is set to zero if an error occurred. return An array of monitor handles, or `NULL` if no monitors were found or if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED. pointer_lifetime The returned array is allocated and freed by GLFW. You should not free it yourself. It is guaranteed to be valid only until the monitor configuration changes or the library is terminated. thread_safety This function must only be called from the main thread. sa ref monitor_monitors sa ref monitor_event sa ref glfwGetPrimaryMonitor since Added in version 3.0. } function glfwGetMonitors(var Monitors: GLFW_INT): GLFWmonitor; cdecl; external GLFW_DLL; { /! Returns the primary monitor. This function returns the primary monitor. This is usually the monitor where elements like the task bar or global menu bar are located. return The primary monitor, or `NULL` if no monitors were found or if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. remark The primary monitor is always first in the array returned by ref glfwGetMonitors. sa ref monitor_monitors sa ref glfwGetMonitors since Added in version 3.0. } function glfwGetPrimaryMonitor: pGLFWmonitor; cdecl; external GLFW_DLL; { /! Returns the position of the monitor's viewport on the virtual screen. This function returns the position, in screen coordinates, of the upper-left corner of the specified monitor. Any or all of the position arguments may be `NULL`. If an error occurs, all non-`NULL` position arguments will be set to zero. param[in] monitor The monitor to query. param[out] xpos Where to store the monitor x-coordinate, or `NULL`. param[out] ypos Where to store the monitor y-coordinate, or `NULL`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref monitor_properties since Added in version 3.0. } procedure glfwGetMonitorPos(monitor: pGLFWmonitor; var xpos: GLFW_INT; var ypos: GLFW_INT); cdecl; external GLFW_DLL; { Retrieves the work area of the monitor. This function returns the position, in screen coordinates, of the upper-left corner of the work area of the specified monitor along with the work area size in screen coordinates. The work area is defined as the area of the monitor not occluded by the operating system task bar where present. If no task bar exists then the work area is the monitor resolution in screen coordinates. Any or all of the position and size arguments may be `NULL`. If an error occurs, all non-`NULL` position and size arguments will be set to zero. param[in] monitor The monitor to query. param[out] xpos Where to store the monitor x-coordinate, or `NULL`. param[out] ypos Where to store the monitor y-coordinate, or `NULL`. param[out] width Where to store the monitor width, or `NULL`. param[out] height Where to store the monitor height, or `NULL`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref monitor_workarea since Added in version 3.3. ingroup monitor / GLFWAPI void glfwGetMonitorWorkarea(GLFWmonitor monitor, int xpos, int ypos, int width, int height);} procedure glfwGetMonitorWorkarea(monitor: pGLFWmonitor; var xpos, ypos, Width, Height: GLFW_INT); cdecl; external GLFW_DLL; { /! Returns the physical size of the monitor. This function returns the size, in millimetres, of the display area of the specified monitor. Some systems do not provide accurate monitor size information, either because the monitor [EDID](https://en.wikipedia.org/wiki/Extended_display_identification_data) data is incorrect or because the driver does not report it accurately. Any or all of the size arguments may be `NULL`. If an error occurs, all non-`NULL` size arguments will be set to zero. param[in] monitor The monitor to query. param[out] widthMM Where to store the width, in millimetres, of the monitor's display area, or `NULL`. param[out] heightMM Where to store the height, in millimetres, of the monitor's display area, or `NULL`. errors Possible errors include ref GLFW_NOT_INITIALIZED. remark win32 On Windows 8 and earlier the physical size is calculated from the current resolution and system DPI instead of querying the monitor EDID data. thread_safety This function must only be called from the main thread. sa ref monitor_properties since Added in version 3.0. } procedure glfwGetMonitorPhysicalSize(Monitor: pGLFWmonitor; var Width: GLFW_INT; var Height: GLFW_INT); cdecl; external GLFW_DLL; { Retrieves the content scale for the specified monitor. This function retrieves the content scale for the specified monitor. The content scale is the ratio between the current DPI and the platform's default DPI. This is especially important for text and any UI elements. If the pixel dimensions of your UI scaled by this look appropriate on your machine then it should appear at a reasonable size on other machines regardless of their DPI and scaling settings. This relies on the system DPI and scaling settings being somewhat correct. The content scale may depend on both the monitor resolution and pixel density and on user settings. It may be very different from the raw DPI calculated from the physical size and current resolution. param[in] monitor The monitor to query. param[out] xscale Where to store the x-axis content scale, or `NULL`. param[out] yscale Where to store the y-axis content scale, or `NULL`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref monitor_scale sa ref glfwGetWindowContentScale since Added in version 3.3. ingroup monitor } procedure glfwGetMonitorContentScale(monitor: pGLFWmonitor; var xscale, yscale: single); cdecl; external GLFW_DLL; { /! Returns the name of the specified monitor. This function returns a human-readable name, encoded as UTF-8, of the specified monitor. The name typically reflects the make and model of the monitor and is not guaranteed to be unique among the connected monitors. param[in] monitor The monitor to query. return The UTF-8 encoded name of the monitor, or `NULL` if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED. pointer_lifetime The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified monitor is disconnected or the library is terminated. thread_safety This function must only be called from the main thread. sa ref monitor_properties since Added in version 3.0. } function glfwGetMonitorName(Monitor: pGLFWmonitor): PChar; cdecl; external GLFW_DLL; { Sets the user pointer of the specified monitor. This function sets the user-defined pointer of the specified monitor. The current value is retained until the monitor is disconnected. The initial value is `NULL`. This function may be called from the monitor callback, even for a monitor that is being disconnected. param[in] monitor The monitor whose pointer to set. param[in] pointer The new value. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function may be called from any thread. Access is not synchronized. sa ref monitor_userptr sa ref glfwGetMonitorUserPointer since Added in version 3.3. ingroup monitor / GLFWAPI void glfwSetMonitorUserPointer(GLFWmonitor monitor, void pointer);} procedure glfwSetMonitorUserPointer(pGLFWmonitor, UserPointer: Pointer); cdecl; external GLFW_DLL; { Returns the user pointer of the specified monitor. This function returns the current value of the user-defined pointer of the specified monitor. The initial value is `NULL`. This function may be called from the monitor callback, even for a monitor that is being disconnected. param[in] monitor The monitor whose pointer to return. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function may be called from any thread. Access is not synchronized. sa ref monitor_userptr sa ref glfwSetMonitorUserPointer since Added in version 3.3. ingroup monitor / GLFWAPI void glfwGetMonitorUserPointer(GLFWmonitor monitor);} function glfwGetMonitorUserPointer(monitor: pGLFWmonitor): Pointer; cdecl; external GLFW_DLL; { /! Sets the monitor configuration callback. This function sets the monitor configuration callback, or removes the currently set callback. This is called when a monitor is connected to or disconnected from the system. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWmonitor monitor, int event) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWmonitorfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref monitor_event since Added in version 3.0. } function glfwSetMonitorCallback(cbfun: GLFWmonitorfun): pGLFWmonitorfun; cdecl; external GLFW_DLL; //Untest //======================================================================== //Video Mode //======================================================================== { /! Returns the available video modes for the specified monitor. This function returns an array of all video modes supported by the specified monitor. The returned array is sorted in ascending order, first by color bit depth (the sum of all channel depths), then by resolution area (the product of width and height), then resolution width and finally by refresh rate. param[in] monitor The monitor to query. param[out] count Where to store the number of video modes in the returned array. This is set to zero if an error occurred. return An array of video modes, or `NULL` if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. pointer_lifetime The returned array is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified monitor is disconnected, this function is called again for that monitor or the library is terminated. thread_safety This function must only be called from the main thread. sa ref monitor_modes sa ref glfwGetVideoMode since Added in version 1.0. glfw3 Changed to return an array of modes for a specific monitor. ingroup monitor / } function glfwGetVideoModes(monitor: pGLFWmonitor; var Count: longint): PGLFWvidmode; cdecl; external GLFW_DLL; { /! Returns the current mode of the specified monitor. This function returns the current video mode of the specified monitor. If you have created a full screen window for that monitor, the return value will depend on whether that window is iconified. param[in] monitor The monitor to query. return The current mode of the monitor, or `NULL` if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. pointer_lifetime The returned array is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified monitor is disconnected or the library is terminated. thread_safety This function must only be called from the main thread. sa ref monitor_modes sa ref glfwGetVideoModes since Added in version 3.0. Replaces `glfwGetDesktopMode`. ingroup monitor / } function glfwGetVideoMode(monitor: pGLFWmonitor): pGLFWvidmode; cdecl; external GLFW_DLL; { ! Generates a gamma ramp and sets it for the specified monitor. This function generates an appropriately sized gamma ramp from the specified exponent and then calls ref glfwSetGammaRamp with it. The value must be a finite number greater than zero. The software controlled gamma ramp is applied _in addition_ to the hardware gamma correction, which today is usually an approximation of sRGB gamma. This means that setting a perfectly linear ramp, or gamma 1.0, will produce the default (usually sRGB-like) behavior. For gamma correct rendering with OpenGL or OpenGL ES, see the ref GLFW_SRGB_CAPABLE hint. param[in] monitor The monitor whose gamma ramp to set. param[in] gamma The desired exponent. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_VALUE and ref GLFW_PLATFORM_ERROR. remark wayland Gamma handling is a privileged protocol, this function will thus never be implemented and emits ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref monitor_gamma since Added in version 3.0 } procedure glfwSetGamma(monitor: pGLFWmonitor; gamma: single); cdecl; external GLFW_DLL; { /! Returns the current gamma ramp for the specified monitor. This function returns the current gamma ramp of the specified monitor. param[in] monitor The monitor to query. return The current gamma ramp, or `NULL` if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. remark wayland Gamma handling is a privileged protocol, this function will thus never be implemented and emits ref GLFW_PLATFORM_ERROR while returning `NULL`. pointer_lifetime The returned structure and its arrays are allocated and freed by GLFW. You should not free them yourself. They are valid until the specified monitor is disconnected, this function is called again for that monitor or the library is terminated. thread_safety This function must only be called from the main thread. } function glfwGetGammaRamp(monitor: pGLFWmonitor): PGLFWgammaramp; cdecl; external GLFW_DLL; { ! Sets the current gamma ramp for the specified monitor. This function sets the current gamma ramp for the specified monitor. The original gamma ramp for that monitor is saved by GLFW the first time this function is called and is restored by ref glfwTerminate. The software controlled gamma ramp is applied _in addition_ to the hardware gamma correction, which today is usually an approximation of sRGB gamma. This means that setting a perfectly linear ramp, or gamma 1.0, will produce the default (usually sRGB-like) behavior. For gamma correct rendering with OpenGL or OpenGL ES, see the ref GLFW_SRGB_CAPABLE hint. param[in] monitor The monitor whose gamma ramp to set. param[in] ramp The gamma ramp to use. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. remark The size of the specified gamma ramp should match the size of the current ramp for that monitor. remark win32 The gamma ramp size must be 256. remark wayland Gamma handling is a privileged protocol, this function will thus never be implemented and emits ref GLFW_PLATFORM_ERROR. pointer_lifetime The specified gamma ramp is copied before this function returns. thread_safety This function must only be called from the main thread. sa ref monitor_gamma since Added in version 3.0. } procedure glfwSetGammaRamp(monitor: pGLFWmonitor; ramp: pGLFWgammaramp); cdecl; external GLFW_DLL; //======================================================================== //Windows (not the SO) //======================================================================== { /! Resets all window hints to their default values. This function resets all window hints to their [default values](ref window_hints_values). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref window_hints sa ref glfwWindowHint sa ref glfwWindowHintString since Added in version 3.0. } procedure glfwDefaultWindowHints; cdecl; external GLFW_DLL; { /! Sets the specified window hint to the desired value. This function sets hints for the next call to ref glfwCreateWindow. The hints, once set, retain their values until changed by a call to this function or ref glfwDefaultWindowHints, or until the library is terminated. Only integer value hints can be set with this function. String value hints are set with ref glfwWindowHintString. This function does not check whether the specified hint values are valid. If you set hints to invalid values this will instead be reported by the next call to ref glfwCreateWindow. Some hints are platform specific. These may be set on any platform but they will only affect their specific platform. Other platforms will ignore them. Setting these hints requires no platform specific headers or functions. param[in] hint The [window hint](ref window_hints) to set. param[in] value The new value of the window hint. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_INVALID_ENUM. thread_safety This function must only be called from the main thread. sa ref window_hints sa ref glfwWindowHintString sa ref glfwDefaultWindowHints since Added in version 3.0. Replaces `glfwOpenWindowHint`. } procedure glfwWindowHint(target: integer; hint: integer); cdecl; external GLFW_DLL; { /! Sets the specified window hint to the desired value. This function sets hints for the next call to ref glfwCreateWindow. The hints, once set, retain their values until changed by a call to this function or ref glfwDefaultWindowHints, or until the library is terminated. Only string type hints can be set with this function. Integer value hints are set with ref glfwWindowHint. This function does not check whether the specified hint values are valid. If you set hints to invalid values this will instead be reported by the next call to ref glfwCreateWindow. Some hints are platform specific. These may be set on any platform but they will only affect their specific platform. Other platforms will ignore them. Setting these hints requires no platform specific headers or functions. param[in] hint The [window hint](ref window_hints) to set. param[in] value The new value of the window hint. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_INVALID_ENUM. pointer_lifetime The specified string is copied before this function returns. thread_safety This function must only be called from the main thread. sa ref window_hints sa ref glfwWindowHint sa ref glfwDefaultWindowHints since Added in version 3.3. } procedure glfwWindowHintString(hint: integer; const Value: PChar); cdecl; external GLFW_DLL; { /! Creates a window and its associated context. This function creates a window and its associated OpenGL or OpenGL ES context. Most of the options controlling how the window and its context should be created are specified with [window hints](ref window_hints). Successful creation does not change which context is current. Before you can use the newly created context, you need to [make it current](ref context_current). For information about the `share` parameter, see ref context_sharing. The created window, framebuffer and context may differ from what you requested, as not all parameters and hints are [hard constraints](ref window_hints_hard). This includes the size of the window, especially for full screen windows. To query the actual attributes of the created window, framebuffer and context, see ref glfwGetWindowAttrib, ref glfwGetWindowSize and ref glfwGetFramebufferSize. To create a full screen window, you need to specify the monitor the window will cover. If no monitor is specified, the window will be windowed mode. Unless you have a way for the user to choose a specific monitor, it is recommended that you pick the primary monitor. For more information on how to query connected monitors, see ref monitor_monitors. For full screen windows, the specified size becomes the resolution of the window's _desired video mode_. As long as a full screen window is not iconified, the supported video mode most closely matching the desired video mode is set for the specified monitor. For more information about full screen windows, including the creation of so called _windowed full screen_ or _borderless full screen_ windows, see ref window_windowed_full_screen. Once you have created the window, you can switch it between windowed and full screen mode with ref glfwSetWindowMonitor. This will not affect its OpenGL or OpenGL ES context. By default, newly created windows use the placement recommended by the window system. To create the window at a specific position, make it initially invisible using the [GLFW_VISIBLE](ref GLFW_VISIBLE_hint) window hint, set its [position](ref window_pos) and then [show](ref window_hide) it. As long as at least one full screen window is not iconified, the screensaver is prohibited from starting. Window systems put limits on window sizes. Very large or very small window dimensions may be overridden by the window system on creation. Check the actual [size](ref window_size) after creation. The [swap interval](ref buffer_swap) is not set during window creation and the initial value may vary depending on driver settings and defaults. param[in] width The desired width, in screen coordinates, of the window. This must be greater than zero. param[in] height The desired height, in screen coordinates, of the window. This must be greater than zero. param[in] title The initial, UTF-8 encoded window title. param[in] monitor The monitor to use for full screen mode, or `NULL` for windowed mode. param[in] share The window whose context to share resources with, or `NULL` to not share resources. return The handle of the created window, or `NULL` if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_ENUM, ref GLFW_INVALID_VALUE, ref GLFW_API_UNAVAILABLE, ref GLFW_VERSION_UNAVAILABLE, ref GLFW_FORMAT_UNAVAILABLE and ref GLFW_PLATFORM_ERROR. remark win32 Window creation will fail if the Microsoft GDI software OpenGL implementation is the only one available. remark win32 If the executable has an icon resource named `GLFW_ICON,` it will be set as the initial icon for the window. If no such icon is present, the `IDI_APPLICATION` icon will be used instead. To set a different icon, see ref glfwSetWindowIcon. remark win32 The context to share resources with must not be current on any other thread. remark macos The OS only supports forward-compatible core profile contexts for OpenGL versions 3.2 and later. Before creating an OpenGL context of version 3.2 or later you must set the [GLFW_OPENGL_FORWARD_COMPAT](ref GLFW_OPENGL_FORWARD_COMPAT_hint) and [GLFW_OPENGL_PROFILE](ref GLFW_OPENGL_PROFILE_hint) hints accordingly. OpenGL 3.0 and 3.1 contexts are not supported at all on macOS. remark macos The GLFW window has no icon, as it is not a document window, but the dock icon will be the same as the application bundle's icon. For more information on bundles, see the [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) in the Mac Developer Library. remark macos The first time a window is created the menu bar is created. If GLFW finds a `MainMenu.nib` it is loaded and assumed to contain a menu bar. Otherwise a minimal menu bar is created manually with common commands like Hide, Quit and About. The About entry opens a minimal about dialog with information from the application's bundle. Menu bar creation can be disabled entirely with the ref GLFW_COCOA_MENUBAR init hint. remark macos On OS X 10.10 and later the window frame will not be rendered at full resolution on Retina displays unless the [GLFW_COCOA_RETINA_FRAMEBUFFER](ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint) hint is `GLFW_TRUE` and the `NSHighResolutionCapable` key is enabled in the application bundle's `Info.plist`. For more information, see [High Resolution Guidelines for OS X](https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html) in the Mac Developer Library. The GLFW test and example programs use a custom `Info.plist` template for this, which can be found as `CMake/MacOSXBundleInfo.plist.in` in the source tree. remark macos When activating frame autosaving with [GLFW_COCOA_FRAME_NAME](ref GLFW_COCOA_FRAME_NAME_hint), the specified window size and position may be overridden by previously saved values. remark x11 Some window managers will not respect the placement of initially hidden windows. remark x11 Due to the asynchronous nature of X11, it may take a moment for a window to reach its requested state. This means you may not be able to query the final size, position or other attributes directly after window creation. remark x11 The class part of the `WM_CLASS` window property will by default be set to the window title passed to this function. The instance part will use the contents of the `RESOURCE_NAME` environment variable, if present and not empty, or fall back to the window title. Set the [GLFW_X11_CLASS_NAME](ref GLFW_X11_CLASS_NAME_hint) and [GLFW_X11_INSTANCE_NAME](ref GLFW_X11_INSTANCE_NAME_hint) window hints to override this. remark wayland Compositors should implement the xdg-decoration protocol for GLFW to decorate the window properly. If this protocol isn't supported, or if the compositor prefers client-side decorations, a very simple fallback frame will be drawn using the wp_viewporter protocol. A compositor can still emit close, maximize or fullscreen events, using for instance a keybind mechanism. If neither of these protocols is supported, the window won't be decorated. remark wayland A full screen window will not attempt to change the mode, no matter what the requested size or refresh rate. remark wayland Screensaver inhibition requires the idle-inhibit protocol to be implemented in the user's compositor. thread_safety This function must only be called from the main thread. sa ref window_creation sa ref glfwDestroyWindow since Added in version 3.0. Replaces `glfwOpenWindow`. } function glfwCreateWindow(Width, Height: integer; title: PChar; monitor: pGLFWmonitor; share: pGLFWwindow): pGLFWwindow; cdecl; external GLFW_DLL; { Destroys the specified window and its context. This function destroys the specified window and its context. On calling this function, no further callbacks will be called for that window. If the context of the specified window is current on the main thread, it is detached before being destroyed. param[in] window The window to destroy. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. note The context of the specified window must not be current on any other thread when this function is called. reentrancy This function must not be called from a callback. thread_safety This function must only be called from the main thread. sa ref window_creation sa ref glfwCreateWindow since Added in version 3.0. Replaces `glfwCloseWindow`. ingroup window } procedure glfwDestroyWindow(Window: pGLFWwindow); cdecl; external GLFW_DLL; { Checks the close flag of the specified window. This function returns the value of the close flag of the specified window. param[in] window The window to query. return The value of the close flag. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function may be called from any thread. Access is not synchronized. sa ref window_close since Added in version 3.0. } function glfwWindowShouldClose(Window: pGLFWwindow): integer; cdecl; external GLFW_DLL; { Sets the close flag of the specified window. This function sets the value of the close flag of the specified window. This can be used to override the user's attempt to close the window, or to signal that it should be closed. param[in] window The window whose flag to change. param[in] value The new value. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function may be called from any thread. Access is not synchronized. sa ref window_close since Added in version 3.0. } procedure glfwSetWindowShouldClose(window: pGLFWwindow; Action: GLFW_INT); cdecl; external GLFW_DLL; { Sets the title of the specified window. This function sets the window title, encoded as UTF-8, of the specified window. param[in] window The window whose title to change. param[in] title The UTF-8 encoded window title. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. remark macos The window title will not be updated until the next time you process events. thread_safety This function must only be called from the main thread. sa ref window_title since Added in version 1.0. glfw3 Added window handle parameter. } procedure glfwSetWindowTitle(window: pGLFWwindow; title: PChar); cdecl; external GLFW_DLL; { Sets the icon for the specified window. This function sets the icon of the specified window. If passed an array of candidate images, those of or closest to the sizes desired by the system are selected. If no images are specified, the window reverts to its default icon. The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight bits per channel with the red channel first. They are arranged canonically as packed sequential rows, starting from the top-left corner. The desired image sizes varies depending on platform and system settings. The selected images will be rescaled as needed. Good sizes include 16x16, 32x32 and 48x48. param[in] window The window whose icon to set. param[in] count The number of images in the specified array, or zero to revert to the default window icon. param[in] images The images to create the icon from. This is ignored if count is zero. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_VALUE and ref GLFW_PLATFORM_ERROR. pointer_lifetime The specified image data is copied before this function returns. remark macos The GLFW window has no icon, as it is not a document window, so this function does nothing. The dock icon will be the same as the application bundle's icon. For more information on bundles, see the [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) in the Mac Developer Library. remark wayland There is no existing protocol to change an icon, the window will thus inherit the one defined in the application's desktop file. This function always emits ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_icon since Added in version 3.2. } procedure glfwSetWindowIcon(window: pGLFWWindow; Count: integer; images: pGLFWimage); cdecl; external GLFW_DLL; { Sets the position of the content area of the specified window. This function sets the position, in screen coordinates, of the upper-left corner of the content area of the specified windowed mode window. If the window is a full screen window, this function does nothing. __Do not use this function__ to move an already visible window unless you have very good reasons for doing so, as it will confuse and annoy the user. The window manager may put limits on what positions are allowed. GLFW cannot and should not override these limits. param[in] window The window to query. param[in] xpos The x-coordinate of the upper-left corner of the content area. param[in] ypos The y-coordinate of the upper-left corner of the content area. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. remark wayland There is no way for an application to set the global position of its windows, this function will always emit ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_pos sa ref glfwGetWindowPos since Added in version 1.0. glfw3 Added window handle parameter. } procedure glfwSetWindowPos(window: pGLFWwindow; xpos, ypos: integer); cdecl; external GLFW_DLL; { Retrieves the size of the content area of the specified window. This function retrieves the size, in screen coordinates, of the content area of the specified window. If you wish to retrieve the size of the framebuffer of the window in pixels, see ref glfwGetFramebufferSize. Any or all of the size arguments may be `NULL`. If an error occurs, all non-`NULL` size arguments will be set to zero. param[in] window The window whose size to retrieve. param[out] width Where to store the width, in screen coordinates, of the content area, or `NULL`. param[out] height Where to store the height, in screen coordinates, of the content area, or `NULL`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_size sa ref glfwSetWindowSize since Added in version 1.0. glfw3 Added window handle parameter. } procedure glfwGetWindowSize(window: pGLFWwindow; var Width, Height: integer); cdecl; external GLFW_DLL; { Sets the size limits of the specified window. This function sets the size limits of the content area of the specified window. If the window is full screen, the size limits only take effect once it is made windowed. If the window is not resizable, this function does nothing. The size limits are applied immediately to a windowed mode window and may cause it to be resized. The maximum dimensions must be greater than or equal to the minimum dimensions and all must be greater than or equal to zero. param[in] window The window to set limits for. param[in] minwidth The minimum width, in screen coordinates, of the content area, or `GLFW_DONT_CARE`. param[in] minheight The minimum height, in screen coordinates, of the content area, or `GLFW_DONT_CARE`. param[in] maxwidth The maximum width, in screen coordinates, of the content area, or `GLFW_DONT_CARE`. param[in] maxheight The maximum height, in screen coordinates, of the content area, or `GLFW_DONT_CARE`. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_VALUE and ref GLFW_PLATFORM_ERROR. remark If you set size limits and an aspect ratio that conflict, the results are undefined. remark wayland The size limits will not be applied until the window is actually resized, either by the user or by the compositor. thread_safety This function must only be called from the main thread. sa ref window_sizelimits sa ref glfwSetWindowAspectRatio since Added in version 3.2. } procedure glfwSetWindowSizeLimits(window: pGLFWwindow; minwidth: integer; minheight: integer; maxwidth: integer; maxheight: integer); cdecl; external GLFW_DLL; { Sets the aspect ratio of the specified window. This function sets the required aspect ratio of the content area of the specified window. If the window is full screen, the aspect ratio only takes effect once it is made windowed. If the window is not resizable, this function does nothing. The aspect ratio is specified as a numerator and a denominator and both values must be greater than zero. For example, the common 16:9 aspect ratio is specified as 16 and 9, respectively. If the numerator and denominator is set to `GLFW_DONT_CARE` then the aspect ratio limit is disabled. The aspect ratio is applied immediately to a windowed mode window and may cause it to be resized. param[in] window The window to set limits for. param[in] numer The numerator of the desired aspect ratio, or `GLFW_DONT_CARE`. param[in] denom The denominator of the desired aspect ratio, or `GLFW_DONT_CARE`. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_VALUE and ref GLFW_PLATFORM_ERROR. remark If you set size limits and an aspect ratio that conflict, the results are undefined. remark wayland The aspect ratio will not be applied until the window is actually resized, either by the user or by the compositor. thread_safety This function must only be called from the main thread. sa ref window_sizelimits sa ref glfwSetWindowSizeLimits since Added in version 3.2. } procedure glfwSetWindowAspectRatio(window: pGLFWwindow; numer: integer; demon: integer); cdecl; external GLFW_DLL; { /*! @ Sets the size of the content area of the specified window. * * This function sets the size, in screen coordinates, of the content area of * the specified window. * * For full screen windows, this function updates the resolution of its desired * video mode and switches to the video mode closest to it, without affecting * the window's context. As the context is unaffected, the bit depths of the * framebuffer remain unchanged. * * If you wish to update the refresh rate of the desired video mode in addition * to its resolution, see @ref glfwSetWindowMonitor. * * The window manager may put limits on what sizes are allowed. GLFW cannot * and should not override these limits. * * @param[in] window The window to resize. * @param[in] width The desired width, in screen coordinates, of the window * content area. * @param[in] height The desired height, in screen coordinates, of the window * content area. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland A full screen window will not attempt to change the mode, * no matter what the requested size. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_size * @sa @ref glfwGetWindowSize * @sa @ref glfwSetWindowMonitor * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * } procedure glfwSetWindowSize(window: pGLFWwindow; var Width, Height: integer); cdecl; external GLFW_DLL; { Retrieves the size of the framebuffer of the specified window. This function retrieves the size, in pixels, of the framebuffer of the specified window. If you wish to retrieve the size of the window in screen coordinates, see ref glfwGetWindowSize. Any or all of the size arguments may be `NULL`. If an error occurs, all non-`NULL` size arguments will be set to zero. param[in] window The window whose framebuffer to query. param[out] width Where to store the width, in pixels, of the framebuffer, or `NULL`. param[out] height Where to store the height, in pixels, of the framebuffer, or `NULL`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_fbsize sa ref glfwSetFramebufferSizeCallback since Added in version 3.0. } procedure glfwGetFramebufferSize(window: pGLFWwindow; var Width, Height: integer); cdecl; external GLFW_DLL; { Retrieves the size of the frame of the window. This function retrieves the size, in screen coordinates, of each edge of the frame of the specified window. This size includes the title bar, if the window has one. The size of the frame may vary depending on the [window-related hints](ref window_hints_wnd) used to create it. Because this function retrieves the size of each window frame edge and not the offset along a particular coordinate axis, the retrieved values will always be zero or positive. Any or all of the size arguments may be `NULL`. If an error occurs, all non-`NULL` size arguments will be set to zero. param[in] window The window whose frame size to query. param[out] left Where to store the size, in screen coordinates, of the left edge of the window frame, or `NULL`. param[out] top Where to store the size, in screen coordinates, of the top edge of the window frame, or `NULL`. param[out] right Where to store the size, in screen coordinates, of the right edge of the window frame, or `NULL`. param[out] bottom Where to store the size, in screen coordinates, of the bottom edge of the window frame, or `NULL`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_size since Added in version 3.1. } procedure glfwGetWindowFrameSize(window: GLFWwindow; left, top, right, bottom: integer); cdecl; external GLFW_DLL; { Retrieves the content scale for the specified window. This function retrieves the content scale for the specified window. The content scale is the ratio between the current DPI and the platform's default DPI. This is especially important for text and any UI elements. If the pixel dimensions of your UI scaled by this look appropriate on your machine then it should appear at a reasonable size on other machines regardless of their DPI and scaling settings. This relies on the system DPI and scaling settings being somewhat correct. On systems where each monitors can have its own content scale, the window content scale will depend on which monitor the system considers the window to be on. param[in] window The window to query. param[out] xscale Where to store the x-axis content scale, or `NULL`. param[out] yscale Where to store the y-axis content scale, or `NULL`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_scale sa ref glfwSetWindowContentScaleCallback sa ref glfwGetMonitorContentScale since Added in version 3.3. } procedure glfwGetWindowContentScale(window: pGLFWwindow; var xscale, yscale: single); cdecl; external GLFW_DLL; { Returns the opacity of the whole window. This function returns the opacity of the window, including any decorations. The opacity (or alpha) value is a positive finite number between zero and one, where zero is fully transparent and one is fully opaque. If the system does not support whole window transparency, this function always returns one. The initial opacity value for newly created windows is one. param[in] window The window to query. return The opacity value of the specified window. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_transparency sa ref glfwSetWindowOpacity since Added in version 3.3. } function glfwGetWindowOpacity(window: pGLFWwindow): single; cdecl; external GLFW_DLL; { Sets the opacity of the whole window. This function sets the opacity of the window, including any decorations. The opacity (or alpha) value is a positive finite number between zero and one, where zero is fully transparent and one is fully opaque. The initial opacity value for newly created windows is one. A window created with framebuffer transparency may not use whole window transparency. The results of doing this are undefined. param[in] window The window to set the opacity for. param[in] opacity The desired opacity of the specified window. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_transparency sa ref glfwGetWindowOpacity since Added in version 3.3. } procedure glfwSetWindowOpacity(monitor: pGLFWwindow; opacity: single); cdecl; external GLFW_DLL; { Iconifies the specified window. This function iconifies (minimizes) the specified window if it was previously restored. If the window is already iconified, this function does nothing. If the specified window is a full screen window, GLFW restores the original video mode of the monitor. The window's desired video mode is set again when the window is restored. param[in] window The window to iconify. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_iconify sa ref glfwRestoreWindow sa ref glfwMaximizeWindow since Added in version 2.1. glfw3 Added window handle parameter. } procedure glfwIconifyWindow(window: pGLFWwindow); cdecl; external GLFW_DLL; { Restores the specified window. This function restores the specified window if it was previously iconified (minimized) or maximized. If the window is already restored, this function does nothing. If the specified window is an iconified full screen window, its desired video mode is set again for its monitor when the window is restored. param[in] window The window to restore. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_iconify sa ref glfwIconifyWindow sa ref glfwMaximizeWindow since Added in version 2.1. glfw3 Added window handle parameter. } procedure glfwRestoreWindow(window: pGLFWwindow); cdecl; external GLFW_DLL; { Maximizes the specified window. This function maximizes the specified window if it was previously not maximized. If the window is already maximized, this function does nothing. If the specified window is a full screen window, this function does nothing. param[in] window The window to maximize. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. par Thread Safety This function may only be called from the main thread. sa ref window_iconify sa ref glfwIconifyWindow sa ref glfwRestoreWindow since Added in GLFW 3.2. } procedure glfwMaximizeWindow(window: pGLFWwindow); cdecl; external GLFW_DLL; { Makes the specified window visible. This function makes the specified window visible if it was previously hidden. If the window is already visible or is in full screen mode, this function does nothing. By default, windowed mode windows are focused when shown Set the [GLFW_FOCUS_ON_SHOW](ref GLFW_FOCUS_ON_SHOW_hint) window hint to change this behavior for all newly created windows, or change the behavior for an existing window with ref glfwSetWindowAttrib. param[in] window The window to make visible. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. remark wayland Because Wayland wants every frame of the desktop to be complete, this function does not immediately make the window visible. Instead it will become visible the next time the window framebuffer is updated after this call. thread_safety This function must only be called from the main thread. sa ref window_hide sa ref glfwHideWindow since Added in version 3.0. } procedure glfwShowWindow(window: pGLFWwindow); cdecl; external GLFW_DLL; { Hides the specified window. This function hides the specified window if it was previously visible. If the window is already hidden or is in full screen mode, this function does nothing. param[in] window The window to hide. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_hide sa ref glfwShowWindow since Added in version 3.0. } procedure glfwHideWindow(window: pGLFWwindow); cdecl; external GLFW_DLL; { Brings the specified window to front and sets input focus. This function brings the specified window to front and sets input focus. The window should already be visible and not iconified. By default, both windowed and full screen mode windows are focused when initially created. Set the [GLFW_FOCUSED](ref GLFW_FOCUSED_hint) to disable this behavior. Also by default, windowed mode windows are focused when shown with ref glfwShowWindow. Set the [GLFW_FOCUS_ON_SHOW](ref GLFW_FOCUS_ON_SHOW_hint) to disable this behavior. __Do not use this function__ to steal focus from other applications unless you are certain that is what the user wants. Focus stealing can be extremely disruptive. For a less disruptive way of getting the user's attention, see [attention requests](ref window_attention). param[in] window The window to give input focus. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. remark wayland It is not possible for an application to bring its windows to front, this function will always emit ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref window_focus sa ref window_attention since Added in version 3.2. } procedure glfwFocusWindow(window: pGLFWwindow); cdecl; external GLFW_DLL; { Requests user attention to the specified window. This function requests user attention to the specified window. On platforms where this is not supported, attention is requested to the application as a whole. Once the user has given attention, usually by focusing the window or application, the system will end the request automatically. param[in] window The window to request attention to. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. remark macos Attention is requested to the application as a whole, not the specific window. thread_safety This function must only be called from the main thread. sa ref window_attention since Added in version 3.3. } procedure glfwRequestWindowAttention(window: pGLFWwindow); cdecl; external GLFW_DLL; { Returns the monitor that the window uses for full screen mode. This function returns the handle of the monitor that the specified window is in full screen on. param[in] window The window to query. return The monitor, or `NULL` if the window is in windowed mode or an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref window_monitor sa ref glfwSetWindowMonitor since Added in version 3.0. } function glfwGetWindowMonitor(window: pGLFWwindow): pGLFWmonitor; cdecl; external GLFW_DLL; { Sets the mode, monitor, video mode and placement of a window. This function sets the monitor that the window uses for full screen mode or, if the monitor is `NULL`, makes it windowed mode. When setting a monitor, this function updates the width, height and refresh rate of the desired video mode and switches to the video mode closest to it. The window position is ignored when setting a monitor. When the monitor is `NULL`, the position, width and height are used to place the window content area. The refresh rate is ignored when no monitor is specified. If you only wish to update the resolution of a full screen window or the size of a windowed mode window, see ref glfwSetWindowSize. When a window transitions from full screen to windowed mode, this function restores any previous window settings such as whether it is decorated, floating, resizable, has size or aspect ratio limits, etc. param[in] window The window whose monitor, size or video mode to set. param[in] monitor The desired monitor, or `NULL` to set windowed mode. param[in] xpos The desired x-coordinate of the upper-left corner of the content area. param[in] ypos The desired y-coordinate of the upper-left corner of the content area. param[in] width The desired with, in screen coordinates, of the content area or video mode. param[in] height The desired height, in screen coordinates, of the content area or video mode. param[in] refreshRate The desired refresh rate, in Hz, of the video mode, or `GLFW_DONT_CARE`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. remark The OpenGL or OpenGL ES context will not be destroyed or otherwise affected by any resizing or mode switching, although you may need to update your viewport if the framebuffer size has changed. remark wayland The desired window position is ignored, as there is no way for an application to set this property. remark wayland Setting the window to full screen will not attempt to change the mode, no matter what the requested size or refresh rate. thread_safety This function must only be called from the main thread. sa ref window_monitor sa ref window_full_screen sa ref glfwGetWindowMonitor sa ref glfwSetWindowSize since Added in version 3.2. } procedure glfwSetWindowMonitor(window: pGLFWwindow; monitor: pGLFWmonitor; xpos, ypos, Width, Height, refreshRate: integer); cdecl; external GLFW_DLL; { Returns an attribute of the specified window. This function returns the value of an attribute of the specified window or its OpenGL or OpenGL ES context. param[in] window The window to query. param[in] attrib The [window attribute](ref window_attribs) whose value to return. return The value of the attribute, or zero if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_ENUM and ref GLFW_PLATFORM_ERROR. remark Framebuffer related hints are not window attributes. See ref window_attribs_fb for more information. remark Zero is a valid value for many window and context related attributes so you cannot use a return value of zero as an indication of errors. However, this function should not fail as long as it is passed valid arguments and the library has been [initialized](ref intro_init). remark wayland The Wayland protocol provides no way to check whether a window is iconfied, so ref GLFW_ICONIFIED always returns `GLFW_FALSE`. thread_safety This function must only be called from the main thread. sa ref window_attribs sa ref glfwSetWindowAttrib since Added in version 3.0. Replaces `glfwGetWindowParam` and `glfwGetGLVersion`. } procedure glfwGetWindowAttrib(window: pGLFWwindow; attrib: integer); cdecl; external GLFW_DLL; { Sets an attribute of the specified window. This function sets the value of an attribute of the specified window. The supported attributes are [GLFW_DECORATED](ref GLFW_DECORATED_attrib), [GLFW_RESIZABLE](ref GLFW_RESIZABLE_attrib), [GLFW_FLOATING](ref GLFW_FLOATING_attrib), [GLFW_AUTO_ICONIFY](ref GLFW_AUTO_ICONIFY_attrib) and [GLFW_FOCUS_ON_SHOW](ref GLFW_FOCUS_ON_SHOW_attrib). Some of these attributes are ignored for full screen windows. The new value will take effect if the window is later made windowed. Some of these attributes are ignored for windowed mode windows. The new value will take effect if the window is later made full screen. param[in] window The window to set the attribute for. param[in] attrib A supported window attribute. param[in] value `GLFW_TRUE` or `GLFW_FALSE`. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_ENUM, ref GLFW_INVALID_VALUE and ref GLFW_PLATFORM_ERROR. remark Calling ref glfwGetWindowAttrib will always return the latest value, even if that value is ignored by the current mode of the window. thread_safety This function must only be called from the main thread. sa ref window_attribs sa ref glfwGetWindowAttrib since Added in version 3.3. ingroup window } procedure glfwSetWindowAttrib(window: pGLFWwindow; att: integer; Value: integer); cdecl; external GLFW_DLL; procedure glfwGetWindowPos(window: pGLFWWindow; var xpos, ypos: integer); cdecl; external GLFW_DLL; { Sets the user pointer of the specified window. This function sets the user-defined pointer of the specified window. The current value is retained until the window is destroyed. The initial value is `NULL`. param[in] window The window whose pointer to set. param[in] pointer The new value. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function may be called from any thread. Access is not synchronized. sa ref window_userptr sa ref glfwGetWindowUserPointer since Added in version 3.0. } procedure glfwSetWindowUserPointer(window: pGLFWwindow; p: pointer); cdecl; external GLFW_DLL; { /! Returns the user pointer of the specified window. This function returns the current value of the user-defined pointer of the specified window. The initial value is `NULL`. param[in] window The window whose pointer to return. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function may be called from any thread. Access is not synchronized. sa ref window_userptr sa ref glfwSetWindowUserPointer since Added in version 3.0. } function glfwGetWindowUserPointer(window: GLFWwindow): Pointer; cdecl; external GLFW_DLL; { /! Sets the position callback for the specified window. This function sets the position callback of the specified window, which is called when the window is moved. The callback is provided with the position, in screen coordinates, of the upper-left corner of the content area of the window. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window, int xpos, int ypos) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWwindowposfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. remark wayland This callback will never be called, as there is no way for an application to know its global position. thread_safety This function must only be called from the main thread. sa ref window_pos } function glfwSetWindowPosCallback(window: pGLFWwindow; cbfun: GLFWwindowposfun): pGLFWwindowposfun; cdecl; external GLFW_DLL; { /! Sets the size callback for the specified window. This function sets the size callback of the specified window, which is called when the window is resized. The callback is provided with the size, in screen coordinates, of the content area of the window. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window, int width, int height) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWwindowsizefun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref window_size since Added in version 1.0. glfw3 Added window handle parameter and return value. } function glfwSetWindowSizeCallback(window: pGLFWwindow; cbfun: GLFWwindowsizefun): pGLFWwindowsizefun; cdecl; external GLFW_DLL; { /! Sets the close callback for the specified window. This function sets the close callback of the specified window, which is called when the user attempts to close the window, for example by clicking the close widget in the title bar. The close flag is set before this callback is called, but you can modify it at any time with ref glfwSetWindowShouldClose. The close callback is not triggered by ref glfwDestroyWindow. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWwindowclosefun). errors Possible errors include ref GLFW_NOT_INITIALIZED. remark macos Selecting Quit from the application menu will trigger the close callback for all windows. thread_safety This function must only be called from the main thread. sa ref window_close since Added in version 2.5. glfw3 Added window handle parameter and return value. } function glfwSetWindowCloseCallback(window: pGLFWwindow; ccbfun: GLFWwindowclosefun): pGLFWwindowclosefun; cdecl; external GLFW_DLL; { /! Sets the refresh callback for the specified window. This function sets the refresh callback of the specified window, which is called when the content area of the window needs to be redrawn, for example if the window has been exposed after having been covered by another window. On compositing window systems such as Aero, Compiz, Aqua or Wayland, where the window contents are saved off-screen, this callback may be called only very infrequently or never at all. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window); endcode For more information about the callback parameters, see the [function pointer type](ref GLFWwindowrefreshfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref window_refresh since Added in version 2.5. glfw3 Added window handle parameter and return value. } function glfwSetWindowRefreshCallback(window: pGLFWwindow; cbfun: GLFWwindowrefreshfun): pGLFWwindowrefreshfun; cdecl; external GLFW_DLL; { /! Sets the focus callback for the specified window. This function sets the focus callback of the specified window, which is called when the window gains or loses input focus. After the focus callback is called for a window that lost input focus, synthetic key and mouse button release events will be generated for all such that had been pressed. For more information, see ref glfwSetKeyCallback and ref glfwSetMouseButtonCallback. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window, int focused) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWwindowfocusfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref window_focus since Added in version 3.0. } function glfwSetWindowFocusCallback(window: pGLFWwindow; cbfun: GLFWwindowfocusfun): pGLFWwindowfocusfun; cdecl; external GLFW_DLL; { /! Sets the iconify callback for the specified window. This function sets the iconification callback of the specified window, which is called when the window is iconified or restored. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window, int iconified) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWwindowiconifyfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. remark wayland The XDG-shell protocol has no event for iconification, so this callback will never be called. thread_safety This function must only be called from the main thread. sa ref window_iconify } function glfwSetWindowIconifyCallback(window: pGLFWwindow; cbfun: GLFWwindowiconifyfun): pGLFWwindowiconifyfun; cdecl; external GLFW_DLL; { Sets the maximize callback for the specified window. This function sets the maximization callback of the specified window, which is called when the window is maximized or restored. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature void function_name(GLFWwindow window, int maximized) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWwindowmaximizefun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref window_maximize since Added in version 3.3. // } function glfwSetWindowMaximizeCallback(Windows: pGLFWwindow; cbfun: GLFWwindowmaximizefun): pGLFWwindowmaximizefun; cdecl; external GLFW_DLL; { /! Sets the framebuffer resize callback for the specified window. This function sets the framebuffer resize callback of the specified window, which is called when the framebuffer of the specified window is resized. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window, int width, int height) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWframebuffersizefun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref window_fbsize since Added in version 3.0. / } function glfwSetFramebufferSizeCallback(window: pGLFWwindow; cbfun: GLFWframebuffersizefun): pGLFWframebuffersizefun; cdecl; external GLFW_DLL; { Sets the window content scale callback for the specified window. This function sets the window content scale callback of the specified window, which is called when the content scale of the specified window changes. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature void function_name(GLFWwindow window, float xscale, float yscale) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWwindowcontentscalefun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref window_scale sa ref glfwGetWindowContentScale since Added in version 3.3. ingroup window } function glfwSetWindowContentScaleCallback(window: pGLFWwindow; cbfun: GLFWwindowcontentscalefun): pGLFWwindowcontentscalefun; cdecl; external GLFW_DLL; { /! Processes all pending events. This function processes only those events that are already in the event queue and then returns immediately. Processing events will cause the window and input callbacks associated with those events to be called. On some platforms, a window move, resize or menu operation will cause event processing to block. This is due to how event processing is designed on those platforms. You can use the [window refresh callback](ref window_refresh) to redraw the contents of your window when necessary during such operations. Do not assume that callbacks you set will _only_ be called in response to event processing functions like this one. While it is necessary to poll for events, window systems that require GLFW to register callbacks of its own can pass events to GLFW in response to many window system function calls. GLFW will pass those events on to the application callbacks before returning. Event processing is not required for joystick input to work. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. reentrancy This function must not be called from a callback. thread_safety This function must only be called from the main thread. sa ref events sa ref glfwWaitEvents sa ref glfwWaitEventsTimeout since Added in version 1.0. } procedure glfwPollEvents; cdecl; external GLFW_DLL; { /! Waits until events are queued and processes them. This function puts the calling thread to sleep until at least one event is available in the event queue. Once one or more events are available, it behaves exactly like ref glfwPollEvents, i.e. the events in the queue are processed and the function then returns immediately. Processing events will cause the window and input callbacks associated with those events to be called. Since not all events are associated with callbacks, this function may return without a callback having been called even if you are monitoring all callbacks. On some platforms, a window move, resize or menu operation will cause event processing to block. This is due to how event processing is designed on those platforms. You can use the [window refresh callback](ref window_refresh) to redraw the contents of your window when necessary during such operations. Do not assume that callbacks you set will _only_ be called in response to event processing functions like this one. While it is necessary to poll for events, window systems that require GLFW to register callbacks of its own can pass events to GLFW in response to many window system function calls. GLFW will pass those events on to the application callbacks before returning. Event processing is not required for joystick input to work. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. reentrancy This function must not be called from a callback. thread_safety This function must only be called from the main thread. sa ref events sa ref glfwPollEvents sa ref glfwWaitEventsTimeout since Added in version 2.5. } procedure glfwWaitEvents; cdecl; external GLFW_DLL; { Waits with timeout until events are queued and processes them. This function puts the calling thread to sleep until at least one event is available in the event queue, or until the specified timeout is reached. If one or more events are available, it behaves exactly like ref glfwPollEvents, i.e. the events in the queue are processed and the function then returns immediately. Processing events will cause the window and input callbacks associated with those events to be called. The timeout value must be a positive finite number. Since not all events are associated with callbacks, this function may return without a callback having been called even if you are monitoring all callbacks. On some platforms, a window move, resize or menu operation will cause event processing to block. This is due to how event processing is designed on those platforms. You can use the [window refresh callback](ref window_refresh) to redraw the contents of your window when necessary during such operations. Do not assume that callbacks you set will _only_ be called in response to event processing functions like this one. While it is necessary to poll for events, window systems that require GLFW to register callbacks of its own can pass events to GLFW in response to many window system function calls. GLFW will pass those events on to the application callbacks before returning. Event processing is not required for joystick input to work. param[in] timeout The maximum amount of time, in seconds, to wait. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_VALUE and ref GLFW_PLATFORM_ERROR. reentrancy This function must not be called from a callback. thread_safety This function must only be called from the main thread. sa ref events sa ref glfwPollEvents sa ref glfwWaitEvents since Added in version 3.2. } procedure glfwWaitEventsTimeout(timeout: double); cdecl; external GLFW_DLL; { Posts an empty event to the event queue. This function posts an empty event from the current thread to the event queue, causing ref glfwWaitEvents or ref glfwWaitEventsTimeout to return. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function may be called from any thread. sa ref events sa ref glfwWaitEvents sa ref glfwWaitEventsTimeout since Added in version 3.1.} procedure glfwPostEmptyEvent; cdecl; external GLFW_DLL; //Version 3.1 //======================================================================== //Input //======================================================================== { /! Returns the value of an input option for the specified window. This function returns the value of an input option for the specified window. The mode must be one of ref GLFW_CURSOR, ref GLFW_STICKY_KEYS, ref GLFW_STICKY_MOUSE_BUTTONS, ref GLFW_LOCK_KEY_MODS or ref GLFW_RAW_MOUSE_MOTION. param[in] window The window to query. param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or `GLFW_RAW_MOUSE_MOTION`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_INVALID_ENUM. thread_safety This function must only be called from the main thread. sa ref glfwSetInputMode since Added in version 3.0. } function glfwGetInputMode(window: pGLFWwindow; mode: integer): integer; cdecl; external GLFW_DLL; { /! Sets an input option for the specified window. This function sets an input mode option for the specified window. The mode must be one of ref GLFW_CURSOR, ref GLFW_STICKY_KEYS, ref GLFW_STICKY_MOUSE_BUTTONS, ref GLFW_LOCK_KEY_MODS or ref GLFW_RAW_MOUSE_MOTION. If the mode is `GLFW_CURSOR`, the value must be one of the following cursor modes: - `GLFW_CURSOR_NORMAL` makes the cursor visible and behaving normally. - `GLFW_CURSOR_HIDDEN` makes the cursor invisible when it is over the content area of the window but does not restrict the cursor from leaving. - `GLFW_CURSOR_DISABLED` hides and grabs the cursor, providing virtual and unlimited cursor movement. This is useful for implementing for example 3D camera controls. If the mode is `GLFW_STICKY_KEYS`, the value must be either `GLFW_TRUE` to enable sticky keys, or `GLFW_FALSE` to disable it. If sticky keys are enabled, a key press will ensure that ref glfwGetKey returns `GLFW_PRESS` the next time it is called even if the key had been released before the call. This is useful when you are only interested in whether keys have been pressed but not when or in which order. If the mode is `GLFW_STICKY_MOUSE_BUTTONS`, the value must be either `GLFW_TRUE` to enable sticky mouse buttons, or `GLFW_FALSE` to disable it. If sticky mouse buttons are enabled, a mouse button press will ensure that ref glfwGetMouseButton returns `GLFW_PRESS` the next time it is called even if the mouse button had been released before the call. This is useful when you are only interested in whether mouse buttons have been pressed but not when or in which order. If the mode is `GLFW_LOCK_KEY_MODS`, the value must be either `GLFW_TRUE` to enable lock key modifier bits, or `GLFW_FALSE` to disable them. If enabled, callbacks that receive modifier bits will also have the ref GLFW_MOD_CAPS_LOCK bit set when the event was generated with Caps Lock on, and the ref GLFW_MOD_NUM_LOCK bit when Num Lock was on. If the mode is `GLFW_RAW_MOUSE_MOTION`, the value must be either `GLFW_TRUE` to enable raw (unscaled and unaccelerated) mouse motion when the cursor is disabled, or `GLFW_FALSE` to disable it. If raw motion is not supported, attempting to set this will emit ref GLFW_PLATFORM_ERROR. Call ref glfwRawMouseMotionSupported to check for support. param[in] window The window whose input mode to set. param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or `GLFW_RAW_MOUSE_MOTION`. param[in] value The new value of the specified input mode. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_ENUM and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref glfwGetInputMode since Added in version 3.0. Replaces `glfwEnable` and `glfwDisable`. } procedure glfwSetInputMode(window: pGLFWwindow; mode, Value: integer); cdecl; external GLFW_DLL; { Returns whether raw mouse motion is supported. This function returns whether raw mouse motion is supported on the current system. This status does not change after GLFW has been initialized so you only need to check this once. If you attempt to enable raw motion on a system that does not support it, ref GLFW_PLATFORM_ERROR will be emitted. Raw mouse motion is closer to the actual motion of the mouse across a surface. It is not affected by the scaling and acceleration applied to the motion of the desktop cursor. That processing is suitable for a cursor while raw motion is better for controlling for example a 3D camera. Because of this, raw mouse motion is only provided when the cursor is disabled. return `GLFW_TRUE` if raw mouse motion is supported on the current machine, or `GLFW_FALSE` otherwise. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref raw_mouse_motion sa ref glfwSetInputMode since Added in version 3.3. } function glfwRawMouseMotionSupported(): integer; cdecl; external GLFW_DLL; { Returns the layout-specific name of the specified printable key. This function returns the name of the specified printable key, encoded as UTF-8. This is typically the character that key would produce without any modifier keys, intended for displaying key bindings to the user. For dead keys, it is typically the diacritic it would add to a character. __Do not use this function__ for [text input](ref input_char). You will break text input for many languages even if it happens to work for yours. If the key is `GLFW_KEY_UNKNOWN`, the scancode is used to identify the key, otherwise the scancode is ignored. If you specify a non-printable key, or `GLFW_KEY_UNKNOWN` and a scancode that maps to a non-printable key, this function returns `NULL` but does not emit an error. This behavior allows you to always pass in the arguments in the [key callback](ref input_key) without modification. The printable keys are: - `GLFW_KEY_APOSTROPHE` - `GLFW_KEY_COMMA` - `GLFW_KEY_MINUS` - `GLFW_KEY_PERIOD` - `GLFW_KEY_SLASH` - `GLFW_KEY_SEMICOLON` - `GLFW_KEY_EQUAL` - `GLFW_KEY_LEFT_BRACKET` - `GLFW_KEY_RIGHT_BRACKET` - `GLFW_KEY_BACKSLASH` - `GLFW_KEY_WORLD_1` - `GLFW_KEY_WORLD_2` - `GLFW_KEY_0` to `GLFW_KEY_9` - `GLFW_KEY_A` to `GLFW_KEY_Z` - `GLFW_KEY_KP_0` to `GLFW_KEY_KP_9` - `GLFW_KEY_KP_DECIMAL` - `GLFW_KEY_KP_DIVIDE` - `GLFW_KEY_KP_MULTIPLY` - `GLFW_KEY_KP_SUBTRACT` - `GLFW_KEY_KP_ADD` - `GLFW_KEY_KP_EQUAL` Names for printable keys depend on keyboard layout, while names for non-printable keys are the same across layouts but depend on the application language and should be localized along with other user interface text. param[in] key The key to query, or `GLFW_KEY_UNKNOWN`. param[in] scancode The scancode of the key to query. return The UTF-8 encoded, layout-specific name of the key, or `NULL`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. remark The contents of the returned string may change when a keyboard layout change event is received. pointer_lifetime The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the library is terminated. thread_safety This function must only be called from the main thread. sa ref input_key_name since Added in version 3.2. } function glfwGetKeyName(key, scancode: integer): PChar; cdecl; external GLFW_DLL; { Returns the platform-specific scancode of the specified key. This function returns the platform-specific scancode of the specified key. If the key is `GLFW_KEY_UNKNOWN` or does not exist on the keyboard this method will return `-1`. param[in] key Any [named key](ref keys). return The platform-specific scancode for the key, or `-1` if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_ENUM and ref GLFW_PLATFORM_ERROR. thread_safety This function may be called from any thread. sa ref input_key since Added in version 3.3. ingroup input } function glfwGetKeyScancode(key: integer): integer; cdecl; external GLFW_DLL; { /! Returns the last reported state of a keyboard key for the specified window. This function returns the last state reported for the specified key to the specified window. The returned state is one of `GLFW_PRESS` or `GLFW_RELEASE`. The action `GLFW_REPEAT` is only reported to the key callback. If the ref GLFW_STICKY_KEYS input mode is enabled, this function returns `GLFW_PRESS` the first time you call it for a key that was pressed, even if that key has already been released. The key functions deal with physical keys, with [key tokens](ref keys) named after their use on the standard US keyboard layout. If you want to input text, use the Unicode character callback instead. The [modifier key bit masks](ref mods) are not key tokens and cannot be used with this function. __Do not use this function__ to implement [text input](ref input_char). param[in] window The desired window. param[in] key The desired [keyboard key](ref keys). `GLFW_KEY_UNKNOWN` is not a valid key for this function. return One of `GLFW_PRESS` or `GLFW_RELEASE`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_INVALID_ENUM. thread_safety This function must only be called from the main thread. sa ref input_key since Added in version 1.0. glfw3 Added window handle parameter. } function glfwGetKey(window: pGLFWwindow; key: integer): integer; cdecl; external GLFW_DLL; { /! Returns the last reported state of a mouse button for the specified window. This function returns the last state reported for the specified mouse button to the specified window. The returned state is one of `GLFW_PRESS` or `GLFW_RELEASE`. If the ref GLFW_STICKY_MOUSE_BUTTONS input mode is enabled, this function returns `GLFW_PRESS` the first time you call it for a mouse button that was pressed, even if that mouse button has already been released. param[in] window The desired window. param[in] button The desired [mouse button](ref buttons). return One of `GLFW_PRESS` or `GLFW_RELEASE`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_INVALID_ENUM. thread_safety This function must only be called from the main thread. sa ref input_mouse_button since Added in version 1.0. glfw3 Added window handle parameter. } function glfwGetMouseButton(window: pGLFWwindow; button: integer): integer; cdecl; external GLFW_DLL; { /! Retrieves the position of the cursor relative to the content area of the window. This function returns the position of the cursor, in screen coordinates, relative to the upper-left corner of the content area of the specified window. If the cursor is disabled (with `GLFW_CURSOR_DISABLED`) then the cursor position is unbounded and limited only by the minimum and maximum values of a `double`. The coordinate can be converted to their integer equivalents with the `floor` function. Casting directly to an integer type works for positive coordinates, but fails for negative ones. Any or all of the position arguments may be `NULL`. If an error occurs, all non-`NULL` position arguments will be set to zero. param[in] window The desired window. param[out] xpos Where to store the cursor x-coordinate, relative to the left edge of the content area, or `NULL`. param[out] ypos Where to store the cursor y-coordinate, relative to the to top edge of the content area, or `NULL`. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref cursor_pos sa ref glfwSetCursorPos since Added in version 3.0. Replaces `glfwGetMousePos`. } function glfwGetCursorPos(window: pGLFWwindow; var xpos, ypos: double): integer; cdecl; external GLFW_DLL; { /! Sets the position of the cursor, relative to the content area of the window. This function sets the position, in screen coordinates, of the cursor relative to the upper-left corner of the content area of the specified window. The window must have input focus. If the window does not have input focus when this function is called, it fails silently. __Do not use this function__ to implement things like camera controls. GLFW already provides the `GLFW_CURSOR_DISABLED` cursor mode that hides the cursor, transparently re-centers it and provides unconstrained cursor motion. See ref glfwSetInputMode for more information. If the cursor mode is `GLFW_CURSOR_DISABLED` then the cursor position is unconstrained and limited only by the minimum and maximum values of a `double`. param[in] window The desired window. param[in] xpos The desired x-coordinate, relative to the left edge of the content area. param[in] ypos The desired y-coordinate, relative to the top edge of the content area. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. remark wayland This function will only work when the cursor mode is `GLFW_CURSOR_DISABLED`, otherwise it will do nothing. thread_safety This function must only be called from the main thread. sa ref cursor_pos sa ref glfwGetCursorPos since Added in version 3.0. Replaces `glfwSetMousePos`. ingroup input / } procedure glfwSetCursorPos(window: pGLFWwindow; xpos, ypos: double); cdecl; external GLFW_DLL; { /! Creates a custom cursor. Creates a new custom cursor image that can be set for a window with ref glfwSetCursor. The cursor can be destroyed with ref glfwDestroyCursor. Any remaining cursors are destroyed by ref glfwTerminate. The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight bits per channel with the red channel first. They are arranged canonically as packed sequential rows, starting from the top-left corner. The cursor hotspot is specified in pixels, relative to the upper-left corner of the cursor image. Like all other coordinate systems in GLFW, the X-axis points to the right and the Y-axis points down. param[in] image The desired cursor image. param[in] xhot The desired x-coordinate, in pixels, of the cursor hotspot. param[in] yhot The desired y-coordinate, in pixels, of the cursor hotspot. return The handle of the created cursor, or `NULL` if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_VALUE and ref GLFW_PLATFORM_ERROR. pointer_lifetime The specified image data is copied before this function returns. thread_safety This function must only be called from the main thread. sa ref cursor_object sa ref glfwDestroyCursor sa ref glfwCreateStandardCursor since Added in version 3.1. } function glfwCreateCursor(const image: pGLFWimage; var xhot, yhot: integer): pGLFWcursor; cdecl; external GLFW_DLL; { /! Creates a cursor with a standard shape. Returns a cursor with a [standard shape](ref shapes), that can be set for a window with ref glfwSetCursor. param[in] shape One of the [standard shapes](ref shapes). return A new cursor ready to use or `NULL` if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_ENUM and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref cursor_object sa ref glfwCreateCursor } function glfwCreateStandardCursor(shape: integer): pGLFWcursor; cdecl; external GLFW_DLL; { /! Destroys a cursor. This function destroys a cursor previously created with ref glfwCreateCursor. Any remaining cursors will be destroyed by ref glfwTerminate. If the specified cursor is current for any window, that window will be reverted to the default cursor. This does not affect the cursor mode. param[in] cursor The cursor object to destroy. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. reentrancy This function must not be called from a callback. thread_safety This function must only be called from the main thread. sa ref cursor_object sa ref glfwCreateCursor since Added in version 3.1. } procedure glfwDestroyCursor(cursor: pGLFWcursor); cdecl; external GLFW_DLL; { /! Sets the cursor for the window. This function sets the cursor image to be used when the cursor is over the content area of the specified window. The set cursor will only be visible when the [cursor mode](ref cursor_mode) of the window is `GLFW_CURSOR_NORMAL`. On some platforms, the set cursor may not be visible unless the window also has input focus. param[in] window The window to set the cursor for. param[in] cursor The cursor to set, or `NULL` to switch back to the default arrow cursor. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_PLATFORM_ERROR. thread_safety This function must only be called from the main thread. sa ref cursor_object since Added in version 3.1. } procedure glfwSetCursor(window: pGLFWwindow; cursor: pGLFWcursor); cdecl; external GLFW_DLL; { /! Sets the key callback. This function sets the key callback of the specified window, which is called when a key is pressed, repeated or released. The key functions deal with physical keys, with layout independent [key tokens](ref keys) named after their values in the standard US keyboard layout. If you want to input text, use the [character callback](ref glfwSetCharCallback) instead. When a window loses input focus, it will generate synthetic key release events for all pressed keys. You can tell these events from user-generated events by the fact that the synthetic ones are generated after the focus loss event has been processed, i.e. after the [window focus callback](ref glfwSetWindowFocusCallback) has been called. The scancode of a key is specific to that platform or sometimes even to that machine. Scancodes are intended to allow users to bind keys that don't have a GLFW key token. Such keys have `key` set to `GLFW_KEY_UNKNOWN`, their state is not saved and so it cannot be queried with ref glfwGetKey. Sometimes GLFW needs to generate synthetic key events, in which case the scancode may be zero. param[in] window The window whose callback to set. param[in] callback The new key callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window, int key, int scancode, int action, int mods) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWkeyfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref input_key since Added in version 1.0. glfw3 Added window handle parameter and return value. } function glfwSetKeyCallback(window: pGLFWwindow; cbfun: GLFWkeyfun): pGLFWKeyFun; cdecl; external GLFW_DLL; { /! Sets the Unicode character callback. This function sets the character callback of the specified window, which is called when a Unicode character is input. The character callback is intended for Unicode text input. As it deals with characters, it is keyboard layout dependent, whereas the [key callback](ref glfwSetKeyCallback) is not. Characters do not map 1:1 to physical keys, as a key may produce zero, one or more characters. If you want to know whether a specific physical key was pressed or released, see the key callback instead. The character callback behaves as system text input normally does and will not be called if modifier keys are held down that would prevent normal text input on that platform, for example a Super (Command) key on macOS or Alt key on Windows. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window, unsigned int codepoint) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWcharfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref input_char since Added in version 2.4. } function glfwSetCharCallback(window: pGLFWwindow; cdfun: GLFWcharfun): pGLFWcharfun; cdecl; external GLFW_DLL; { /! Sets the Unicode character with modifiers callback. This function sets the character with modifiers callback of the specified window, which is called when a Unicode character is input regardless of what modifier keys are used. The character with modifiers callback is intended for implementing custom Unicode character input. For regular Unicode text input, see the [character callback](ref glfwSetCharCallback). Like the character callback, the character with modifiers callback deals with characters and is keyboard layout dependent. Characters do not map 1:1 to physical keys, as a key may produce zero, one or more characters. If you want to know whether a specific physical key was pressed or released, see the [key callback](ref glfwSetKeyCallback) instead. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or an [error](ref error_handling) occurred. callback_signature code void function_name(GLFWwindow window, unsigned int codepoint, int mods) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWcharmodsfun). deprecated Scheduled for removal in version 4.0. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref input_char since Added in version 3.1. } function glfwSetCharModsCallback(window: GLFWwindow; cbfun: PGLFWcharmodsfun): PGLFWcharmodsfun; cdecl; external GLFW_DLL; //Version 3.1 { /! Sets the mouse button callback. This function sets the mouse button callback of the specified window, which is called when a mouse button is pressed or released. When a window loses input focus, it will generate synthetic mouse button release events for all pressed mouse buttons. You can tell these events from user-generated events by the fact that the synthetic ones are generated after the focus loss event has been processed, i.e. after the [window focus callback](ref glfwSetWindowFocusCallback) has been called. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window, int button, int action, int mods) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWmousebuttonfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref input_mouse_button since Added in version 1.0. glfw3 Added window handle parameter and return value. } function glfwSetMouseButtonCallback(window: pGLFWwindow; cbfun: GLFWmousebuttonfun): pGLFWmousebuttonfun; cdecl; external GLFW_DLL; { /! Sets the cursor position callback. This function sets the cursor position callback of the specified window, which is called when the cursor is moved. The callback is provided with the position, in screen coordinates, relative to the upper-left corner of the content area of the window. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window, double xpos, double ypos); endcode For more information about the callback parameters, see the [function pointer type](ref GLFWcursorposfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref cursor_pos since Added in version 3.0. Replaces `glfwSetMousePosCallback`. } function glfwSetCursorPosCallback(window: pGLFWwindow; cbfun: GLFWcursorposfun): pGLFWcursorposfun; cdecl; external GLFW_DLL; { /! Sets the cursor enter/leave callback. This function sets the cursor boundary crossing callback of the specified window, which is called when the cursor enters or leaves the content area of the window. param[in] window The window whose callback to set. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window, int entered) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWcursorenterfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref cursor_enter since Added in version 3.0. } function glfwSetCursorEnterCallback(window: pGLFWwindow; cbfun: GLFWcursorenterfun): pGLFWcursorenterfun; cdecl; external GLFW_DLL; { /! Sets the scroll callback. This function sets the scroll callback of the specified window, which is called when a scrolling device is used, such as a mouse wheel or scrolling area of a touchpad. The scroll callback receives all scrolling input, like that from a mouse wheel or a touchpad scrolling area. param[in] window The window whose callback to set. param[in] callback The new scroll callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature code void function_name(GLFWwindow window, double xoffset, double yoffset) endcode For more information about the callback parameters, see the [function pointer type](ref GLFWscrollfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref scrolling since Added in version 3.0. Replaces `glfwSetMouseWheelCallback`. } function glfwSetScrollCallback(window: pGLFWwindow; cbfun: GLFWscrollfun): pGLFWscrollfun; cdecl; external GLFW_DLL; { Sets the path drop callback. * * This function sets the path drop callback of the specified window, which is * called when one or more dragged paths are dropped on the window. * * Because the path array and its strings may have been generated specifically * for that event, they are not guaranteed to be valid after the callback has * returned. If you wish to use them after the callback returns, you need to * make a deep copy. * * @param[in] window The window whose callback to set. * @param[in] callback The new file drop callback, or `NULL` to remove the * currently set callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int path_count, const char* paths[]) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWdropfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @remark @wayland File drop is currently unimplemented. * * @thread_safety This function must only be called from the main thread. * * @sa @ref path_drop * * @since Added in version 3.1. } function glfwSetDropCallback(window: pGLFWwindow; cbfun: GLFWdropfun): pGLFWdropfun; cdecl; external GLFW_DLL; { Returns whether the specified joystick is present. * * This function returns whether the specified joystick is present. * * There is no need to call this function before other functions that accept * a joystick ID, as they all check for presence before performing any other * work. * * @param[in] jid The [joystick](@ref joysticks) to query. * @return `GLFW_TRUE` if the joystick is present, or `GLFW_FALSE` otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick * * @since Added in version 3.0. Replaces `glfwGetJoystickParam`. } function glfwJoystickPresent(joy: integer): integer; cdecl; external GLFW_DLL; { Returns the values of all axes of the specified joystick. * * This function returns the values of all axes of the specified joystick. * Each element in the array is a value between -1.0 and 1.0. * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] count Where to store the number of axis values in the returned * array. This is set to zero if the joystick is not present or an error * occurred. * @return An array of axis values, or `NULL` if the joystick is not present or * an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_axis * * @since Added in version 3.0. Replaces `glfwGetJoystickPos`. } function glfwGetJoystickAxes(joy: integer; var Count: integer): pfloat; cdecl; external GLFW_DLL; { Returns the state of all buttons of the specified joystick. * * This function returns the state of all buttons of the specified joystick. * Each element in the array is either `GLFW_PRESS` or `GLFW_RELEASE`. * * For backward compatibility with earlier versions that did not have @ref * glfwGetJoystickHats, the button array also includes all hats, each * represented as four buttons. The hats are in the same order as returned by * __glfwGetJoystickHats__ and are in the order _up_, _right_, _down_ and * _left_. To disable these extra buttons, set the @ref * GLFW_JOYSTICK_HAT_BUTTONS init hint before initialization. * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] count Where to store the number of button states in the returned * array. This is set to zero if the joystick is not present or an error * occurred. * @return An array of button states, or `NULL` if the joystick is not present * or an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_button * * @since Added in version 2.2. * @glfw3 Changed to return a dynamic array. } function glfwGetJoystickButtons(joy: integer; varcount: integer): pCharArray; cdecl; external GLFW_DLL; { Returns the state of all hats of the specified joystick. This function returns the state of all hats of the specified joystick. Each element in the array is one of the following values: Name | Value ---- | ----- `GLFW_HAT_CENTERED` | 0 `GLFW_HAT_UP` | 1 `GLFW_HAT_RIGHT` | 2 `GLFW_HAT_DOWN` | 4 `GLFW_HAT_LEFT` | 8 `GLFW_HAT_RIGHT_UP` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_UP` `GLFW_HAT_RIGHT_DOWN` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_DOWN` `GLFW_HAT_LEFT_UP` | `GLFW_HAT_LEFT` \| `GLFW_HAT_UP` `GLFW_HAT_LEFT_DOWN` | `GLFW_HAT_LEFT` \| `GLFW_HAT_DOWN` The diagonal directions are bitwise combinations of the primary (up, right, down and left) directions and you can test for these individually by ANDing it with the corresponding direction. if the specified joystick is not present this function will return `NULL` but will not generate an error. This can be used instead of first calling ref glfwJoystickPresent. param[in] jid The [joystick](ref joysticks) to query. param[out] count Where to store the number of hat states in the returned array. This is set to zero if the joystick is not present or an error occurred. return An array of hat states, or `NULL` if the joystick is not present or an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_ENUM and ref GLFW_PLATFORM_ERROR. pointer_lifetime The returned array is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected, this function is called again for that joystick or the library is terminated. thread_safety This function must only be called from the main thread. sa ref joystick_hat since Added in version 3.3. ingroup input } function glfwGetJoystickHats(jid: integer; var Count: integer): PChar; cdecl; external GLFW_DLL; function glfwGetJoystickName(joy: integer): PChar; cdecl; external GLFW_DLL; { Returns the SDL compatible GUID of the specified joystick. This function returns the SDL compatible GUID, as a UTF-8 encoded hexadecimal string, of the specified joystick. The returned string is allocated and freed by GLFW. You should not free it yourself. The GUID is what connects a joystick to a gamepad mapping. A connected joystick will always have a GUID even if there is no gamepad mapping assigned to it. If the specified joystick is not present this function will return `NULL` but will not generate an error. This can be used instead of first calling ref glfwJoystickPresent. The GUID uses the format introduced in SDL 2.0.5. This GUID tries to uniquely identify the make and model of a joystick but does not identify a specific unit, e.g. all wired Xbox 360 controllers will have the same GUID on that platform. The GUID for a unit may vary between platforms depending on what hardware information the platform specific APIs provide. param[in] jid The [joystick](ref joysticks) to query. return The UTF-8 encoded GUID of the joystick, or `NULL` if the joystick is not present or an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_INVALID_ENUM and ref GLFW_PLATFORM_ERROR. pointer_lifetime The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected or the library is terminated. thread_safety This function must only be called from the main thread. sa ref gamepad since Added in version 3.3. ingroup input / } function glfwGetJoystickGUID(jid: integer): PChar; cdecl; external GLFW_DLL; { Sets the user pointer of the specified joystick. This function sets the user-defined pointer of the specified joystick. The current value is retained until the joystick is disconnected. The initial value is `NULL`. This function may be called from the joystick callback, even for a joystick that is being disconnected. param[in] jid The joystick whose pointer to set. param[in] pointer The new value. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function may be called from any thread. Access is not synchronized. sa ref joystick_userptr sa ref glfwGetJoystickUserPointer since Added in version 3.3. ingroup input / } procedure glfwSetJoystickUserPointer(jid: integer; newvalue: Pointer); cdecl; external GLFW_DLL; { Returns the user pointer of the specified joystick. This function returns the current value of the user-defined pointer of the specified joystick. The initial value is `NULL`. This function may be called from the joystick callback, even for a joystick that is being disconnected. param[in] jid The joystick whose pointer to return. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function may be called from any thread. Access is not synchronized. sa ref joystick_userptr sa ref glfwSetJoystickUserPointer since Added in version 3.3. ingroup input / } function glfwGetJoystickUserPointer(jid: integer): Pointer; cdecl; external GLFW_DLL; { Returns whether the specified joystick has a gamepad mapping. This function returns whether the specified joystick is both present and has a gamepad mapping. If the specified joystick is present but does not have a gamepad mapping this function will return `GLFW_FALSE` but will not generate an error. Call ref glfwJoystickPresent to check if a joystick is present regardless of whether it has a mapping. param[in] jid The [joystick](ref joysticks) to query. return `GLFW_TRUE` if a joystick is both present and has a gamepad mapping, or `GLFW_FALSE` otherwise. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_INVALID_ENUM. thread_safety This function must only be called from the main thread. sa ref gamepad sa ref glfwGetGamepadState since Added in version 3.3. ingroup input } function glfwJoystickIsGamepad(jid: integer): GLFW_INT; cdecl; external GLFW_DLL; { Sets the joystick configuration callback. This function sets the joystick configuration callback, or removes the currently set callback. This is called when a joystick is connected to or disconnected from the system. For joystick connection and disconnection events to be delivered on all platforms, you need to call one of the [event processing](ref events) functions. Joystick disconnection may also be detected and the callback called by joystick functions. The function will then return whatever it returns if the joystick is not present. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set or the library had not been [initialized](ref intro_init). callback_signature void function_name(int jid, int event) For more information about the callback parameters, see the [function pointer type](ref GLFWjoystickfun). errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function must only be called from the main thread. sa ref joystick_event since Added in version 3.2. ingroup input } function glfwSetJoystickCallback(cbfun: GLFWjoystickfun): pGLFWjoystickfun; cdecl; external GLFW_DLL; { Adds the specified SDL_GameControllerDB gamepad mappings. This function parses the specified ASCII encoded string and updates the internal list with any gamepad mappings it finds. This string may contain either a single gamepad mapping or many mappings separated by newlines. The parser supports the full format of the `gamecontrollerdb.txt` source file including empty lines and comments. See ref gamepad_mapping for a description of the format. If there is already a gamepad mapping for a given GUID in the internal list, it will be replaced by the one passed to this function. If the library is terminated and re-initialized the internal list will revert to the built-in default. param[in] string The string containing the gamepad mappings. return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_INVALID_VALUE. thread_safety This function must only be called from the main thread. sa ref gamepad sa ref glfwJoystickIsGamepad sa ref glfwGetGamepadName since Added in version 3.3. ingroup input } function glfwUpdateGamepadMappings(mappings: PChar): GLFW_INT; cdecl; external GLFW_DLL; { ! Returns the human-readable gamepad name for the specified joystick. This function returns the human-readable name of the gamepad from the gamepad mapping assigned to the specified joystick. If the specified joystick is not present or does not have a gamepad mapping this function will return `NULL` but will not generate an error. Call ref glfwJoystickPresent to check whether it is present regardless of whether it has a mapping. param[in] jid The [joystick](ref joysticks) to query. return The UTF-8 encoded name of the gamepad, or `NULL` if the joystick is not present, does not have a mapping or an [error](ref error_handling) occurred. pointer_lifetime The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected, the gamepad mappings are updated or the library is terminated. thread_safety This function must only be called from the main thread. sa ref gamepad sa ref glfwJoystickIsGamepad since Added in version 3.3. ingroup input } function glfwGetGamepadName(jid: GLFW_INT): PChar; cdecl; external GLFW_DLL; { ! Retrieves the state of the specified joystick remapped as a gamepad. This function retrieves the state of the specified joystick remapped to an Xbox-like gamepad. If the specified joystick is not present or does not have a gamepad mapping this function will return `GLFW_FALSE` but will not generate an error. Call ref glfwJoystickPresent to check whether it is present regardless of whether it has a mapping. The Guide button may not be available for input as it is often hooked by the system or the Steam client. Not all devices have all the buttons or axes provided by ref GLFWgamepadstate. Unavailable buttons and axes will always report `GLFW_RELEASE` and 0.0 respectively. param[in] jid The [joystick](ref joysticks) to query. param[out] state The gamepad input state of the joystick. return `GLFW_TRUE` if successful, or `GLFW_FALSE` if no joystick is connected, it has no gamepad mapping or an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_INVALID_ENUM. thread_safety This function must only be called from the main thread. sa ref gamepad sa ref glfwUpdateGamepadMappings sa ref glfwJoystickIsGamepad since Added in version 3.3. ingroup input } function glfwGetGamepadState(jid: GLFW_INT; state: pGLFWgamepadstate): GLFW_INT; cdecl; external GLFW_DLL; // ======================================================================== // clipboard // ======================================================================== procedure glfwSetClipboardString(window: pGLFWwindow; char: string); cdecl; external GLFW_DLL; function glfwGetClipboardString(window: pGLFWwindow): PChar; cdecl; external GLFW_DLL; //Time //======================================================================== procedure glfwSetTime(time: double); cdecl; external GLFW_DLL; { ! Returns the current value of the raw timer. This function returns the current value of the raw timer, measured in 1   frequency seconds. To get the frequency, call ref glfwGetTimerFrequency. return The value of the timer, or zero if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function may be called from any thread. sa ref time sa ref glfwGetTimerFrequency since Added in version 3.2. ingroup input } function glfwGetTimerValue(): uint64; cdecl; external GLFW_DLL; { ! Returns the frequency, in Hz, of the raw timer. This function returns the frequency, in Hz, of the raw timer. return The frequency of the timer, in Hz, or zero if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function may be called from any thread. sa ref time sa ref glfwGetTimerValue since Added in version 3.2. } function glfwGetTimerFrequency(): uint64; cdecl; external GLFW_DLL; { Makes the context of the specified window current for the calling * thread. * * This function makes the OpenGL or OpenGL ES context of the specified window * current on the calling thread. A context must only be made current on * a single thread at a time and each thread can have only a single current * context at a time. * * When moving a context between threads, you must make it non-current on the * old thread before making it current on the new one. * * By default, making a context non-current implicitly forces a pipeline flush. * On machines that support `GL_KHR_context_flush_control`, you can control * whether a context performs this flush by setting the * [GLFW_CONTEXT_RELEASE_BEHAVIOR](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) * hint. * * The specified window must have an OpenGL or OpenGL ES context. Specifying * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT * error. * * @param[in] window The window whose context to make current, or `NULL` to * detach the current context. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function may be called from any thread. * * @sa @ref context_current * @sa @ref glfwGetCurrentContext * * @since Added in version 3.0. } procedure glfwMakeContextCurrent(window: pGLFWwindow); cdecl; external GLFW_DLL; { Returns the window whose context is current on the calling thread. * * This function returns the window whose OpenGL or OpenGL ES context is * current on the calling thread. * * @return The window whose context is current, or `NULL` if no window's * context is current. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. * * @sa @ref context_current * @sa @ref glfwMakeContextCurrent * * @since Added in version 3.0. } function glfwGetCurrentContext: pGLFWwindow; cdecl; external GLFW_DLL; //======================================================================== //Context //======================================================================== { Swaps the front and back buffers of the specified window. This function swaps the front and back buffers of the specified window when rendering with OpenGL or OpenGL ES. If the swap interval is greater than zero, the GPU driver waits the specified number of screen updates before swapping the buffers. The specified window must have an OpenGL or OpenGL ES context. Specifying a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT error. This function does not apply to Vulkan. If you are rendering with Vulkan, see `vkQueuePresentKHR` instead. @param[in] window The window whose buffers to swap. @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. @remark __EGL:__ The context of the specified window must be current on the calling thread. @thread_safety This function may be called from any thread. @sa @ref buffer_swap @sa @ref glfwSwapInterval @since Added in version 1.0. @glfw3 Added window handle parameter. } procedure glfwSwapBuffers(window: pGLFWwindow); cdecl; external GLFW_DLL; { Sets the swap interval for the current context. This function sets the swap interval for the current OpenGL or OpenGL ES context, i.e. the number of screen updates to wait from the time @ref glfwSwapBuffers was called before swapping the buffers and returning. This is sometimes called _vertical synchronization_, _vertical retrace synchronization_ or just _vsync_. A context that supports either of the `WGL_EXT_swap_control_tear` and `GLX_EXT_swap_control_tear` extensions also accepts _negative_ swap intervals, which allows the driver to swap immediately even if a frame arrives a little bit late. You can check for these extensions with @ref glfwExtensionSupported. A context must be current on the calling thread. Calling this function without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. This function does not apply to Vulkan. If you are rendering with Vulkan, see the present mode of your swapchain instead. @param[in] interval The minimum number of screen updates to wait for until the buffers are swapped by @ref glfwSwapBuffers. @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. @remark This function is not called during context creation, leaving the swap interval set to whatever is the default on that platform. This is done because some swap interval extensions used by GLFW do not allow the swap interval to be reset to zero once it has been set to a non-zero value. @remark Some GPU drivers do not honor the requested swap interval, either because of a user setting that overrides the application's request or due to bugs in the driver. @thread_safety This function may be called from any thread. @sa @ref buffer_swap @sa @ref glfwSwapBuffers @since Added in version 1.0. } procedure glfwSwapInterval(interval: integer); cdecl; external GLFW_DLL; { Returns whether the specified extension is available. This function returns whether the specified [API extension](@ref context_glext) is supported by the current OpenGL or OpenGL ES context. It searches both for client API extension and context creation API extensions. A context must be current on the calling thread. Calling this function without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. As this functions retrieves and searches one or more extension strings each call, it is recommended that you cache its results if it is going to be used frequently. The extension strings will not change during the lifetime of a context, so there is no danger in doing this. This function does not apply to Vulkan. If you are using Vulkan, see @ref glfwGetRequiredInstanceExtensions, `vkEnumerateInstanceExtensionProperties` and `vkEnumerateDeviceExtensionProperties` instead. @param[in] extension The ASCII encoded name of the extension. @return `GLFW_TRUE` if the extension is available, or `GLFW_FALSE` otherwise. @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_NO_CURRENT_CONTEXT, @ref GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. @thread_safety This function may be called from any thread. @sa @ref context_glext @sa @ref glfwGetProcAddress @since Added in version 1.0. } function glfwExtensionSupported(extension: PChar): integer; cdecl; external GLFW_DLL; { Returns the address of the specified function for the current context. This function returns the address of the specified OpenGL or OpenGL ES [core or extension function](@ref context_glext), if it is supported by the current context. A context must be current on the calling thread. Calling this function without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. This function does not apply to Vulkan. If you are rendering with Vulkan, see @ref glfwGetInstanceProcAddress, `vkGetInstanceProcAddr` and `vkGetDeviceProcAddr` instead. @aram[in] procname The ASCII encoded name of the function. return The address of the function, or `NULL` if an [error](@ref error_handling) occurred. errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. remark The address of a given function is not guaranteed to be the same between contexts. remark This function may return a non-`NULL` address despite the associated version or extension not being available. Always check the context version or extension string first. pointer_lifetime The returned function pointer is valid until the context is destroyed or the library is terminated. thread_safety This function may be called from any thread. sa @ref context_glext sa @ref glfwExtensionSupported since Added in version 1.0. } function glfwGetProcAddress(procname: PChar): pGLFWglproc; cdecl; external GLFW_DLL; { Returns whether the Vulkan loader and an ICD have been found. This function returns whether the Vulkan loader and any minimally functional ICD have been found. The availability of a Vulkan loader and even an ICD does not by itself guarantee that surface creation or even instance creation is possible. For example, on Fermi systems Nvidia will install an ICD that provides no actual Vulkan support. Call ref glfwGetRequiredInstanceExtensions to check whether the extensions necessary for Vulkan surface creation are available and ref glfwGetPhysicalDevicePresentationSupport to check whether a queue family of a physical device supports image presentation. return `GLFW_TRUE` if Vulkan is minimally available, or `GLFW_FALSE` otherwise. errors Possible errors include ref GLFW_NOT_INITIALIZED. thread_safety This function may be called from any thread. sa ref vulkan_support since Added in version 3.2. ingroup vulkan } function glfwVulkanSupported(): integer; cdecl; external GLFW_DLL; { Returns the Vulkan instance extensions required by GLFW. This function returns an array of names of Vulkan instance extensions required by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the list will always contain `VK_KHR_surface`, so if you don't require any additional extensions you can pass this list directly to the `VkInstanceCreateInfo` struct. If Vulkan is not available on the machine, this function returns `NULL` and generates a ref GLFW_API_UNAVAILABLE error. Call ref glfwVulkanSupported to check whether Vulkan is at least minimally available. If Vulkan is available but no set of extensions allowing window surface creation was found, this function returns `NULL`. You may still use Vulkan for off-screen rendering and compute work. param[out] count Where to store the number of extensions in the returned array. This is set to zero if an error occurred. return An array of ASCII encoded extension names, or `NULL` if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_API_UNAVAILABLE. remark Additional extensions may be required by future versions of GLFW. You should check if any extensions you wish to enable are already in the returned array, as it is an error to specify an extension more than once in the `VkInstanceCreateInfo` struct. remark macos This function currently supports either the `VK_MVK_macos_surface` extension from MoltenVK or `VK_EXT_metal_surface` extension. pointer_lifetime The returned array is allocated and freed by GLFW. You should not free it yourself. It is guaranteed to be valid only until the library is terminated. thread_safety This function may be called from any thread. sa ref vulkan_ext sa ref glfwCreateWindowSurface since Added in version 3.2. ingroup vulkan } function glfwGetRequiredInstanceExtensions(var Count: uint32): PChar; cdecl; external GLFW_DLL; {$IFDEF VK_VERSION_1_0} { Returns the address of the specified Vulkan instance function. This function returns the address of the specified Vulkan core or extension function for the specified instance. If instance is set to `NULL` it can return any function exported from the Vulkan loader, including at least the following functions: - vkEnumerateInstanceExtensionProperties` - vkEnumerateInstanceLayerProperties` - vkCreateInstance` - vkGetInstanceProcAddr` If Vulkan is not available on the machine, this function returns `NULL` and generates a ref GLFW_API_UNAVAILABLE error. Call ref glfwVulkanSupported to check whether Vulkan is at least minimally available. This function is equivalent to calling `vkGetInstanceProcAddr` with a platform-specific query of the Vulkan loader as a fallback. param[in] instance The Vulkan instance to query, or `NULL` to retrieve functions related to instance creation. param[in] procname The ASCII encoded name of the function. return The address of the function, or `NULL` if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED and ref GLFW_API_UNAVAILABLE. pointer_lifetime The returned function pointer is valid until the library is terminated. thread_safety This function may be called from any thread. sa ref vulkan_proc since Added in version 3.2. } function glfwGetInstanceProcAddress(instance: VkInstance; procname: PChar): pglfwGetInstanceProcAddress; cdecl; external GLFW_DLL; { f Returns whether the specified queue family can present images. This function returns whether the specified queue family of the specified physical device supports presentation to the platform GLFW was built for. If Vulkan or the required window surface creation instance extensions are not available on the machine, or if the specified instance was not created with the required extensions, this function returns `GLFW_FALSE` and generates a ref GLFW_API_UNAVAILABLE error. Call ref glfwVulkanSupported to check whether Vulkan is at least minimally available and ref glfwGetRequiredInstanceExtensions to check what instance extensions are required. param[in] instance The instance that the physical device belongs to. param[in] device The physical device that the queue family belongs to. param[in] queuefamily The index of the queue family to query. return `GLFW_TRUE` if the queue family supports presentation, or `GLFW_FALSE` otherwise. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_API_UNAVAILABLE and ref GLFW_PLATFORM_ERROR. remark macos This function currently always returns `GLFW_TRUE`, as the `VK_MVK_macos_surface` extension does not provide a `vkGetPhysicalDevicePresentationSupport` type function. thread_safety This function may be called from any thread. For synchronization details of Vulkan objects, see the Vulkan specification. sa ref vulkan_present since Added in version 3.2. } function glfwGetPhysicalDevicePresentationSupport(instance: VkInstance; device: VkPhysicalDevice; queuefamily: UInt32): integer; cdecl; external GLFW_DLL; { Creates a Vulkan surface for the specified window. This function creates a Vulkan surface for the specified window. If the Vulkan loader or at least one minimally functional ICD were not found, this function returns `VK_ERROR_INITIALIZATION_FAILED` and generates a ref GLFW_API_UNAVAILABLE error. Call ref glfwVulkanSupported to check whether Vulkan is at least minimally available. If the required window surface creation instance extensions are not available or if the specified instance was not created with these extensions enabled, this function returns `VK_ERROR_EXTENSION_NOT_PRESENT` and generates a ref GLFW_API_UNAVAILABLE error. Call ref glfwGetRequiredInstanceExtensions to check what instance extensions are required. The window surface cannot be shared with another API so the window must have been created with the [client api hint](ref GLFW_CLIENT_API_attrib) set to `GLFW_NO_API` otherwise it generates a ref GLFW_INVALID_VALUE error and returns `VK_ERROR_NATIVE_WINDOW_IN_USE_KHR`. The window surface must be destroyed before the specified Vulkan instance. It is the responsibility of the caller to destroy the window surface. GLFW does not destroy it for you. Call `vkDestroySurfaceKHR` to destroy the surface. param[in] instance The Vulkan instance to create the surface in. param[in] window The window to create the surface for. param[in] allocator The allocator to use, or `NULL` to use the default allocator. param[out] surface Where to store the handle of the surface. This is set to `VK_NULL_HANDLE` if an error occurred. return `VK_SUCCESS` if successful, or a Vulkan error code if an [error](ref error_handling) occurred. errors Possible errors include ref GLFW_NOT_INITIALIZED, ref GLFW_API_UNAVAILABLE, ref GLFW_PLATFORM_ERROR and ref GLFW_INVALID_VALUE remark If an error occurs before the creation call is made, GLFW returns the Vulkan error code most appropriate for the error. Appropriate use of ref glfwVulkanSupported and ref glfwGetRequiredInstanceExtensions should eliminate almost all occurrences of these errors. remark macos This function currently only supports the `VK_MVK_macos_surface` extension from MoltenVK. remark macos This function creates and sets a `CAMetalLayer` instance for the window content view, which is required for MoltenVK to function. thread_safety This function may be called from any thread. For synchronization details of Vulkan objects, see the Vulkan specification. sa ref vulkan_surface sa ref glfwGetRequiredInstanceExtensions since Added in version 3.2. } function glfwCreateWindowSurface(instance: VkInstance; window: pGLFWwindow; var allocator: VkAllocationCallbacks; var surface: VkSurfaceKHR): VkResult; cdecl; external GLFW_DLL; {$ENDIF} // ======================================================================== // Error // ======================================================================== { Sets the error callback. This function sets the error callback, which is called with an error code and a human-readable description each time a GLFW error occurs. The error code is set before the callback is called. Calling ref glfwGetError from the error callback will return the same value as the error code argument. The error callback is called on the thread where the error occurred. If you are using GLFW from multiple threads, your error callback needs to be written accordingly. Because the description string may have been generated specifically for that error, it is not guaranteed to be valid after the callback has returned. If you wish to use it after the callback returns, you need to make a copy. Once set, the error callback remains set even after the library has been terminated. param[in] callback The new callback, or `NULL` to remove the currently set callback. return The previously set callback, or `NULL` if no callback was set. callback_signature code void callback_name(int error_code, const char description) endcode For more information about the callback parameters, see the [callback pointer type](ref GLFWerrorfun). errors None. remark This function may be called before ref glfwInit. thread_safety This function must only be called from the main thread. } function glfwSetErrorCallback(cbfun: GLFWerrorfun): pGLFWerrorfun; cdecl; external GLFW_DLL; implementation end.