GLUT 2.2.1.0 → 2.2.2.0
raw patch · 8 files changed
+72/−79 lines, 8 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Graphics.UI.GLUT.Callbacks.Window: AdditionalButton :: Int -> MouseButton
- Graphics.UI.GLUT.Fonts: fontHeight :: (Font a) => a -> IO GLfloat
+ Graphics.UI.GLUT.Fonts: fontHeight :: Font a => a -> IO GLfloat
- Graphics.UI.GLUT.Fonts: renderString :: (Font a) => a -> String -> IO ()
+ Graphics.UI.GLUT.Fonts: renderString :: Font a => a -> String -> IO ()
- Graphics.UI.GLUT.Fonts: stringWidth :: (Font a) => a -> String -> IO GLint
+ Graphics.UI.GLUT.Fonts: stringWidth :: Font a => a -> String -> IO GLint
Files
- GLUT.cabal +5/−5
- Graphics/UI/GLUT/Raw/Tokens.hs +23/−23
- Graphics/UI/GLUT/Types.hs +3/−1
- examples/Misc/ExtractContours.hs +2/−2
- examples/OrangeBook/ogl2brick/Brick.hs +35/−44
- examples/RedBook/Image.hs +1/−1
- examples/RedBook/Tess.hs +2/−2
- examples/RedBook/UnProject.hs +1/−1
GLUT.cabal view
@@ -1,5 +1,5 @@ name: GLUT-version: 2.2.1.0+version: 2.2.2.0 license: BSD3 license-file: LICENSE maintainer: Sven Panne <sven.panne@aedion.de>@@ -157,12 +157,12 @@ ghc-options: -Wall if os(windows) && flag(UseNativeWindowsLibraries) cpp-options: "-DCALLCONV=stdcall"- extra-libraries: glut32 cc-options: "-DUSE_GETPROCADDRESS"+ extra-libraries: glut32 else cpp-options: "-DCALLCONV=ccall"- extra-libraries: glut+ cc-options: "-DUSE_DLSYM" if os(darwin)- cc-options: "-DUSE_NSADDRESSOFSYMBOL"+ frameworks: GLUT else- cc-options: "-DUSE_DLSYM"+ extra-libraries: glut
Graphics/UI/GLUT/Raw/Tokens.hs view
@@ -18,7 +18,7 @@ import Foreign.C.Types import Graphics.Rendering.OpenGL ( GLenum ) -glut_ACCUM :: GLenum+glut_ACCUM :: CUInt glut_ACCUM = 0x0004 glut_ACTION_CONTINUE_EXECUTION :: CInt@@ -45,31 +45,31 @@ glut_ALLOW_DIRECT_CONTEXT :: CInt glut_ALLOW_DIRECT_CONTEXT = 1 -glut_ALPHA :: GLenum+glut_ALPHA :: CUInt glut_ALPHA = 0x0008 glut_AUX :: GLenum glut_AUX = 0x1000 -glut_AUX1 :: GLenum+glut_AUX1 :: CUInt glut_AUX1 = 0x1000 -glut_AUX2 :: GLenum+glut_AUX2 :: CUInt glut_AUX2 = 0x2000 -glut_AUX3 :: GLenum+glut_AUX3 :: CUInt glut_AUX3 = 0x4000 -glut_AUX4 :: GLenum+glut_AUX4 :: CUInt glut_AUX4 = 0x8000 glut_BLUE :: CInt glut_BLUE = 0x0002 -glut_BORDERLESS :: GLenum+glut_BORDERLESS :: CUInt glut_BORDERLESS = 0x0800 -glut_CAPTIONLESS :: GLenum+glut_CAPTIONLESS :: CUInt glut_CAPTIONLESS = 0x0400 glut_CORE_PROFILE :: CInt@@ -153,7 +153,7 @@ glut_DEBUG :: CInt glut_DEBUG = 0x0001 -glut_DEPTH :: GLenum+glut_DEPTH :: CUInt glut_DEPTH = 0x0010 glut_DEVICE_IGNORE_KEY_REPEAT :: GLenum@@ -168,7 +168,7 @@ glut_DISPLAY_MODE_POSSIBLE :: GLenum glut_DISPLAY_MODE_POSSIBLE = 0x0190 -glut_DOUBLE :: GLenum+glut_DOUBLE :: CUInt glut_DOUBLE = 0x0002 glut_DOWN :: CInt@@ -246,7 +246,7 @@ glut_HIDDEN :: CInt glut_HIDDEN = 0x0000 -glut_INDEX :: GLenum+glut_INDEX :: CUInt glut_INDEX = 0x0001 glut_INIT_DISPLAY_MODE :: GLenum@@ -285,16 +285,16 @@ glut_JOYSTICK_BUTTONS :: GLenum glut_JOYSTICK_BUTTONS = 0x0266 -glut_JOYSTICK_BUTTON_A :: GLenum+glut_JOYSTICK_BUTTON_A :: CUInt glut_JOYSTICK_BUTTON_A = 0x0001 -glut_JOYSTICK_BUTTON_B :: GLenum+glut_JOYSTICK_BUTTON_B :: CUInt glut_JOYSTICK_BUTTON_B = 0x0002 -glut_JOYSTICK_BUTTON_C :: GLenum+glut_JOYSTICK_BUTTON_C :: CUInt glut_JOYSTICK_BUTTON_C = 0x0004 -glut_JOYSTICK_BUTTON_D :: GLenum+glut_JOYSTICK_BUTTON_D :: CUInt glut_JOYSTICK_BUTTON_D = 0x0008 glut_JOYSTICK_POLL_RATE :: GLenum@@ -390,7 +390,7 @@ glut_LEFT_BUTTON :: CInt glut_LEFT_BUTTON = 0x0000 -glut_LUMINANCE :: GLenum+glut_LUMINANCE :: CUInt glut_LUMINANCE = 0x0200 glut_MENU_IN_USE :: CInt@@ -405,7 +405,7 @@ glut_MIDDLE_BUTTON :: CInt glut_MIDDLE_BUTTON = 0x0001 -glut_MULTISAMPLE :: GLenum+glut_MULTISAMPLE :: CUInt glut_MULTISAMPLE = 0x0080 glut_NORMAL :: GLenum@@ -453,10 +453,10 @@ glut_RENDERING_CONTEXT :: GLenum glut_RENDERING_CONTEXT = 0x01FD -glut_RGB :: GLenum+glut_RGB :: CUInt glut_RGB = 0x0000 -glut_RGBA :: GLenum+glut_RGBA :: CUInt glut_RGBA = 0x0000 glut_RIGHT_BUTTON :: CInt@@ -474,16 +474,16 @@ glut_SCREEN_WIDTH_MM :: GLenum glut_SCREEN_WIDTH_MM = 0x00CA -glut_SINGLE :: GLenum+glut_SINGLE :: CUInt glut_SINGLE = 0x0000 -glut_SRGB :: GLenum+glut_SRGB :: CUInt glut_SRGB = 0x1000 -glut_STENCIL :: GLenum+glut_STENCIL :: CUInt glut_STENCIL = 0x0020 -glut_STEREO :: GLenum+glut_STEREO :: CUInt glut_STEREO = 0x0100 glut_TRANSPARENT_INDEX :: GLenum
Graphics/UI/GLUT/Types.hs view
@@ -76,6 +76,7 @@ | RightButton | WheelUp | WheelDown+ | AdditionalButton Int deriving ( Eq, Ord, Show ) marshalMouseButton :: MouseButton -> CInt@@ -85,6 +86,7 @@ RightButton -> glut_RIGHT_BUTTON WheelUp -> glut_WHEEL_UP WheelDown -> glut_WHEEL_DOWN+ AdditionalButton b -> fromIntegral b unmarshalMouseButton :: CInt -> MouseButton unmarshalMouseButton x@@ -93,7 +95,7 @@ | x == glut_RIGHT_BUTTON = RightButton | x == glut_WHEEL_UP = WheelUp | x == glut_WHEEL_DOWN = WheelDown- | otherwise = error ("unmarshalMouseButton: illegal value " ++ show x)+ | otherwise = AdditionalButton (fromIntegral x) glut_WHEEL_UP :: CInt glut_WHEEL_UP = 3
examples/Misc/ExtractContours.hs view
@@ -48,7 +48,7 @@ noOpCombiner :: Combiner DontCare noOpCombiner _newVertex _weightedProperties = 0 -star :: ComplexPolygon (Color3 GLclampf)+star :: ComplexPolygon (Color3 GLfloat) star = ComplexPolygon [ ComplexContour [ AnnotatedVertex (Vertex3 250 50 0) (Color3 1 0 1),@@ -57,7 +57,7 @@ AnnotatedVertex (Vertex3 250 150 0) (Color3 1 0 0), AnnotatedVertex (Vertex3 400 150 0) (Color3 0 1 0) ] ] -combineColors :: Combiner (Color3 GLclampf)+combineColors :: Combiner (Color3 GLfloat) combineColors _newVertex (WeightedProperties
examples/OrangeBook/ogl2brick/Brick.hs view
@@ -5,11 +5,17 @@ See the file libraries/GLUT/LICENSE -} +import Prelude hiding ( sum )+import Control.Applicative import Control.Monad+import Data.Foldable ( Foldable, sum ) import Data.IORef import System.Exit import Graphics.UI.GLUT +infixl 6 $+, $-+infixl 7 $*+ inertiaThreshold, inertiaFactor :: GLfloat inertiaThreshold = 1 inertiaFactor = 0.5@@ -21,7 +27,7 @@ timerFrequencyMillis :: Timeout timerFrequencyMillis = 20 -clearColors :: [Color4 GLfloat]+clearColors :: [Color4 GLclampf] clearColors = [ Color4 0.0 0.0 0.0 1, Color4 0.2 0.2 0.3 1,@@ -48,7 +54,7 @@ theScale :: IORef GLfloat, lastPosition :: IORef Position, shouldRotate :: IORef Bool,- colorCycle :: IORef [Color4 GLfloat],+ colorCycle :: IORef [Color4 GLclampf], modelCycle :: IORef [IO ()], modifiers :: IORef Modifiers }@@ -56,9 +62,9 @@ makeState :: IO State makeState = do di <- newIORef initialDiff- li <- newIORef 0+ li <- newIORef (pure 0) ia <- newIORef initialInertia- io <- newIORef 0+ io <- newIORef (pure 0) sc <- newIORef 1 lp <- newIORef (Position (-1) (-1)) sr <- newIORef True@@ -78,32 +84,17 @@ modifiers = mo } -instance Num a => Num (Vector3 a) where- (Vector3 x1 y1 z1) + (Vector3 x2 y2 z2) =- Vector3 (x1 + x2) (y1 + y2) (z1 + z2)- (Vector3 x1 y1 z1) - (Vector3 x2 y2 z2) =- Vector3 (x1 - x2) (y1 - y2) (z1 - z2)- (Vector3 x1 y1 z1) * (Vector3 x2 y2 z2) =- Vector3 (x1 * x2) (y1 * y2) (z1 * z2)- negate (Vector3 x y z) =- Vector3 (negate x) (negate y) (negate z)- abs (Vector3 x y z) =- Vector3 (abs x) (abs y) (abs z)- signum (Vector3 x y z) =- Vector3 (signum x) (signum y) (signum z)- fromInteger i =- Vector3 (fromInteger i) (fromInteger i) (fromInteger i)--fromScalar :: Num a => a -> Vector3 a-fromScalar s = Vector3 s s s+-- Our tiny vector math library...+($+), ($-), ($*) :: (Applicative t, Num a) => t a -> t a -> t a+($+) = liftA2 (+)+($-) = liftA2 (-)+($*) = liftA2 (*) -step :: (Num a, Ord a) => Vector3 a -> Vector3 a -> Vector3 a-step (Vector3 x1 y1 z1) (Vector3 x2 y2 z2) =- Vector3 (s x1 x2) (s y1 y2) (s z1 z2)- where s e x = if x < e then 0 else 1+step :: (Applicative t, Num a, Ord a) => t a -> t a -> t a+step = liftA2 (\e x -> if x < e then 0 else 1) -dot :: Num a => Vector3 a -> Vector3 a -> a-dot (Vector3 x1 y1 z1) (Vector3 x2 y2 z2) = x1 * x2 + y1 * y2 + z1 * z2+dot :: (Applicative t, Foldable t, Num a) => t a -> t a -> a+dot v1 v2 = sum (v1 $* v2) drawFace :: Normal3 GLfloat -> Vertex3 GLfloat -> Vertex3 GLfloat -> Vertex3 GLfloat -> Vertex3 GLfloat -> IO ()@@ -208,7 +199,7 @@ resetState :: State -> IO () resetState state = do diff state $= initialDiff- lastIncr state $= 0+ lastIncr state $= pure 0 inertia state $= initialInertia theScale state $= 1 @@ -217,12 +208,12 @@ lastPosition state $= Position (-1) (-1) li <- get (lastIncr state) ia <- get (inertia state)- let t = fromScalar inertiaThreshold- f = fromScalar inertiaFactor- l = (1 - (step (-t) li)) * ((li + t) * f - ia)- r = (step t li) * ((li - t) * f - ia)- inertia state $= l + ia + r- lastIncr state $= 0+ let t = pure inertiaThreshold+ f = pure inertiaFactor+ l = (pure 1 $- (step (fmap negate t) li)) $* ((li $+ t) $* f $- ia)+ r = (step t li) $* ((li $- t) $* f $- ia)+ inertia state $= l $+ ia $+ r+ lastIncr state $= pure 0 keyboard :: State -> KeyboardMouseCallback keyboard state key keyState mods _ = do@@ -238,13 +229,13 @@ (Char '-', Down) -> theScale state $~ (+ (- scaleIncrement)) (Char _, Down) -> printHelp (SpecialKey KeyHome, Down) -> resetState state- (SpecialKey KeyLeft, Down) -> diff state $~ (+ (- Vector3 1 0 0))- (SpecialKey KeyRight, Down) -> diff state $~ (+ Vector3 1 0 0)- (SpecialKey KeyUp, Down) -> diff state $~ (+ (- Vector3 0 1 0))- (SpecialKey KeyDown, Down) -> diff state $~ (+ Vector3 0 1 0)+ (SpecialKey KeyLeft, Down) -> diff state $~ ($- Vector3 1 0 0)+ (SpecialKey KeyRight, Down) -> diff state $~ ($+ Vector3 1 0 0)+ (SpecialKey KeyUp, Down) -> diff state $~ ($- Vector3 0 1 0)+ (SpecialKey KeyDown, Down) -> diff state $~ ($+ Vector3 0 1 0) (MouseButton LeftButton, Down) -> do- inertia state $= 0- lastIncr state $= 0+ inertia state $= pure 0+ lastIncr state $= pure 0 (MouseButton LeftButton, Up) -> calcInertia state (_, _) -> return () @@ -259,16 +250,16 @@ when (xt /= -1) $ do mods <- get (modifiers state) if ctrl mods == Down- then do diff state $~ (+ Vector3 0 0 xl)+ then do diff state $~ ($+ Vector3 0 0 xl) theScale state $~ (+ (yl * scaleFactor))- else diff state $~ (+ li)+ else diff state $~ ($+ li) timer :: State -> TimerCallback timer state = do rot <- get (shouldRotate state) when rot $ do ia <- get (inertia state)- diff state $~ (+ ia)+ diff state $~ ($+ ia) postRedisplay Nothing addTimerCallback timerFrequencyMillis (timer state)
examples/RedBook/Image.hs view
@@ -71,7 +71,7 @@ motion :: State -> MotionCallback motion state (Position x y) = do Size _ height <- get windowSize- let screenY = height - y+ let screenY = fromIntegral height - y -- resolve overloading, not needed in "real" programs let rasterPos2i = rasterPos :: Vertex2 GLint -> IO () rasterPos2i (Vertex2 x screenY)
examples/RedBook/Tess.hs view
@@ -48,7 +48,7 @@ noOpCombiner :: Combiner DontCare noOpCombiner _newVertex _weightedProperties = 0 -star :: ComplexPolygon (Color3 GLclampf)+star :: ComplexPolygon (Color3 GLfloat) star = ComplexPolygon [ ComplexContour [ AnnotatedVertex (Vertex3 250 50 0) (Color3 1 0 1),@@ -57,7 +57,7 @@ AnnotatedVertex (Vertex3 250 150 0) (Color3 1 0 0), AnnotatedVertex (Vertex3 400 150 0) (Color3 0 1 0) ] ] -combineColors :: Combiner (Color3 GLclampf)+combineColors :: Combiner (Color3 GLfloat) combineColors _newVertex (WeightedProperties
examples/RedBook/UnProject.hs view
@@ -31,7 +31,7 @@ v@(_, Size _ h) <- get viewport mvMatrix <- get (matrix (Just (Modelview 0))) :: IO (GLmatrix GLdouble) projMatrix <- get (matrix (Just Projection)) :: IO (GLmatrix GLdouble)- let realY = h - y -1+ let realY = fromIntegral h - y -1 putStrLn ("Coordinates at cursor are (" ++ show x ++", " ++ show realY ++ ")") w0 <- unProject (Vertex3 (fromIntegral x) (fromIntegral realY) 0) mvMatrix projMatrix v putStrLn ("World coords at z=0.0 are " ++ show w0)