The goal is to provide simple OpenGL window and context manipulation code as well as system input handling (i.e. mouse & keyboard).
Direct FFI bindings to system functions are used so no third party C lib is required except system libraries.
Make sure glop.asd
and glop-test.asd
are in a location known to asdf and run:
(asdf:operate 'asdf:load-op :glop-test)
Then you can run an hello world test with:
(glop-test:test-gl-hello)
Available tests are:
test-manual-create
: manual window create/destroytest-multiple-contexts
: multiple OpenGL contexts for a single windowtest-with-window
: glop:with-window macro usagetest-manual-events
: manual event dispatchingtest-gl-hello
: cl-opengl hello world exampletest-gl-hello-fullscreen
: same in fullscreentest-gl-hello-gl3
: same with OpenGL 3.x contexttest-multiple-windows
: two hello world windows each one with its own GL contexttest-on-event
: hello world using the on-event dispatch codetest-subclassing
: how to make your own window class and use itIn all tests except test-manual-events
you can press the following keys:
To use glop, make sure glop.asd
is in a location known to asdf and run:
(asdf:operate 'asdf:load-op :glop)
Now you can just do:
(glop:with-window (win "My title" 800 600)
;; gl init code here
(loop while (glop:dispatch-events win :blocking nil) do
;; gl code here
(glop:swap-buffers win)))
The glop:dispatch-events
macro will take care of processing glop events and call corresponding
methods. Generic functions for these methods are:
(on-key window pressed keycode keysym string)
(on-button window pressed button)
(on-mouse-motion window x y dx dy)
(on-resize window new-width new-height)
(on-draw window)
(on-close window)
None of them have a default definition, so you should implement all these methods in you application.
There's another method based dispatch mechanism with the on-event
generic function.
To use it just pass :on-foo nil
to glop:dispatch-events
.
In that case the (on-event window event)
method will be called instead of on-foo
methods.
The glop:dispatch-events
macro isn't mandatory and you can use your own event dispatch code,
see glop-test:test-manual-events
for an example of how to do this.
See test.lisp
for more details.
The win32 implementation is not as complete as the X11 one, major missing features are: - no OpenGL 3.x
See also issues on github.