Raistlin,
Sorry, I tried BCCing cells-devel when I posted the errata below to comp.lang.lisp, but did not notice that they never appeared.
Raistlin Magere wrote:
Ok I have played with portaglut only a few minutes so nothing too insightfull: I load the program by running first "glbind.lpr" [no errors here] and then "opengl-ffi.lpr" which returns the following error
Error: (SETF NIL) does not have a function definition [condition type: SIMPLE-ERROR]
I have no idea what is going on with that. See errata for my fulminations againt the project manager, which is dandy but can be a total PITA sometimes.
the options are to skip loading uffi.lpr (which was already loaded by glbind) or to skip loading opengl-ffi, aborting the loading of uffi.lpr seems to solve the problem.
Sh*t, I kept telling myself to delete glbind.lpr. That was an old name for it. Just use opengl-ffi.lpr. I am totally sorry for wasting your time by neglecting to delete that file.
In fact deleting from opengl-ffi the line :projects (list (make-instance 'project-module :name "\dvx\uffi\uffi")) allows the loading of the two projects in succession without any problem, by the way I need to run the two project as opengl-ffi although requiring glbind doesn't automatically load it.
I then run (ogb::lesson-14) and get the following error
Error: Attempt to call #("glClearDepth" 1669795401 0 2 1669795401) for which the definition has not yet been (or is no longer) loaded. [condition type: SIMPLE-ERROR]
That was in the errata. I need to add a wrapper for uffi::load-library which checks that the library exists. uffi does not. Find the hard-coded loads of opengl32 and glu32 and change to match your configuration.
The program does manage to create a new window titled "NeHe's OpenGL Framework" however I only see the outline of it and nothing else.
By the way I got an error similar to the one above when I tried to load a dll I had made for test purpose to learn to use uffi or acl-ffi, the loading of the dll went fine and lisp said library loaded however when trying to call the function I would get the same error (I think even the same numbers) but with the name of the function I had tried to call. I then gave up on ffi and uffi - though I still need to use some c code. Maybe this will help me out also with my work.
Well, it might be different, but I can help with that, too. The first thing to do is what I will do to fix my stuff:
(let ((dll-path "whatever")) (assert (probe-file dll-path)) (uffi:load-library dll-path))
If that works, well, what C compiler are you using? Using VC++, I have to do two things: wrap the C functions in extern "C" {} declarations /and/ list each function name in a .DEF file included in the source for the VC++ project. I /think/ naming the C file is an alternative to wrapping the function in the extern form.
The FTGLFromC.cpp and the def file I sent illustrate the above.
Sorry again I botched sending the errata (below).
kenny
Kenny Tilton wrote:
OK, 3D-lovers, the (model) matrix is now your oyster (if UFFI loves you):
Just installed from ZIP. Errata:
1. In dvx/lib there is a freeglut.zip from which freeglut.dll should be extracted. Won't happen again.
2. Look for load of freeglut.dll from hard-coded "D:/dvx/lib".
3. Also look for hard-coded loads of opengl32 and glu32 from "/winnt". That's "/windows" on other wins, lord knows what on other oses. The bad news here is that uffi:load-library seems not to mind at all if it is asked to load a non-existent library, so the first sign of trouble is a runtime erorr something like "glClearColor? what the hell is that?"
4. ACL users: because the handling of the project files is such a phenomenal PITA, I get "opengl-bindings" package not found because after I change the defpackage inside the LPR (it's just source) to:
(defpackage :opengl-bindings...)
ACL changes it back to common-graphics whenever it feels like it. :) I would tell you the fix if I knew one, but in the past I just turn a few hundred monkeys trying things at random until it works, and then I never know which monkey fixed it nor certainly what they did to fix it.
kenny