James Ashley james.ashley@gmail.com writes:
(let ((ratio (/ width height))) (format t "Setting ortho: ~A~%" ratio) ;; This next line is failing here, pretty spectacularly. ;; with an error message that doesn't seem to make any sense. ;; It appears to run fine (even if it does nothing) when ;; I run it throuh the REPL. (gl:ortho (- ratio) ratio -1 1 1 -1))
[...]
The value 17465867632912 is not of the expected type DOUBLE-FLOAT.
[...]
COMMON-LISP:RATIO = 649/502 CL-OPENGL-BINDINGS::LEFT = -649/502
[...]
Does anyone have a suggestion about where I should look to try to figure out where that value it's complaining about comes from? Or what's expecting the DOUBLE-FLOAT? Is there something else in the stack trace (or anywhere else) that I'm just totally missing due to my noobishness?
The stack trace is not being very helpful, no. GL:ORTHO tries to coerce each of its arguments into doubles via (float x 1.0d0). Maybe something's going wrong in that process? There's also inlining going on, as the GL:ORTHO is defined via %GL:DEFGLFUN which might not get triggered when you try it out from the REPL.
So, I'd try to (1) convert the ratio to double before passing it to GL:ORTHO and maybe the other arguments as well, (2) call glOrtho() using plain CFFI:FOREIGN-FUNCALL, (3) use CCL:EXTERNAL-CALL. You can quickly figure out how to get the appropriate CCL:EXTERNAL-CALL form by macroexpansing CFFI:FOREIGN-FUNCALL.
HTH,