Appended are a bunch of patches for HOpenGL-1.01 to catch up with the
latest changes in GLU and the CVS HEAD version of GHC. They provide
minimal fixes for the ubiquitous GLU versionitis and the current Haskell
library reorganization. People which are using only "official" GHCs and
don't have any problems with their GLU setup can happily ignore this
mail...
I don't really want to release Yet Another HOpenGL Version (tm) before a
new GHC is out, so this seems to be the easiest way to keep people on the
bleeding edge happy.
Cheers,
S.
diff -u -r HOpenGL-1.01-orig/examples/misc/BitSet.hs HOpenGL-1.01/examples/misc/BitSet.hs
--- HOpenGL-1.01-orig/examples/misc/BitSet.hs Fri Jan 14 16:06:20 2000
+++ HOpenGL-1.01/examples/misc/BitSet.hs Mon Mar 4 17:32:03 2002
@@ -7,24 +7,24 @@
import Ix(rangeSize)
import Monad(liftM)
-import IOExts
+import Data.Array.IO
-newtype BitSet = BitSet (IOArray Int Bool)
+newtype BitSet = BitSet (IOUArray Int Bool)
emptyBS :: Int -> IO BitSet
-emptyBS size = liftM BitSet $ newIOArray (0, size-1) False
+emptyBS size = liftM BitSet $ newArray (0, size-1) False
clearBS :: BitSet -> Int -> IO ()
-clearBS (BitSet bs) i = writeIOArray bs i False
+clearBS (BitSet bs) i = writeArray bs i False
clearAllBS :: BitSet -> IO ()
clearAllBS bs = mapM_ (clearBS bs) [0 .. sizeBS bs - 1]
setBS :: BitSet -> Int -> IO ()
-setBS (BitSet bs) i = writeIOArray bs i True
+setBS (BitSet bs) i = writeArray bs i True
isSetBS :: BitSet -> Int -> IO Bool
-isSetBS (BitSet bs) i = readIOArray bs i
+isSetBS (BitSet bs) i = readArray bs i
sizeBS :: BitSet -> Int
-sizeBS (BitSet bs) = rangeSize (boundsIOArray bs)
+sizeBS (BitSet bs) = rangeSize (bounds bs)
diff -u -r HOpenGL-1.01-orig/examples/misc/FPSCounter.hs HOpenGL-1.01/examples/misc/FPSCounter.hs
--- HOpenGL-1.01-orig/examples/misc/FPSCounter.hs Tue Mar 14 12:07:47 2000
+++ HOpenGL-1.01/examples/misc/FPSCounter.hs Mon Mar 4 17:33:36 2002
@@ -9,6 +9,7 @@
import IOExts
import Time
+import Data.Array.IO
data FPSCounter =
FPSCounter (IORef Int) -- 0-based counter for averaging
@@ -20,18 +21,18 @@
-- The initial value is as wrong as any other, but it is
-- automatically corrected after a wrap-around.
ct <- getClockTime
- elapsedTimes <- newIOArray (1, numUpdates) ct
+ elapsedTimes <- newArray (1, numUpdates) ct
return $ FPSCounter counter elapsedTimes
getFPS :: FPSCounter -> IO Float
getFPS (FPSCounter counter elapsedTimes) = do
- let (lo, hi) = boundsIOArray elapsedTimes
+ let (lo, hi) = bounds elapsedTimes
numUpdates = hi - lo + 1
count <- readIORef counter
- oldElapsed <- readIOArray elapsedTimes (count + lo)
+ oldElapsed <- readArray elapsedTimes (count + lo)
newElapsed <- getClockTime
writeIORef counter ((count + 1) `mod` numUpdates)
- writeIOArray elapsedTimes (count + lo) newElapsed
+ writeArray elapsedTimes (count + lo) newElapsed
return $ fromIntegral numUpdates /
max (timeDiffInSecs (diffClockTimes newElapsed oldElapsed))
1.0e-4 -- safety
diff -u -r HOpenGL-1.01-orig/examples/misc/PackLib.hs HOpenGL-1.01/examples/misc/PackLib.hs
--- HOpenGL-1.01-orig/examples/misc/PackLib.hs Sun Jun 11 16:43:43 2000
+++ HOpenGL-1.01/examples/misc/PackLib.hs Mon Mar 4 17:18:24 2002
@@ -17,7 +17,7 @@
import List(isPrefixOf, nub)
import Monad(liftM, when, unless)
import Directory(getDirectoryContents)
-import IOExts(hSetBinaryMode) -- see comment in front of openBinaryFile
+import GHC.Handle(hSetBinaryMode) -- see comment in front of openBinaryFile
{-
-- DEBUGGING ONLY
diff -u -r HOpenGL-1.01-orig/lib/GLUT_CBGlobal.gc.in HOpenGL-1.01/lib/GLUT_CBGlobal.gc.in
--- HOpenGL-1.01-orig/lib/GLUT_CBGlobal.gc.in Thu Mar 16 11:56:46 2000
+++ HOpenGL-1.01/lib/GLUT_CBGlobal.gc.in Mon Mar 4 16:29:41 2002
@@ -29,7 +29,7 @@
import Prelude hiding (Either(Left))
-import IOExts(fixIO, freeHaskellFunctionPtr)
+import IOExts(fixIO)
import GL_DIS
import GL_BasicTypes(WindowPosition(..))
import GLUT_CallbackUtils(GlobalCallback(..), gFunc)
diff -u -r HOpenGL-1.01-orig/lib/GLUT_CallbackUtils.hs HOpenGL-1.01/lib/GLUT_CallbackUtils.hs
--- HOpenGL-1.01-orig/lib/GLUT_CallbackUtils.hs Wed Mar 15 14:05:33 2000
+++ HOpenGL-1.01/lib/GLUT_CallbackUtils.hs Mon Mar 4 16:29:53 2002
@@ -25,7 +25,7 @@
GlobalCallback(..), gFunc
) where
-import IOExts(IORef, newIORef, readIORef, writeIORef, freeHaskellFunctionPtr)
+import IOExts(IORef, newIORef, readIORef, writeIORef)
import Maybe(isJust)
import GL_DIS
import GLUT_Window(Window, getWindow)
diff -u -r HOpenGL-1.01-orig/lib/GLUT_Menu.gc HOpenGL-1.01/lib/GLUT_Menu.gc
--- HOpenGL-1.01-orig/lib/GLUT_Menu.gc Sun Oct 28 16:16:30 2001
+++ HOpenGL-1.01/lib/GLUT_Menu.gc Mon Mar 4 16:29:09 2002
@@ -27,7 +27,7 @@
MenuAction, MenuItem(..), attachMenu
) where
-import IOExts(IORef, newIORef, readIORef, writeIORef, freeHaskellFunctionPtr)
+import IOExts(IORef, newIORef, readIORef, writeIORef)
import Monad(unless)
import GL_DIS
import GLUT_CBWindow(MouseButton, marshall_MouseButton)
diff -u -r HOpenGL-1.01-orig/lib/GLU_NURBS.gc.in HOpenGL-1.01/lib/GLU_NURBS.gc.in
--- HOpenGL-1.01-orig/lib/GLU_NURBS.gc.in Thu Nov 1 18:06:55 2001
+++ HOpenGL-1.01/lib/GLU_NURBS.gc.in Mon Mar 4 17:00:15 2002
@@ -212,7 +212,7 @@
@GLU_1_3@%enum NurbsMode (Eq,Ord) GLfloat [
@GLU_1_3@% GLU_NURBS_RENDERER,
-@GLU_1_3@% GLU_NURBS_TESSELATOR
+@GLU_1_3@% GLU_NURBS_TESSELLATOR
@GLU_1_3@% ]
nurbsProperty :: NurbsObj -> NurbsProperty -> IO ()
diff -u -r HOpenGL-1.01-orig/lib/GLU_Quadrics.gc HOpenGL-1.01/lib/GLU_Quadrics.gc
--- HOpenGL-1.01-orig/lib/GLU_Quadrics.gc Thu Nov 1 18:07:31 2001
+++ HOpenGL-1.01/lib/GLU_Quadrics.gc Mon Mar 4 16:29:16 2002
@@ -30,7 +30,7 @@
sphere, cylinder, disk, partialDisk
) where
-import IOExts(fixIO, IORef, newIORef, readIORef, writeIORef, freeHaskellFunctionPtr)
+import IOExts(fixIO, IORef, newIORef, readIORef, writeIORef)
import Monad(when, unless)
import GL_DIS
import GL_BasicTypes(GLdouble, GLint, GLenum, GLboolean, marshall_GLboolean)
diff -u -r HOpenGL-1.01-orig/lib/GL_Errors.gc HOpenGL-1.01/lib/GL_Errors.gc
--- HOpenGL-1.01-orig/lib/GL_Errors.gc Sun Nov 11 18:31:59 2001
+++ HOpenGL-1.01/lib/GL_Errors.gc Mon Mar 4 15:32:14 2002
@@ -53,7 +53,7 @@
% GLU_NURBS_ERROR31, GLU_NURBS_ERROR32, GLU_NURBS_ERROR33,
% GLU_NURBS_ERROR34, GLU_NURBS_ERROR35, GLU_NURBS_ERROR36,
% GLU_NURBS_ERROR37, GLU_INVALID_ENUM, GLU_INVALID_VALUE,
-% GLU_OUT_OF_MEMORY, GLU_INCOMPATIBLE_GL_VERSION
+% GLU_OUT_OF_MEMORY
% ]
-- Silly line, because some Green Card versions stumble over a directive at EOF
diff -u -r HOpenGL-1.01-orig/lib/GL_FFI.hs.in HOpenGL-1.01/lib/GL_FFI.hs.in
--- HOpenGL-1.01-orig/lib/GL_FFI.hs.in Sat Jul 8 23:27:10 2000
+++ HOpenGL-1.01/lib/GL_FFI.hs.in Mon Mar 4 17:05:45 2002
@@ -18,8 +18,14 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-}
-@HAS_STORABLE@module GL_FFI ( module Foreign ) where
+@HAS_STORABLE@module GL_FFI ( module Foreign, module Addr, module ForeignObj,
+@HAS_STORABLE@ freeHaskellFunctionPtr, makeStablePtr ) where
@HAS_STORABLE@import Foreign
+@HAS_STORABLE@import Addr
+@HAS_STORABLE@import ForeignObj
+@HAS_STORABLE@foreign import "freeHaskellFunctionPtr" unsafe
+@HAS_STORABLE@ freeHaskellFunctionPtr :: Addr -> IO ()
+@HAS_STORABLE@makeStablePtr = newStablePtr
@HAS_STORABLE@ {-
module GL_FFI (