[cells-devel] Small progress: GLUT-INIT not called due to false init value checking

Frank Goenninger frank_goenninger at t-online.de
Mon Oct 25 09:16:43 UTC 2004


Hi again..

On Mon, 2004-10-25 at 10:46, Kenny Tilton wrote:
> I just realized a couple of things....
> 
> Frank Goenninger wrote:
> 
> >Hi Kenn & all:
> >
> >I just discovered that GLUT wasn't initialized properly in cl-glut-init.
> >
> >This is due to the (zerop glut-state) which I turned into
> >
> >(or (eq glut-state 0) (eq glut-state -1))
> >
> I am guessing you did this because you saw -1 coming back from (glutGet 
> glut_init_state). That would mean glut is already initialized, and it 
> might be an error (leading to a silent shut-down via exit()) to call 
> glutInit when glut is already initialized (I do seem to recall that in 
> Freeglut).
> 
You're right here. My assumption (and assumptions are never an easy
thing) was that -1 meant "Not initialized yet" and I didn't check the
GLUT specs for that.

> This is where it gets tricky being a Lisp developer. :)  

Well, still counting myself as a newbie I am looking for ways of
learning the art of being more advanced ...

> Anyway, I 
> /think/ the zerop was the correct test. If you are seeing a -1 come back 
> when you are sure glut is not initialized, then we might have an FFI 
> problem (I doubt -1 is being used to signify false).

I will check the GLUT specs for that now.

> >
> >Also, I found that when calling glut-init I run into a 
> >
> >"a MACPTR cannot be coerced to INTEGER"
> >
> >error. So I fiddled with the call to glut-init (all in file
> >glut-extras.lisp) and replaced the argc argument with a fixed integer
> >value, 1. 
> >
> Whoa, I missed that. Two things:
> 
> (1) glutInit wants a pointer to an integer. That is why we allocate an 
> array, stuff the integer into index zero and pass the array -- that is 
> effectively passing a pointer to the first element of the array.
> 
> (2) We are not passing any argv's to glutInit, so you have to pass (a 
> pointer to) zero as the argc. C functions have no way of knowing how 
> many argvs are being passed, so that is why there is also the argc 
> argument. I do not know how C survived being passed an integer address 
> of 1, but if it does not see zero it takes the value of argv as a 
> pointer to the first pointer to an argv. We are passing null for argv, 
> so C would blindly be examining address 0 and thinking it was a pointer.
> 
Fully understood so far with more than 5 years of professional C
programming under my belt ;-))

> Possibly what has happened is that glutInit saw enough to decide it 
> should start up a proper app with window, so things happened in the 
> dock, but when it finally got around to looking at the args, it died on 
> a bad pointer.

Yep. I suppose that's what is happening here.

> 
> On win32 I was able to place breakpoints (by coding "assert( false );") 
> in glut code in VC6 and rebuilding the DLL. (I had to call 
> unload-foreign-library on the dll before rebuilding or VC6 would be 
> unable to overwrite the old one). Then when I ran I could (at first) 
> actually get into the VC6 debugger. Unfortunately, the last time I tried 
> this I could not debug, so it was one test and then shutdown the whole 
> Lisp IDE. To improve on this, I had Freeglut put up a win32 alert box 
> instead of using assert( false), so I could get the DLL to report back 
> some info before continuing execution.
> 
> In this case I would add alerts to glutInit and glutCheckLoop and 
> glutCreateWindow so I could see what was going on. Well, that is if 
> Apple makes a Glut ProjectBuilder. I will install XCode on my new toy 
> now and see what I can see.

Not seen any of kind of source for Apple's GLUT yet. So this will be key
if we want to go the route you suggested for debugging. 

> 
> cheers, kt

Now I have a busy Monday just starting with writing a proposal for a
(hopefully) client to get some money flowing in ...

Frank
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <https://mailman.common-lisp.net/pipermail/cells-devel/attachments/20041025/a7f71f2d/attachment.sig>


More information about the cells-devel mailing list