Hello Jocelyn,
I tried it out as well and got similar results. I also tried using
load-time-value for the pointer cache in the hopes that making the DEFUN a
top-level form would appease SBCL but that help too much.
Have you tried using a less smart compiler such as CCL ou CLISP?
--
Luís Oliveira
http://r42.eu/~luis
On Mar 17, 2012 11:28 AM, Jocelyn Fréchot jocelyn_frec...@yahoo.fr
wrote:
On 17/03/2012 11:01, Luís Oliveira wrote:
At the end of gl/bindings.lisp there's an alternative implementation
of DEFGLEXTFUN that doesn't call compile or redefine anything. Does
that work better for you?
I tried this version:
(defmacro defglextfun ((cname lname) return-type body args)
(alexandria:with-unique-names (pointer)
`(let ((,pointer (null-pointer)))
(defun ,lname ,(mapcar #'car args)
(when (null-pointer-p ,pointer)
(setf ,pointer (gl-get-proc-address ,cname))
(assert (not (null-pointer-p ,pointer)) ()
Couldn't load symbol ~A~% ,cname)
(format t Loaded function pointer for ~A: ~A~% ,cname ,pointer)
(push (lambda () (setf ,pointer (null-pointer)))
*gl-extension-resetter-list*))
(foreign-funcall-pointer
,pointer
(:library opengl)
,@(loop for arg in args collect (second arg) collect (first arg))
,return-type)
However, compilation of gl/funcs.lisp fails due to heap exhaustion
(using SBCL 1.0.55).
--
Jocelyn
___
cl-opengl-devel mailing list
cl-opengl-devel@common-lisp.net
http://lists.common-lisp.net/cgi-bin/mailman/listinfo/cl-opengl-devel