<div dir="ltr">It seems to be compiling a new lambda on every call. I'll walk through my logic below:<br><br>So I am looking at how (gen-buffers) is implemented.<br><br>(defun gen-buffers (count)<br>  (with-foreign-object (buffer-array '%gl:uint count)<br>

    (%gl:gen-buffers count buffer-array)<br>    (loop for i below count<br>          collecting (mem-aref buffer-array '%gl:uint i))))<br><br>%gl:gen-buffers is deifned as <br>(defglextfun ("glGenBuffers" gen-buffers) :void<br>

  (n sizei)<br>  (buffers (:pointer uint)))<br><br>which expands to:<br>(progn<br> (declaim (notinline gen-buffers))<br> (defun gen-buffers (n buffers)<br>   (generate-gl-function "glgenbuffers" 'gen-buffers ':void<br>

                         '((n sizei) (buffers (:pointer uint))) n buffers))<br> (setf (get 'gen-buffers 'proc-address-dummy) #'gen-buffers)<br> 'gen-buffers)<br><br>and generate-gl-function<br>(defun generate-gl-function (foreign-name lisp-name result-type body &rest args)<br>

  (let ((address (gl-get-proc-address foreign-name))<br>        (arg-list (mapcar #'first body)))<br>    (when (or (not (pointerp address)) (null-pointer-p address))<br>      (error "Couldn't find function ~A" foreign-name))<br>

    (compile lisp-name<br>             `(lambda ,arg-list<br>                (multiple-value-prog1<br>                    (foreign-funcall-pointer<br>                     ,address<br>                     (:library opengl)<br>

                     ,@(loop for i in body<br>                          collect (second i)<br>                          collect (first i))<br>                     ,result-type)<br>                  #-cl-opengl-no-check-error<br>

                  (check-error ',lisp-name))))<br>    (apply lisp-name args)))<br><br>What is going on here? I don't believe that it is recompiling the wrapper function on every call, but I'm having issues working out how else this works.<br>

Hope someone can help me out here.<br>Cheers <br>Baggers<br><br></div>