<p>Hello Jocelyn,</p>
<p>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.</p>
<p>Have you tried using a less smart compiler such as CCL ou CLISP?</p>
<p>-- <br>
Luís Oliveira<br>
<a href="http://r42.eu/~luis">http://r42.eu/~luis</a></p>
<div class="gmail_quote">On Mar 17, 2012 11:28 AM, "Jocelyn Fréchot" <<a href="mailto:jocelyn_frechot@yahoo.fr">jocelyn_frechot@yahoo.fr</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 17/03/2012 11:01, Luís Oliveira wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
At the end of gl/bindings.lisp there's an alternative implementation<br>
of DEFGLEXTFUN that doesn't call compile or redefine anything. Does<br>
that work better for you?<br>
</blockquote>
<br>
I tried this version:<br>
<br>
(defmacro defglextfun ((cname lname) return-type &body args)<br>
  (alexandria:with-unique-names (pointer)<br>
    `(let ((,pointer (null-pointer)))<br>
       (defun ,lname ,(mapcar #'car args)<br>
         (when (null-pointer-p ,pointer)<br>
           (setf ,pointer (gl-get-proc-address ,cname))<br>
           (assert (not (null-pointer-p ,pointer)) ()<br>
                   "Couldn't load symbol ~A~%" ,cname)<br>
           (format t "Loaded function pointer for ~A: ~A~%" ,cname ,pointer)<br>
           (push (lambda () (setf ,pointer (null-pointer)))<br>
                 *gl-extension-resetter-list*))<br>
         (foreign-funcall-pointer<br>
          ,pointer<br>
          (:library opengl)<br>
          ,@(loop for arg in args collect (second arg) collect (first arg))<br>
          ,return-type)))))<br>
<br>
However, compilation of gl/funcs.lisp fails due to heap exhaustion<br>
(using SBCL 1.0.55).<br>
<br>
-- <br>
Jocelyn<br>
</blockquote></div>