├── LICENSE.md ├── gitignore.txt ├── glfw.nimble ├── glfw3.nim ├── glfw3native ├── Cocoa.nim ├── EGL.nim ├── GLX.nim ├── Mir.nim ├── NSGL.nim ├── WGL.nim ├── Wayland.nim ├── Win32.nim └── X11.nim ├── readme.md └── test ├── glfw3.dll ├── glfwtest.nim └── nim.cfg /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) Copyright (c) 2013 Rafael Vasco 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /gitignore.txt: -------------------------------------------------------------------------------- 1 | nimcache/ 2 | *.exe 3 | -------------------------------------------------------------------------------- /glfw.nimble: -------------------------------------------------------------------------------- 1 | # Package 2 | 3 | packageName = "glfw" 4 | version = "3.2.1" 5 | author = "Rafael Vasco, Cory Null(Noll) Crimmins - Golden" 6 | description = "Nimrod bindings for GLFW3 library" 7 | license = "MIT" 8 | 9 | skipDirs = @["test"] 10 | 11 | when defined(Windows): 12 | switch("GLFW_EXPOSE_NATIVE_WIN32") 13 | switch("GLFW_EXPOSE_NATIVE_WGL") 14 | elif defined(MacOSX): 15 | switch("GLFW_EXPOSE_NATIVE_COCOA") 16 | switch("GLFW_EXPOSE_NATIVE_NSGL") 17 | -------------------------------------------------------------------------------- /glfw3.nim: -------------------------------------------------------------------------------- 1 | # GLFW3 Bindings/Wrapper for Nimrod 2 | # Authors: Rafael Vasco, Cory Golden 3 | 4 | 5 | {.deadCodeElim: on.} 6 | 7 | when defined(windows): 8 | const GlfwLib = "glfw3.dll" 9 | elif defined(macosx): 10 | const GlfwLib = "libglfw.3.dylib" 11 | else: 12 | const GlfwLib = "libglfw.so.3" 13 | 14 | #[************************************************************************* 15 | * GLFW API tokens 16 | *************************************************************************]# 17 | 18 | const 19 | VERSION_MAJOR* = 3 20 | VERSION_MINOR* = 2 21 | VERSION_REVISION* = 0 22 | 23 | TRUE* = 1 24 | FALSE* = 0 25 | RELEASE* = 0 26 | PRESS* = 1 27 | REPEAT* = 2 28 | 29 | #[ The unknown key ]# 30 | KEY_UNKNOWN* = - 1 31 | 32 | #[ Printable keys ]# 33 | KEY_SPACE* = 32 34 | KEY_APOSTROPHE* = 39 35 | KEY_COMMA* = 44 36 | KEY_MINUS* = 45 37 | KEY_PERIOD* = 46 38 | KEY_SLASH* = 47 39 | KEY_0* = 48 40 | KEY_1* = 49 41 | KEY_2* = 50 42 | KEY_3* = 51 43 | KEY_4* = 52 44 | KEY_5* = 53 45 | KEY_6* = 54 46 | KEY_7* = 55 47 | KEY_8* = 56 48 | KEY_9* = 57 49 | KEY_SEMICOLON* = 59 50 | KEY_EQUAL* = 61 51 | KEY_A* = 65 52 | KEY_B* = 66 53 | KEY_C* = 67 54 | KEY_D* = 68 55 | KEY_E* = 69 56 | KEY_F* = 70 57 | KEY_G* = 71 58 | KEY_H* = 72 59 | KEY_I* = 73 60 | KEY_J* = 74 61 | KEY_K* = 75 62 | KEY_L* = 76 63 | KEY_M* = 77 64 | KEY_N* = 78 65 | KEY_O* = 79 66 | KEY_P* = 80 67 | KEY_Q* = 81 68 | KEY_R* = 82 69 | KEY_S* = 83 70 | KEY_T* = 84 71 | KEY_U* = 85 72 | KEY_V* = 86 73 | KEY_W* = 87 74 | KEY_X* = 88 75 | KEY_Y* = 89 76 | KEY_Z* = 90 77 | KEY_LEFT_BRACKET* = 91 78 | KEY_BACKSLASH* = 92 79 | KEY_RIGHT_BRACKET* = 93 80 | KEY_GRAVE_ACCENT* = 96 81 | KEY_WORLD_1* = 161 82 | KEY_WORLD_2* = 162 83 | 84 | #[ Function keys ]# 85 | KEY_ESCAPE* = 256 86 | KEY_ENTER* = 257 87 | KEY_TAB* = 258 88 | KEY_BACKSPACE* = 259 89 | KEY_INSERT* = 260 90 | KEY_DELETE* = 261 91 | KEY_RIGHT* = 262 92 | KEY_LEFT* = 263 93 | KEY_DOWN* = 264 94 | KEY_UP* = 265 95 | KEY_PAGE_UP* = 266 96 | KEY_PAGE_DOWN* = 267 97 | KEY_HOME* = 268 98 | KEY_END* = 269 99 | KEY_CAPS_LOCK* = 280 100 | KEY_SCROLL_LOCK* = 281 101 | KEY_NUM_LOCK* = 282 102 | KEY_PRINT_SCREEN* = 283 103 | KEY_PAUSE* = 284 104 | KEY_F1* = 290 105 | KEY_F2* = 291 106 | KEY_F3* = 292 107 | KEY_F4* = 293 108 | KEY_F5* = 294 109 | KEY_F6* = 295 110 | KEY_F7* = 296 111 | KEY_F8* = 297 112 | KEY_F9* = 298 113 | KEY_F10* = 299 114 | KEY_F11* = 300 115 | KEY_F12* = 301 116 | KEY_F13* = 302 117 | KEY_F14* = 303 118 | KEY_F15* = 304 119 | KEY_F16* = 305 120 | KEY_F17* = 306 121 | KEY_F18* = 307 122 | KEY_F19* = 308 123 | KEY_F20* = 309 124 | KEY_F21* = 310 125 | KEY_F22* = 311 126 | KEY_F23* = 312 127 | KEY_F24* = 313 128 | KEY_F25* = 314 129 | KEY_KP_0* = 320 130 | KEY_KP_1* = 321 131 | KEY_KP_2* = 322 132 | KEY_KP_3* = 323 133 | KEY_KP_4* = 324 134 | KEY_KP_5* = 325 135 | KEY_KP_6* = 326 136 | KEY_KP_7* = 327 137 | KEY_KP_8* = 328 138 | KEY_KP_9* = 329 139 | KEY_KP_DECIMAL* = 330 140 | KEY_KP_DIVIDE* = 331 141 | KEY_KP_MULTIPLY* = 332 142 | KEY_KP_SUBTRACT* = 333 143 | KEY_KP_ADD* = 334 144 | KEY_KP_ENTER* = 335 145 | KEY_KP_EQUAL* = 336 146 | KEY_LEFT_SHIFT* = 340 147 | KEY_LEFT_CONTROL* = 341 148 | KEY_LEFT_ALT* = 342 149 | KEY_LEFT_SUPER* = 343 150 | KEY_RIGHT_SHIFT* = 344 151 | KEY_RIGHT_CONTROL* = 345 152 | KEY_RIGHT_ALT* = 346 153 | KEY_RIGHT_SUPER* = 347 154 | KEY_MENU* = 348 155 | KEY_LAST* = KEY_MENU 156 | 157 | MOD_SHIFT* = 0x0001 158 | MOD_CONTROL* = 0x0002 159 | MOD_ALT* = 0x0004 160 | MOD_SUPER* = 0x0008 161 | 162 | MOUSE_BUTTON_1* = 0 163 | MOUSE_BUTTON_2* = 1 164 | MOUSE_BUTTON_3* = 2 165 | MOUSE_BUTTON_4* = 3 166 | MOUSE_BUTTON_5* = 4 167 | MOUSE_BUTTON_6* = 5 168 | MOUSE_BUTTON_7* = 6 169 | MOUSE_BUTTON_8* = 7 170 | MOUSE_BUTTON_LAST* = MOUSE_BUTTON_8 171 | MOUSE_BUTTON_LEFT* = MOUSE_BUTTON_1 172 | MOUSE_BUTTON_RIGHT* = MOUSE_BUTTON_2 173 | MOUSE_BUTTON_MIDDLE* = MOUSE_BUTTON_3 174 | 175 | JOYSTICK_1* = 0 176 | JOYSTICK_2* = 1 177 | JOYSTICK_3* = 2 178 | JOYSTICK_4* = 3 179 | JOYSTICK_5* = 4 180 | JOYSTICK_6* = 5 181 | JOYSTICK_7* = 6 182 | JOYSTICK_8* = 7 183 | JOYSTICK_9* = 8 184 | JOYSTICK_10* = 9 185 | JOYSTICK_11* = 10 186 | JOYSTICK_12* = 11 187 | JOYSTICK_13* = 12 188 | JOYSTICK_14* = 13 189 | JOYSTICK_15* = 14 190 | JOYSTICK_16* = 15 191 | JOYSTICK_LAST* = JOYSTICK_16 192 | 193 | NOT_INITIALIZED* = 0x00010001 194 | NO_CURRENT_CONTEXT* = 0x00010002 195 | INVALID_ENUM* = 0x00010003 196 | INVALID_VALUE* = 0x00010004 197 | OUT_OF_MEMORY* = 0x00010005 198 | API_UNAVAILABLE* = 0x00010006 199 | VERSION_UNAVAILABLE* = 0x00010007 200 | PLATFORM_ERROR* = 0x00010008 201 | FORMAT_UNAVAILABLE* = 0x00010009 202 | NO_WINDOW_CONTEXT* = 0x0001000A 203 | 204 | FOCUSED* = 0x00020001 205 | ICONIFIED* = 0x00020002 206 | RESIZABLE* = 0x00020003 207 | VISIBLE* = 0x00020004 208 | DECORATED* = 0x00020005 209 | AUTO_ICONIFY* = 0x00020006 210 | FLOATING* = 0x00020007 211 | GLFW_MAXIMIZED* = 0x00020008 212 | 213 | RED_BITS* = 0x00021001 214 | GREEN_BITS* = 0x00021002 215 | BLUE_BITS* = 0x00021003 216 | ALPHA_BITS* = 0x00021004 217 | DEPTH_BITS* = 0x00021005 218 | STENCIL_BITS* = 0x00021006 219 | ACCUM_RED_BITS* = 0x00021007 220 | ACCUM_GREEN_BITS* = 0x00021008 221 | ACCUM_BLUE_BITS* = 0x00021009 222 | ACCUM_ALPHA_BITS* = 0x0002100A 223 | AUX_BUFFERS* = 0x0002100B 224 | STEREO* = 0x0002100C 225 | SAMPLES* = 0x0002100D 226 | SRGB_CAPABLE* = 0x0002100E 227 | REFRESH_RATE* = 0x0002100F 228 | DOUBLEBUFFER* = 0x00021010 229 | 230 | CLIENT_API* = 0x00022001 231 | CONTEXT_VERSION_MAJOR* = 0x00022002 232 | CONTEXT_VERSION_MINOR* = 0x00022003 233 | CONTEXT_REVISION* = 0x00022004 234 | CONTEXT_ROBUSTNESS* = 0x00022005 235 | OPENGL_FORWARD_COMPAT* = 0x00022006 236 | OPENGL_DEBUG_CONTEXT* = 0x00022007 237 | OPENGL_PROFILE* = 0x00022008 238 | CONTEXT_RELEASE_BEHAVIOR* = 0x00022009 239 | CONTEXT_NO_ERROR* = 0x0002200A 240 | CONTEXT_CREATION_API* = 0x0002200B 241 | 242 | NO_API* = 0 243 | OPENGL_API* = 0x00030001 244 | OPENGL_ES_API* = 0x00030002 245 | 246 | NO_ROBUSTNESS* = 0 247 | NO_RESET_NOTIFICATION* = 0x00031001 248 | LOSE_CONTEXT_ON_RESET* = 0x00031002 249 | 250 | OPENGL_ANY_PROFILE* = 0 251 | OPENGL_CORE_PROFILE* = 0x00032001 252 | OPENGL_COMPAT_PROFILE* = 0x00032002 253 | 254 | CURSOR* = 0x00033001 255 | STICKY_KEYS* = 0x00033002 256 | STICKY_MOUSE_BUTTONS* = 0x00033003 257 | 258 | CURSOR_NORMAL* = 0x00034001 259 | CURSOR_HIDDEN* = 0x00034002 260 | CURSOR_DISABLED* = 0x00034003 261 | 262 | ANY_RELEASE_BEHAVIOR* = 0 263 | RELEASE_BEHAVIOR_FLUSH* = 0x00035001 264 | RELEASE_BEHAVIOR_NONE* = 0x00035002 265 | 266 | NATIVE_CONTEXT_API* = 0x00036001 267 | EGL_CONTEXT_API* = 0x00036002 268 | 269 | ARROW_CURSOR* = 0x00036001 270 | 271 | IBEAM_CURSOR* = 0x00036002 272 | 273 | CROSSHAIR_CURSOR* = 0x00036003 274 | 275 | HAND_CURSOR* = 0x00036004 276 | 277 | HRESIZE_CURSOR* = 0x00036005 278 | 279 | VRESIZE_CURSOR* = 0x00036006 280 | 281 | CONNECTED* = 0x00040001 282 | DISCONNECTED* = 0x00040002 283 | 284 | DONT_CARE* = -1 285 | 286 | 287 | #[************************************************************************* 288 | * GLFW API types 289 | *************************************************************************]# 290 | 291 | type 292 | GLProc* = proc() {.cdecl.} 293 | VKProc* = proc() {.cdecl.} 294 | Monitor* = pointer 295 | Window* = pointer 296 | CursorHandle* = pointer 297 | ErrorFun* = proc (errorCode: cint; description: cstring) {.cdecl.} 298 | WindowPosFun = proc (window: Window; x: cint; y: cint) {.cdecl.} 299 | WindowSizeFun* = proc (window: Window; width: cint; height: cint) {.cdecl.} 300 | WindowCloseFun* = proc (window: Window) {.cdecl.} 301 | WindowRefreshFun* = proc (window: Window) {.cdecl.} 302 | WindowFocusFun* = proc (window: Window; focused: cint) {.cdecl.} 303 | WindowIconifyFun* = proc (window: Window; iconified: cint) {.cdecl.} 304 | FrameBufferSizeFun* = proc (window: Window; width: cint; height: cint) {.cdecl.} 305 | MouseButtonFun* = proc (window: Window; button: cint; action: cint; modifiers: cint) {.cdecl.} 306 | CursorPosFun* = proc (window: Window; x: cdouble; y: cdouble) {.cdecl.} 307 | CursorEnterFun* = proc (window: Window; entered: cint) {.cdecl.} 308 | ScrollFun* = proc (window: Window; xoffset: cdouble; yoffset: cdouble) {.cdecl.} 309 | KeyFun* = proc (window: Window; key: cint; scancode: cint; action: cint; modifiers: cint) {.cdecl.} 310 | CharFun* = proc (window: Window; character: cuint) {.cdecl.} 311 | CharModsFun* = proc (window: Window; codepoint: cuint; mods: cint) {.cdecl.} 312 | DropFun* = proc (window: Window; count: cint; paths: ptr cstring) 313 | MonitorFun* = proc (monitor: Monitor; connected: cint) {.cdecl.} 314 | JoystickFun* = proc (joy : cint; event: cint) 315 | 316 | VidMode* {.pure, final.} = object 317 | width*: cint 318 | height*: cint 319 | redBits*: cint 320 | greenBits*: cint 321 | blueBits*: cint 322 | refreshRate*: cint 323 | 324 | GammaRamp* {.pure, final.} = object 325 | red*: ptr cushort 326 | green*: ptr cushort 327 | blue*: ptr cushort 328 | size*: cuint 329 | 330 | Image* {.pure, final.} = ptr object 331 | width: cint 332 | height: cint 333 | pixels: seq[byte] 334 | 335 | # ------------------------------------------------------------------- 336 | # Methods 337 | 338 | proc Init*(): cint {.cdecl, importc: "glfwInit", dynlib: GlfwLib.} 339 | 340 | 341 | proc Terminate*() {.cdecl, importc: "glfwTerminate", dynlib: GlfwLib.} 342 | 343 | 344 | proc GetVersion*(major: ptr cint; minor: ptr cint; rev: ptr cint) {.cdecl, importc: "glfwGetVersion", dynlib: GlfwLib.} 345 | 346 | 347 | proc GetVersionString*(): cstring {.cdecl, importc: "glfwGetVersionString",dynlib: GlfwLib.} 348 | 349 | 350 | proc SetErrorCallback*(cbfun: ErrorFun): ErrorFun {.cdecl, importc: "glfwSetErrorCallback", dynlib: GlfwLib.} 351 | 352 | 353 | proc GetMonitors*(count: ptr cint): ptr Monitor {.cdecl, importc: "glfwGetMonitors", dynlib: GlfwLib.} 354 | 355 | 356 | proc GetPrimaryMonitor*(): Monitor {.cdecl, importc: "glfwGetPrimaryMonitor", dynlib: GlfwLib.} 357 | 358 | 359 | proc GetMonitorPos*(monitor: Monitor; xpos: ptr cint; ypos: ptr cint) {.cdecl, importc: "glfwGetMonitorPos", dynlib: GlfwLib.} 360 | 361 | 362 | proc GetMonitorPhysicalSize*(monitor: Monitor; width: ptr cint; height: ptr cint) {.cdecl, importc: "glfwGetMonitorPhysicalSize", dynlib: GlfwLib.} 363 | 364 | 365 | proc GetMonitorName*(monitor: Monitor): cstring {.cdecl, importc: "glfwGetMonitorName", dynlib: GlfwLib.} 366 | 367 | 368 | proc SetMonitorCallback*(cbfun: MonitorFun): MonitorFun {.cdecl, importc: "glfwSetMonitorCallback", dynlib: GlfwLib.} 369 | 370 | 371 | proc GetVideoModes*(monitor: Monitor; count: ptr cint): ptr VidMode {.cdecl, importc: "glfwGetVideoModes", dynlib: GlfwLib.} 372 | 373 | 374 | proc GetVideoMode*(monitor: Monitor): ptr VidMode {.cdecl, importc: "glfwGetVideoMode", dynlib: GlfwLib.} 375 | 376 | 377 | proc SetGamma*(monitor: Monitor; gamma: cfloat) {.cdecl, importc: "glfwSetGamma", dynlib: GlfwLib.} 378 | 379 | 380 | proc GetGammaRamp*(monitor: Monitor): ptr GammaRamp {.cdecl, importc: "glfwGetGammaRamp", dynlib: GlfwLib.} 381 | 382 | 383 | proc SetGammaRamp*(monitor: Monitor; ramp: ptr GammaRamp) {.cdecl, importc: "glfwSetGammaRamp", dynlib: GlfwLib.} 384 | 385 | 386 | proc DefaultWindowHints*() {.cdecl, importc: "glfwDefaultWindowHints", dynlib: GlfwLib.} 387 | 388 | 389 | proc WindowHint*(target: cint; hint: cint) {.cdecl, importc: "glfwWindowHint", dynlib: GlfwLib.} 390 | 391 | 392 | proc CreateWindow*(width: cint; height: cint; title: cstring; monitor: Monitor; share: Window): Window{.cdecl, importc: "glfwCreateWindow", dynlib: GlfwLib.} 393 | 394 | 395 | proc DestroyWindow*(window: Window) {.cdecl, importc: "glfwDestroyWindow", dynlib: GlfwLib.} 396 | 397 | 398 | proc WindowShouldClose*(window: Window): cint {.cdecl, importc: "glfwWindowShouldClose", dynlib: GlfwLib.} 399 | 400 | 401 | proc SetWindowShouldClose*(window: Window; value: cint) {.cdecl, importc: "glfwSetWindowShouldClose", dynlib: GlfwLib.} 402 | 403 | 404 | proc SetWindowTitle*(window: Window; title: cstring) {.cdecl, importc: "glfwSetWindowTitle", dynlib: GlfwLib.} 405 | 406 | 407 | proc SetWindowIcon*(window: Window; count: cint, image: Image) {.cdecl, importc: "glfwSetWindowIcon", dynlib: GlfwLib.} 408 | 409 | 410 | proc GetWindowPos*(window: Window; xpos: ptr cint; ypos: ptr cint) {.cdecl, importc: "glfwGetWindowPos", dynlib: GlfwLib.} 411 | 412 | 413 | proc SetWindowPos*(window: Window; xpos: cint; ypos: cint) {.cdecl, importc: "glfwSetWindowPos", dynlib: GlfwLib.} 414 | 415 | 416 | proc GetWindowSize*(window: Window; width: ptr cint; height: ptr cint) {.cdecl, importc: "glfwGetWindowSize", dynlib: GlfwLib.} 417 | 418 | 419 | proc SetWindowSizeLimits*(window: Window, minwidth, minheight, maxwidth, maxheight: cint) {.cdecl, importc: "glfwSetWindowSizeLimits", dynlib: GlfwLib.} 420 | 421 | 422 | proc SetWindowAspectRatio*(window: Window, numer, denom: cint) {.cdecl, importc: "glfwSetWindowAspectRatio", dynlib: GlfwLib.} 423 | 424 | 425 | proc SetWindowSize*(window: Window; width: cint; height: cint) {.cdecl, importc: "glfwSetWindowSize", dynlib: GlfwLib.} 426 | 427 | 428 | proc GetFramebufferSize*(window: Window; width: ptr cint; height: ptr cint) {.cdecl, importc: "glfwGetFramebufferSize", dynlib: GlfwLib.} 429 | 430 | 431 | proc GetWindowFrameSize*(window: Window, left, top, right, bottom: ptr int) {.cdecl, importc: "glfwGetWindowFrameSize", dynlib: GlfwLib.} 432 | 433 | 434 | proc IconifyWindow*(window: Window) {.cdecl, importc: "glfwIconifyWindow", dynlib: GlfwLib.} 435 | 436 | 437 | proc RestoreWindow*(window: Window) {.cdecl, importc: "glfwRestoreWindow", dynlib: GlfwLib.} 438 | 439 | 440 | proc MaximizeWindow*(window: Window) {.cdecl, importc: "glfwMaximizeWindow", dynlib: GlfwLib.} 441 | 442 | 443 | proc ShowWindow*(window: Window) {.cdecl, importc: "glfwShowWindow", dynlib: GlfwLib.} 444 | 445 | 446 | proc HideWindow*(window: Window) {.cdecl, importc: "glfwHideWindow", dynlib: GlfwLib.} 447 | 448 | 449 | proc FocusWindow*(window: Window) {.cdecl, importc: "glfwFocusWindow", dynlib: GlfwLib.} 450 | 451 | 452 | proc GetWindowMonitor*(window: Window): Monitor {.cdecl, importc: "glfwGetWindowMonitor", dynlib: GlfwLib.} 453 | 454 | 455 | proc SetWindowMonitor*(window: Window, monitor: Monitor, xpos, ypos, width, height: cint) {.cdecl, importc: "glfwSetWindowMonitor", dynlib: GlfwLib.} 456 | 457 | 458 | proc GetWindowAttrib*(window: Window; attrib: cint): cint {.cdecl, importc: "glfwGetWindowAttrib", dynlib: GlfwLib.} 459 | 460 | 461 | proc SetWindowUserPointer*(window: Window; pointer: pointer) {.cdecl, importc: "glfwSetWindowUserPointer", dynlib: GlfwLib.} 462 | 463 | 464 | proc GetWindowUserPointer*(window: Window): pointer {.cdecl, importc: "glfwGetWindowUserPointer", dynlib: GlfwLib.} 465 | 466 | 467 | proc SetWindowPosCallback*(window: Window; cbfun: WindowPosFun): WindowPosFun {.cdecl, importc: "glfwSetWindowPosCallback", dynlib: GlfwLib.} 468 | 469 | 470 | proc SetWindowSizeCallback*(window: Window; cbfun: WindowSizeFun): WindowSizeFun {.cdecl, importc: "glfwSetWindowSizeCallback", dynlib: GlfwLib.} 471 | 472 | 473 | proc SetWindowCloseCallback*(window: Window; cbfun: WindowCloseFun): WindowCloseFun {.cdecl, importc: "glfwSetWindowCloseCallback", dynlib: GlfwLib.} 474 | 475 | 476 | proc SetWindowRefreshCallback*(window: Window; cbfun: Windowrefreshfun): Windowrefreshfun {.cdecl, importc: "glfwSetWindowRefreshCallback", dynlib: GlfwLib.} 477 | 478 | 479 | proc SetWindowFocusCallback*(window: Window; cbfun: WindowFocusFun): WindowFocusFun {.cdecl, importc: "glfwSetWindowFocusCallback", dynlib: GlfwLib.} 480 | 481 | 482 | proc SetWindowIconifyCallback*(window: Window; cbfun: WindowIconifyFun): WindowIconifyFun {.cdecl, importc: "glfwSetWindowIconifyCallback", dynlib: GlfwLib.} 483 | 484 | 485 | proc SetFramebufferSizeCallback*(window: Window; cbfun: FrameBufferSizeFun): FrameBufferSizeFun {.cdecl, importc: "glfwSetFramebufferSizeCallback", dynlib: GlfwLib.} 486 | 487 | 488 | proc PollEvents*() {.cdecl, importc: "glfwPollEvents", dynlib: GlfwLib.} 489 | 490 | 491 | proc WaitEvents*() {.cdecl, importc: "glfwWaitEvents", dynlib: GlfwLib.} 492 | 493 | 494 | proc WaitEventsTimeout*(timeout: cdouble) {.cdecl, importc: "glfwWaitEventsTimeout", dynlib: GlfwLib.} 495 | 496 | 497 | proc PostEmptyEvent*() {.cdecl, importc: "glfwPostEmptyEvent", dynlib: GlfwLib.} 498 | 499 | 500 | proc GetInputMode*(window: Window; mode: cint): cint {.cdecl, importc: "glfwGetInputMode", dynlib: GlfwLib.} 501 | 502 | 503 | proc SetInputMode*(window: Window; mode: cint; value: cint) {.cdecl, importc: "glfwSetInputMode", dynlib: GlfwLib.} 504 | 505 | 506 | proc GetKey*(window: Window; key: cint): cint {.cdecl, importc: "glfwGetKey", dynlib: GlfwLib.} 507 | 508 | 509 | proc GetMouseButton*(window: Window; button: cint): cint {.cdecl, importc: "glfwGetMouseButton", dynlib: GlfwLib.} 510 | 511 | 512 | proc GetCursorPos*(window: Window; xpos: ptr cdouble; ypos: ptr cdouble) {.cdecl, importc: "glfwGetCursorPos", dynlib: GlfwLib.} 513 | 514 | 515 | proc SetCursorPos*(window: Window; xpos: cdouble; ypos: cdouble) {.cdecl, importc: "glfwSetCursorPos", dynlib: GlfwLib.} 516 | 517 | 518 | proc CreateCursor*(image: Image, xhot, yhot: cint): CursorHandle {.cdecl, importc: "glfwCreateCursor", dynlib: GlfwLib.} 519 | 520 | 521 | proc CreateStandardCursor*(shape: cint): CursorHandle {.cdecl, importc: "glfwCreateStandardCursor", dynlib: GlfwLib.} 522 | 523 | 524 | proc DestroyCursor*(cusor: CursorHandle) {.cdecl, importc: "glfwDestroyCursor", dynlib: GlfwLib.} 525 | 526 | 527 | proc SetCursor*(window: Window; cursor: CursorHandle) {.cdecl, importc: "glfwSetCursor", dynlib: GlfwLib.} 528 | 529 | 530 | proc SetKeyCallback*(window: Window; cbfun: KeyFun): KeyFun {.cdecl, importc: "glfwSetKeyCallback", dynlib: GlfwLib.} 531 | 532 | 533 | proc SetCharCallback*(window: Window; cbfun: CharFun): CharFun {.cdecl, importc: "glfwSetCharCallback", dynlib: GlfwLib.} 534 | 535 | 536 | proc SetCharModsCallback*(window: Window, cbfun: CharModsFun): CharModsFun {.cdecl, importc: "glfwSetCharModsCallback", dynlib: GlfwLib.} 537 | 538 | 539 | proc SetMouseButtonCallback*(window: Window; cbfun: MouseButtonFun): MouseButtonFun {.cdecl, importc: "glfwSetMouseButtonCallback", dynlib: GlfwLib.} 540 | 541 | 542 | proc SetCursorPosCallback*(window: Window; cbfun: CursorPosFun): CursorPosFun {.cdecl, importc: "glfwSetCursorPosCallback", dynlib: GlfwLib.} 543 | 544 | 545 | proc SetCursorEnterCallback*(window: Window; cbfun: CursorEnterFun): CursorEnterFun {.cdecl, importc: "glfwSetCursorEnterCallback", dynlib: GlfwLib.} 546 | 547 | 548 | proc SetScrollCallback*(window: Window; cbfun: ScrollFun): ScrollFun {.cdecl, importc: "glfwSetScrollCallback", dynlib: GlfwLib.} 549 | 550 | 551 | proc SetDropCallback*(window: Window, cbfun: DropFun) {.cdecl, importc: "glfwSetDropCallback", dynlib: GlfwLib.} 552 | 553 | 554 | proc JoystickPresent*(joy: cint): cint {.cdecl, importc: "glfwJoystickPresent", dynlib: GlfwLib.} 555 | 556 | 557 | proc GetJoystickAxes*(joy: cint; count: ptr cint): ptr cfloat {.cdecl, importc: "glfwGetJoystickAxes", dynlib: GlfwLib.} 558 | 559 | 560 | proc GetJoystickButtons*(joy: cint; count: ptr cint): ptr cuchar {.cdecl, importc: "glfwGetJoystickButtons", dynlib: GlfwLib.} 561 | 562 | 563 | proc GetJoystickName*(joy: cint): cstring {.cdecl, importc: "glfwGetJoystickName", dynlib: GlfwLib.} 564 | 565 | 566 | proc SetJoystickCallback*(cbfun: JoystickFun): JoystickFun {.cdecl, importc: "glfwSetJoystickCallback", dynlib: GlfwLib.} 567 | 568 | 569 | proc SetClipboardString*(window: Window; string: cstring) {.cdecl, importc: "glfwSetClipboardString", dynlib: GlfwLib.} 570 | 571 | 572 | proc GetClipboardString*(window: Window): cstring {.cdecl, importc: "glfwGetClipboardString", dynlib: GlfwLib.} 573 | 574 | 575 | proc GetTime*(): cdouble {.cdecl, importc: "glfwGetTime", dynlib: GlfwLib.} 576 | 577 | 578 | proc SetTime*(time: cdouble) {.cdecl, importc: "glfwSetTime", dynlib: GlfwLib.} 579 | 580 | 581 | proc GetTimerValue*(): culonglong {.cdecl, importc: "glfwGetTimerValue", dynlib: GlfwLib.} 582 | 583 | 584 | proc GetTimerFrequency*(): culonglong {.cdecl, importc: "glfwGetTimerFrequency", dynlib: GlfwLib.} 585 | 586 | 587 | proc MakeContextCurrent*(window: Window) {.cdecl, importc: "glfwMakeContextCurrent", dynlib: GlfwLib.} 588 | 589 | 590 | proc GetCurrentContext*(): Window {.cdecl, importc: "glfwGetCurrentContext", dynlib: GlfwLib.} 591 | 592 | 593 | proc SwapBuffers*(window: Window) {.cdecl, importc: "glfwSwapBuffers", dynlib: GlfwLib.} 594 | 595 | 596 | proc SwapInterval*(interval: cint) {.cdecl, importc: "glfwSwapInterval", dynlib: GlfwLib.} 597 | 598 | 599 | proc ExtensionSupported*(extension: cstring): cint {.cdecl, importc: "glfwExtensionSupported", dynlib: GlfwLib.} 600 | 601 | 602 | proc GetProcAddress*(procname: cstring): GLProc {.cdecl, importc: "glfwGetProcAddress", dynlib: GlfwLib.} 603 | 604 | 605 | proc VulkanSupported*(): cint {.cdecl, importc: "glfwVulkanSupported", dynlib: GlfwLib.} 606 | 607 | 608 | proc GetRequiredInstanceExtensions*(count: ptr cuint): ptr cstring {.cdecl, importc: "glfwGetRequiredInstanceExtensions", dynlib: GlfwLib.} 609 | 610 | when not defined(VkInstance): 611 | type VkInstance* = pointer 612 | when not defined(VkPhysicalDevice): 613 | type VkPhysicalDevice* = pointer 614 | when not defined(VkAllocationCallbacks): 615 | type VkAllocationCallbacks* = pointer 616 | when not defined(VkSurfaceKHR): 617 | type VkSurfaceKHR* = pointer 618 | when not defined(VkResult): 619 | type VkResult* = enum 620 | VK_ERROR_FRAGMENTED_POOL = -12 621 | VK_ERROR_FORMAT_NOT_SUPPORTED = -11 622 | VK_ERROR_TOO_MANY_OBJECTS = -10 623 | VK_ERROR_INCOMPATIBLE_DRIVER = -9 624 | VK_ERROR_FEATURE_NOT_PRESENT = -8 625 | VK_ERROR_EXTENSION_NOT_PRESENT = -7 626 | VK_ERROR_LAYER_NOT_PRESENT = -6 627 | VK_ERROR_MEMORY_MAP_FAILED = -5 628 | VK_ERROR_DEVICE_LOST = -4 629 | VK_ERROR_INITIALIZATION_FAILED = -3 630 | VK_ERROR_OUT_OF_DEVICE_MEMORY = -2 631 | VK_ERROR_OUT_OF_HOST_MEMORY = -1 632 | VK_SUCCESS = 0 633 | VK_NOT_READY = 1 634 | VK_TIMEOUT = 2 635 | VK_EVENT_SET = 3 636 | VK_EVENT_RESET = 4 637 | VK_INCOMPLETE = 5 638 | 639 | proc GetInstanceProcAddress*(instance: VkInstance, procname: cstring): VKProc {.cdecl, importc: "glfwGetInstanceProcAddress", dynlib: GlfwLib.} 640 | 641 | 642 | proc GetPhysicalDevicePresentationSupport*(instance: VkInstance, device: VkPhysicalDevice, queuefamily: cuint): cint {.cdecl, importc: "glfwGetPhysicalDevicePresentationSupport", dynlib: GlfwLib.} 643 | 644 | 645 | proc CreateWindowSurface*(instance: VkInstance, window: Window, allocator: ptr VkAllocationCallbacks, surface: ptr VkSurfaceKHR): VkResult {.cdecl, importc: "glfwCreateWindowSurface", dynlib: GlfwLib.} 646 | -------------------------------------------------------------------------------- /glfw3native/Cocoa.nim: -------------------------------------------------------------------------------- 1 | # GLFW3native Bindings/Wrapper for Nimrod 2 | # Authors: Rafael Vasco, Cory Golden 3 | 4 | import glfw3 5 | 6 | when defined(Windows): 7 | const GlfwLib = "glfw3.dll" 8 | elif defined(MacOSX): 9 | const GlfwLib = "libglfw.3.dylib" 10 | else: 11 | const GlfwLib = "libglfw.so.3" 12 | 13 | proc GetCocoaMonitor*(monitor: Monitor): uint32 {.cdecl, importc: "glfwGetCocoaMonitor", dynlib: GlfwLib.} 14 | proc GetCocoaWindow*(window: Window): pointer {.cdecl, importc: "glfwGetCocoaWindow", dynlib: GlfwLib.} 15 | -------------------------------------------------------------------------------- /glfw3native/EGL.nim: -------------------------------------------------------------------------------- 1 | # GLFW3native Bindings/Wrapper for Nimrod 2 | # Authors: Rafael Vasco, Cory Golden 3 | 4 | import glfw3 5 | 6 | when defined(Windows): 7 | const GlfwLib = "glfw3.dll" 8 | elif defined(MacOSX): 9 | const GlfwLib = "libglfw.3.dylib" 10 | else: 11 | const GlfwLib = "libglfw.so.3" 12 | 13 | proc GetEGLDisplay(): pointer {.cdecl, importc: "glfwGetEGLDisplay", dynlib: GlfwLib.} 14 | proc GetEGLContext(window: Window): pointer {.cdecl, importc: "glfwGetEGLDisplay", dynlib: GlfwLib.} 15 | proc GetEGLSurface(window: Window): pointer {.cdecl, importc: "glfwGetEGLSurface", dynlib: GlfwLib.} 16 | -------------------------------------------------------------------------------- /glfw3native/GLX.nim: -------------------------------------------------------------------------------- 1 | # GLFW3native Bindings/Wrapper for Nimrod 2 | # Authors: Rafael Vasco, Cory Golden 3 | 4 | import glfw3 5 | 6 | when defined(Windows): 7 | const GlfwLib = "glfw3.dll" 8 | elif defined(MacOSX): 9 | const GlfwLib = "libglfw.3.dylib" 10 | else: 11 | const GlfwLib = "libglfw.so.3" 12 | 13 | when defined(GLFW_EXPOSE_NATIVE_GLX): 14 | proc GetGLXContext*(window: Window): pointer {.cdecl, importc: "glfwGetGLXContext", dynlib: GlfwLib.} 15 | proc GetGLXWindow*(window: Window): pointer {.cdecl, importc: "glfwGetGLXWindow", dynlib: GlfwLib.} 16 | -------------------------------------------------------------------------------- /glfw3native/Mir.nim: -------------------------------------------------------------------------------- 1 | # GLFW3native Bindings/Wrapper for Nimrod 2 | # Authors: Rafael Vasco, Cory Golden 3 | 4 | import glfw3 5 | 6 | when defined(Windows): 7 | const GlfwLib = "glfw3.dll" 8 | elif defined(MacOSX): 9 | const GlfwLib = "libglfw.3.dylib" 10 | else: 11 | const GlfwLib = "libglfw.so.3" 12 | 13 | proc GetMirDisplay*(): pointer {.cdecl, importc: "glfwGetMirDisplay", dynlib: GlfwLib.} 14 | proc GetMirMonitor*(monitor: Monitor): cint {.cdecl, importc: "glfwGetMirMonitor", dynlib: GlfwLib.} 15 | proc GetMirWindow*(window: Window): pointer {.cdecl, importc: "glfwGetMirWindow", dynlib: GlfwLib.} 16 | -------------------------------------------------------------------------------- /glfw3native/NSGL.nim: -------------------------------------------------------------------------------- 1 | # GLFW3native Bindings/Wrapper for Nimrod 2 | # Authors: Rafael Vasco, Cory Golden 3 | 4 | import glfw3 5 | 6 | when defined(Windows): 7 | const GlfwLib = "glfw3.dll" 8 | elif defined(MacOSX): 9 | const GlfwLib = "libglfw.3.dylib" 10 | else: 11 | const GlfwLib = "libglfw.so.3" 12 | 13 | proc GetNSGLContext*(window: Window): pointer {.cdecl, importc: "glfwGetNSGLContext", dynlib: GlfwLib.} 14 | -------------------------------------------------------------------------------- /glfw3native/WGL.nim: -------------------------------------------------------------------------------- 1 | # GLFW3native Bindings/Wrapper for Nimrod 2 | # Authors: Rafael Vasco, Cory Golden 3 | 4 | import glfw3 5 | 6 | when defined(Windows): 7 | const GlfwLib = "glfw3.dll" 8 | elif defined(MacOSX): 9 | const GlfwLib = "libglfw.3.dylib" 10 | else: 11 | const GlfwLib = "libglfw.so.3" 12 | 13 | proc GetWGLContext*(window: Window): pointer {.cdecl, importc: "glfwGetWGLContext", dynlib: GlfwLib.} 14 | -------------------------------------------------------------------------------- /glfw3native/Wayland.nim: -------------------------------------------------------------------------------- 1 | # GLFW3native Bindings/Wrapper for Nimrod 2 | # Authors: Rafael Vasco, Cory Golden 3 | 4 | import glfw3 5 | 6 | when defined(Windows): 7 | const GlfwLib = "glfw3.dll" 8 | elif defined(MacOSX): 9 | const GlfwLib = "libglfw.3.dylib" 10 | else: 11 | const GlfwLib = "libglfw.so.3" 12 | 13 | proc GetWaylandDisplay*(): pointer {.cdecl, importc: "glfwGetWaylandDisplay", dynlib: GlfwLib.} 14 | proc GetWaylandMonitor*(monitor: Monitor): pointer {.cdecl, importc: "glfwGetWaylandMonitor", dynlib: GlfwLib.} 15 | proc GetWaylandMonitor*(window: Window): pointer {.cdecl, importc: "glfwGetWaylandWindow", dynlib: GlfwLib.} 16 | -------------------------------------------------------------------------------- /glfw3native/Win32.nim: -------------------------------------------------------------------------------- 1 | # GLFW3native Bindings/Wrapper for Nimrod 2 | # Authors: Rafael Vasco, Cory Golden 3 | 4 | import glfw3 5 | 6 | 7 | when defined(Windows): 8 | const GlfwLib = "glfw3.dll" 9 | elif defined(MacOSX): 10 | const GlfwLib = "libglfw.3.dylib" 11 | else: 12 | const GlfwLib = "libglfw.so.3" 13 | 14 | proc GetWin32Adapter*(monitor: Monitor): cstring {.cdecl, importc: "glfwGetWin32Adapter", dynlib: GlfwLib.} 15 | proc GetWin32Monitor*(monitor: Monitor): cstring {.cdecl, importc: "glfwGetWin32Monitor", dynlib: GlfwLib.} 16 | proc GetWin32Window*(window: Window): pointer {.cdecl, importc: "glfwGetWin32Window", dynlib: GlfwLib.} 17 | -------------------------------------------------------------------------------- /glfw3native/X11.nim: -------------------------------------------------------------------------------- 1 | # GLFW3native Bindings/Wrapper for Nimrod 2 | # Authors: Rafael Vasco, Cory Golden 3 | 4 | import glfw3 5 | 6 | when defined(Windows): 7 | const GlfwLib = "glfw3.dll" 8 | elif defined(MacOSX): 9 | const GlfwLib = "libglfw.3.dylib" 10 | else: 11 | const GlfwLib = "libglfw.so.3" 12 | 13 | proc GetX11Display*(): pointer {.cdecl, importc: "glfwGetX11Display", dynlib: GlfwLib.} 14 | proc GetX11Adapter*(monitor: Monitor): uint32 {.cdecl, importc: "glfwGetX11Adapter", dynlib: GlfwLib.} 15 | proc GetX11Monitor*(monitor: Monitor): uint32 {.cdecl, importc: "glfwGetX11Monitor", dynlib: GlfwLib.} 16 | proc GetX11Window*(window: Window): uint32 {.cdecl, importc: "glfwGetX11Window", dynlib: GlfwLib.} 17 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | About nimrod-glfw 2 | ------------------ 3 | 4 | This is a [Nim] binding for [GLFW3] library. 5 | 6 | Current Version: 3.2.0 7 | 8 | To Run: 9 | ----------------- 10 | 11 | 1. Have [Nim] installed first. Instructions are [here]. 12 | 2. Give it a try: `cd test, then nim c -d:release --app:gui glfwtest.nim` on your terminal of choice. Tested on Windows and Linux 13 | 3. Profit ! 14 | 15 | [Nim]: https://nim-lang.org 16 | [GLFW]: http://glfw.org 17 | [here]: https://nim-lang.org/download.html 18 | -------------------------------------------------------------------------------- /test/glfw3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafaelvasco/nimrod-glfw/b5d128f3620a9f535ba30330ac8616719bbe10e7/test/glfw3.dll -------------------------------------------------------------------------------- /test/glfwtest.nim: -------------------------------------------------------------------------------- 1 | import glfw3 as glfw 2 | 3 | if glfw.Init() == 0: 4 | raise newException(Exception, "Failed to Initialize GLFW") 5 | 6 | 7 | var window = glfw.CreateWindow(800, 600, "GLFW3 WINDOW", nil, nil) 8 | 9 | glfw.MakeContextCurrent(window) 10 | 11 | while glfw.WindowShouldClose(window) == 0: 12 | 13 | glfw.PollEvents() 14 | glfw.SwapBuffers(window) 15 | 16 | if glfw.GetKey(window,glfw.KEY_ESCAPE) == 1: 17 | glfw.SetWindowShouldClose(window,1) 18 | 19 | 20 | glfw.DestroyWindow(window) 21 | glfw.Terminate() 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /test/nim.cfg: -------------------------------------------------------------------------------- 1 | path = "../" --------------------------------------------------------------------------------