[HOpenGL] OpenGL/GLUT examples crashing: known problem?

Tim Smith tim at desert.net
Wed Apr 20 08:42:28 EDT 2005


On 2005 Apr 12, Claus Reinke <claus.reinke at talk21.com> wrote:

> there are some opengl debuggers and tracers around - I'm googling for a
> free windows one, mac users seem to have such support provided by apple, 
> other platforms have their own.

Claus,

Thank you for the response.  I haven't found one yet for XFree86 on
FreeBSD.

But I did do a number of more experiments.  I have a couple of odd
results that maybe someone can help with.

Here is the strangest one (from my perspective).  I've commented which
objects can be drawn, and which ones crash.  I can't find *any* reason
for this behavior, by looking at the code.

E.g., Sphere' crashes but Cone draws fine.  Looking at the
.../GLUT/Objects.hs, the foreign import statements are basically
identical for the two functions (Cone takes one extra argument).  If
anyone can imagine a way that Cone would succeed but Sphere' would fail,
I'm all ears. :-)

A C program can call glutSolidSphere just fine.  Also, I trimmed out
every unneeded OpenGL-related call; if I put in the usual boilerplate of
setting the projection matrix, etc., it still has the same behavior.

-- cut -----------------------------------------------
import Graphics.UI.GLUT
import qualified System.Environment as Env

main :: IO ()
main = do
    objIndex <- getObjIndex
    createWindow "test"
    displayCallback $= display objIndex
    mainLoop

display :: Int -> DisplayCallback
display objIndex = do
    renderObject Solid (objects !! objIndex)
    flush       -- comment this out, and it still crashes on 5-6,8-11

-- This is sloppy, sorry...
getObjIndex :: IO Int
getObjIndex = do
    args <- Env.getArgs
    return (intOfFirstArg args)
    where
        intOfFirstArg [] = 0
        intOfFirstArg (a:_) = read a

objects :: [Object]
objects = [
        Cube 1,                 -- 0:  OK
        Dodecahedron,           -- 1:  OK
        Icosahedron,            -- 2:  OK
        Octahedron,             -- 3:  OK
        Tetrahedron,            -- 4:  OK
        RhombicDodecahedron,    -- 5:  Crash / user error (freeglut)
        Sphere' 1 5 5,          -- 6:  Crash
        Cone 1 1 5 5,           -- 7:  OK
        Cylinder' 1 1 5 5,      -- 8:  Crash / user error (freeglut)
        Torus 0.75 1 5 5,       -- 9:  Crash
        Teapot 1,               -- 10: Crash
        SierpinskiSponge 1      -- 11: Crash / user error (freeglut)
    ]
-- cut -----------------------------------------------


The "Crash / user error (freeglut)" comment means that those three
objects crash with the current GLUT code, but return this error when I
"#define GLUT_GET_PROC_ADDRESS_IS_BROKEN 1" in GLUT/cbits/HsGLUT.c:

objs: user error (unknown GLUT call glutSolidRhombicDodecahedron, check
for freeglut)

There's no configure tests which define that - it's not mentioned
anywhere else besides HsGLUT.c - so I don't know if that's meaningful,
but I thought I would explain it.


There's another class of crashes related to lighting & display lists,
but this is way too long as it is.  I'll stop here, and hope that
someone might be able to suggest a reason for the strange behavior.


Thanks a lot for reading this far!

Tim
-- 
If you're not part of the solution, you're part of the precipitate.


More information about the HOpenGL mailing list