A wrapper for the excellent GLFW library, on top of the coffi foreign function interface library for Clojure.
This library provides
This library is available on Clojars, and as a git dependency. You can add a
dependency on it with the following configuration in your deps.edn
file.
org.suskalo/glfw-clj {:mvn/version "0.1.66"}
io.github.IGJoshua/glfw-clj {:git/tag "v0.1.66" :git/sha "4e6cd6c"}
In addition to the module management needed by
coffi, glfw-clj depends on the
GLFW library being present on the LD_LIBRARY_PATH
.
General usage of the library follows the usage of GLFW, as the library matches that one closely. See this page if you want help getting started.
Functions are provided in the glfw-clj.core
namespace, which is intended to be
aliased as glfw
.
user=> (require '[glfw-clj.core :as glfw])
Then functions will follow the same names as are in the original library, but
without the glfw
prefix, and in kebab case. For example the function
glfwGetError
is provided as glfw-clj.core/get-error
.
user=> (glfw/get-error)
nil
In order to be able to use most functionality in the library, it must first be initialized.
user=> (glfw/init)
true
This returns true
when it succeeds, and false
when it fails for whatever
reason.
In general, integers that map to GLFW_TRUE
or GLFW_FALSE
are replaced with
booleans, and integers which map to a given GLFW_SOME_ENUM
like GLFW_PRESS
are replaced with keywords in the glfw-clj.core
namespace. So GLFW_PRESS
is
mapped to the keyword ::glfw/press
.
The set-callback functions take an optional scope
parameter, which is a
resource scope from coffi. This ensures that the callback is kept around for as
long as it will be used. If you don't pass a scope, the global scope will be
used. This is generally advisable if you set the callback once at the beginning
of your program and don't change it. It's recommended to use this scope even
when developing at the REPL to prevent JVM crashes.
Callbacks will catch exceptions that are thrown in them and log them using clojure.tools.logging, before returning an appropriate do-nothing value (at the time of writing, all callbacks return void and therefore nil is used as the return value).
Opaque objects like the window, monitor, and cursor objects are represented as pointers.
Docstrings are provided for all functions, but are there as reminder text, not a replacement for the main GLFW documentation. When in doubt, check the GLFW docs.
These features/changes are being considered for future versions of the library.
Copyright © 2021 Joshua Suskalo
Distributed under the zlib/libpng license, the same as GLFW.
Can you improve this documentation? These fine people already did:
Joshua Suskalo & Peter Morris-HindEdit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close