Frank Goenninger wrote:
Hi Kenny (and all on the list):
I have a simple defmd:
(defmd gnc-point () (x (c-in 0)) (y (c-in 0)) (z (c-in 0)) (foreign-ptr (c_? (let ((ptr (or (^foreign-ptr) (fgn-alloc 'glInt 3 :gnc-point)))) (when ptr (setf (eltgli ptr 0) (^x)) (setf (eltgli ptr 1) (^y)) (setf (eltgli ptr 2) (^z))) ptr))))
This is a model for a point ( x | y | z ) and a foreign object pointer. The pointer shall be set to a an FFI memory pointer (via CFFI) when the instance is created. Also, the elements of the memory array (which is 3 glInt, this being three OpenGL Integers) shall be updated when any of the coordinates x y z is changed...
I get x, y, and z updated but the foreign-ptr remains NIL ... What am I doing wrong ???
Sorry, I was out for the day at the US Open Tennis tournament.
I am just going to throw notes over the wall cuz no time to dig...
Cells debugging issue: pretty sure you can turn on some global such as *c-debug* to have been warned earlier about referencing the cell in its own rule. I might even have made it a parameter to cells-reset.
To do what you are trying to do, use (I think) the .cache symbol-macro (or is it .cache.?):
(or .cache. (let ((ptr <allocate>)) (assert (and (^x)(^y)(^z))) (setf eo x e1 y e2 z)))
Something like that.
hth, kt