Skip to content

Cross-platform GLFW / OpenGL ES / WebGL bindings for Reason

License

Notifications You must be signed in to change notification settings

revery-ui/reason-glfw

Repository files navigation

Build Status Build Status npm version

reason-glfw

Cross-platform Reason / OCaml bindings for GLFW - supports Native (OpenGL) and Javascript (WebGL))

Building

esy is used for building, so if you don't have esy, install it:

npm install -g [email protected]
  • esy install
  • esy build

NOTE: If you've never built with esy before, the first compile could take some time - it builds the ocaml compiler as well as cmake. Incremental builds, though, are extremely fast!

Running

A very simple example project is provided - you can test it out here:

NATIVE:

  • cd _build/install/default/bin
  • ./test_glfw (./test_glfw.exe on Windows)

WEB:

  • Start an http-server at _build/install/default/bin. (I use npm install -g http-server).
  • Navigate to index.html

License

This project is licensed under the MIT License - see LICENSE for more details.

Design

For the most part, we strive to have API compatibility for GLFW and OpenGL. This library supports compilation to both native and JSOO targets. In the JSOO case, we emulate the GLFW APIs.

We do have some exceptions:

glfwGetNativeWindow

We wrap the native window access functions in a function glfwGetNativeWindow. This returns a NativeWindow.t, where the underlying value is platform specific:

  • Windows - HWND for the current window.
  • OSX - void * pointer to the NSWindow.
  • Linux - void * pointer to the X11 Window.
  • JS - HTMLCanvasElement representing the window.

Acknowledgements

  • The test texture is provided by LearnOpenGL - an excellent resource for OpenGL!
  • This is built on several great libraries, like GLFW, glad, stb_image
  • The test image is from @Arahnoid's UVChecker-map repo.