Solved:

(defmd gnc-point ()
        (x (c-in 0))
        (y (c-in 0))
        (z (c-in 0))
        (foreign-ptr (c-in (fgn-alloc 'glInt 3 :gnc-point))))

(defobserver x ((self gnc-point))
        (with-integrity (:change self)
                (let ((ptr (^foreign-ptr)))
                  (if ptr
                      (setf (eltgli ptr 0) (^x))
(error "OBSERVER X OF ~S: FOREIGN-PTR is NIL (Foreign memory not available)" self)))))

(defobserver y ((self gnc-point))
        (with-integrity (:change self)
                (let ((ptr (^foreign-ptr)))
                  (if ptr
                      (setf (eltgli ptr 1) (^y))
(error "OBSERVER Y OF ~S: FOREIGN-PTR is NIL (Foreign memory not available)" self)))))

(defobserver z ((self gnc-point))
        (with-integrity (:change self)
                (let ((ptr (^foreign-ptr)))
                  (if ptr
                      (setf (eltgli ptr 2) (^z))
(error "OBSERVER Z OF ~S: FOREIGN-PTR is NIL (Foreign memory not available)" self)))))

... A bit more complex but works ;-)

Frank


Am 29.08.2007 um 21:50 schrieb Frank Goenninger:

* PGP Signed: 08/29/07 at 21:50:08

Correct problem case:

I defined the foreign-ptr cell as lazy (as :until-asked) for a reason ... ->

0> 7612 calculating cell ~a appears in call stack: ~a dirty=0/ foreign-ptr/gnc-point0] dirty=0/foreign-ptr/gnc-point0]
(dirty=0/foreign-ptr/gnc-point0])

... landing in a (break) ...

Ok. So I am basically looking for an idiom on how to avoid the circularity. I sense there is a simple solution but ...

Oh my. It's been a long day ;-)

Frank


Am 29.08.2007 um 21:35 schrieb Frank Goenninger:

> Old Signed: 08/29/07 at 21:35:14

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 ???

Thx!

Frank


* Frank Goenninger<[EMAIL PROTECTED]>
* 0xED320F02:0x05AE0907
_______________________________________________
cells-devel site list
[email protected]
http://common-lisp.net/mailman/listinfo/cells-devel


> Old Signed: 08/29/07 at 21:35:14
* text/plain body
* Frank Goenninger<[EMAIL PROTECTED]>
* 0xED320F02:0x05AE0907


* Frank Goenninger<[EMAIL PROTECTED]>
* 0xED320F02:0x05AE0907
_______________________________________________
cells-devel site list
[email protected]
http://common-lisp.net/mailman/listinfo/cells-devel


* PGP Signed: 08/29/07 at 21:50:08
* text/plain body
* Frank Goenninger<[EMAIL PROTECTED]>
* 0xED320F02:0x05AE0907

Attachment: PGP.sig
Description: PGP signature

_______________________________________________
cells-devel site list
[email protected]
http://common-lisp.net/mailman/listinfo/cells-devel

Reply via email to