OpenGL 2.11.1.0 → 2.12.0.0
raw patch · 73 files changed
+308/−384 lines, 73 filesdep +ObjectNamedep +StateVardep +transformersdep ~GLURawdep ~OpenGLRawdep ~bytestringPVP ok
version bump matches the API change (PVP)
Dependencies added: ObjectName, StateVar, transformers
Dependency ranges changed: GLURaw, OpenGLRaw, bytestring, text
API changes (from Hackage documentation)
- Graphics.Rendering.OpenGL.GL.DebugOutput: debugMessageID :: DebugMessageID -> GLuint
- Graphics.Rendering.OpenGL.GL.ObjectName: class ObjectName a => GeneratableObjectName a where genObjectName = fmap head $ genObjectNames 1 genObjectNames = flip replicateM genObjectName
- Graphics.Rendering.OpenGL.GL.ObjectName: class ObjectName a where deleteObjectName = deleteObjectNames . (: []) deleteObjectNames = mapM_ deleteObjectName
- Graphics.Rendering.OpenGL.GL.ObjectName: deleteObjectName :: ObjectName a => a -> IO ()
- Graphics.Rendering.OpenGL.GL.ObjectName: deleteObjectNames :: ObjectName a => [a] -> IO ()
- Graphics.Rendering.OpenGL.GL.ObjectName: genObjectName :: GeneratableObjectName a => IO a
- Graphics.Rendering.OpenGL.GL.ObjectName: genObjectNames :: GeneratableObjectName a => Int -> IO [a]
- Graphics.Rendering.OpenGL.GL.ObjectName: isObjectName :: ObjectName a => a -> IO Bool
- Graphics.Rendering.OpenGL.GL.Shaders.Limits: maxTessellationLevel :: GettableStateVar GLint
- Graphics.Rendering.OpenGL.GL.StateVar: ($=!) :: HasSetter s => s a -> a -> IO ()
- Graphics.Rendering.OpenGL.GL.StateVar: ($=) :: HasSetter s => s a -> a -> IO ()
- Graphics.Rendering.OpenGL.GL.StateVar: ($~!) :: (HasGetter v, HasSetter v) => v a -> (a -> a) -> IO ()
- Graphics.Rendering.OpenGL.GL.StateVar: ($~) :: (HasGetter v, HasSetter v) => v a -> (a -> a) -> IO ()
- Graphics.Rendering.OpenGL.GL.StateVar: GettableStateVar :: (IO a) -> GettableStateVar a
- Graphics.Rendering.OpenGL.GL.StateVar: SettableStateVar :: (a -> IO ()) -> SettableStateVar a
- Graphics.Rendering.OpenGL.GL.StateVar: StateVar :: (GettableStateVar a) -> (SettableStateVar a) -> StateVar a
- Graphics.Rendering.OpenGL.GL.StateVar: class HasGetter g
- Graphics.Rendering.OpenGL.GL.StateVar: class HasSetter s
- Graphics.Rendering.OpenGL.GL.StateVar: data StateVar a
- Graphics.Rendering.OpenGL.GL.StateVar: get :: HasGetter g => g a -> IO a
- Graphics.Rendering.OpenGL.GL.StateVar: instance Applicative GettableStateVar
- Graphics.Rendering.OpenGL.GL.StateVar: instance Functor GettableStateVar
- Graphics.Rendering.OpenGL.GL.StateVar: instance HasGetter GettableStateVar
- Graphics.Rendering.OpenGL.GL.StateVar: instance HasGetter IORef
- Graphics.Rendering.OpenGL.GL.StateVar: instance HasGetter StateVar
- Graphics.Rendering.OpenGL.GL.StateVar: instance HasSetter IORef
- Graphics.Rendering.OpenGL.GL.StateVar: instance HasSetter SettableStateVar
- Graphics.Rendering.OpenGL.GL.StateVar: instance HasSetter StateVar
- Graphics.Rendering.OpenGL.GL.StateVar: instance Monad GettableStateVar
- Graphics.Rendering.OpenGL.GL.StateVar: makeGettableStateVar :: IO a -> GettableStateVar a
- Graphics.Rendering.OpenGL.GL.StateVar: makeSettableStateVar :: (a -> IO ()) -> SettableStateVar a
- Graphics.Rendering.OpenGL.GL.StateVar: makeStateVar :: IO a -> (a -> IO ()) -> StateVar a
- Graphics.Rendering.OpenGL.GL.StateVar: newtype GettableStateVar a
- Graphics.Rendering.OpenGL.GL.StateVar: newtype SettableStateVar a
+ Graphics.Rendering.OpenGL.GL.BufferObjects: instance CanBeLabeled BufferObject
+ Graphics.Rendering.OpenGL.GL.DebugOutput: MessageGroup :: (Maybe DebugSource) -> (Maybe DebugType) -> (Maybe DebugSeverity) -> MessageGroup
+ Graphics.Rendering.OpenGL.GL.DebugOutput: MessageGroupWithIDs :: DebugSource -> DebugType -> [DebugMessageID] -> MessageGroup
+ Graphics.Rendering.OpenGL.GL.DebugOutput: class CanBeLabeled a
+ Graphics.Rendering.OpenGL.GL.DebugOutput: data MessageGroup
+ Graphics.Rendering.OpenGL.GL.DebugOutput: debugMessageControl :: MessageGroup -> SettableStateVar Capability
+ Graphics.Rendering.OpenGL.GL.DebugOutput: instance Eq MessageGroup
+ Graphics.Rendering.OpenGL.GL.DebugOutput: instance Ord MessageGroup
+ Graphics.Rendering.OpenGL.GL.DebugOutput: instance Show MessageGroup
+ Graphics.Rendering.OpenGL.GL.DebugOutput: maxLabelLength :: GettableStateVar GLsizei
+ Graphics.Rendering.OpenGL.GL.DebugOutput: objectLabel :: CanBeLabeled a => a -> StateVar (Maybe String)
+ Graphics.Rendering.OpenGL.GL.DisplayLists: instance CanBeLabeled DisplayList
+ Graphics.Rendering.OpenGL.GL.Shaders.Limits: maxTessGenLevel :: GettableStateVar GLsizei
+ Graphics.Rendering.OpenGL.GL.SyncObjects: instance CanBeLabeled SyncObject
+ Graphics.Rendering.OpenGL.GL.VertexArrayObjects: instance CanBeLabeled VertexArrayObject
- Graphics.Rendering.OpenGL.GL.PrimitiveMode: maxPatchVertices :: GettableStateVar GLint
+ Graphics.Rendering.OpenGL.GL.PrimitiveMode: maxPatchVertices :: GettableStateVar GLsizei
- Graphics.Rendering.OpenGL.GL.PrimitiveMode: patchVertices :: SettableStateVar GLint
+ Graphics.Rendering.OpenGL.GL.PrimitiveMode: patchVertices :: StateVar GLsizei
Files
- OpenGL.cabal +10/−4
- src/Graphics/Rendering/OpenGL/GL.hs +4/−4
- src/Graphics/Rendering/OpenGL/GL/Antialiasing.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/BeginEnd.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/BufferObjects.hs +15/−11
- src/Graphics/Rendering/OpenGL/GL/ByteString.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Capability.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Clipping.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/ColorSum.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Colors.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/CoordTrans.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/DebugOutput.hs +55/−10
- src/Graphics/Rendering/OpenGL/GL/DisplayLists.hs +14/−7
- src/Graphics/Rendering/OpenGL/GL/Evaluators.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Feedback.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Fog.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Framebuffer.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObject.hs +13/−6
- src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObjects.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/Queries.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObject.hs +14/−6
- src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObjects.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Hints.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/LineSegments.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/ObjectName.hs +0/−75
- src/Graphics/Rendering/OpenGL/GL/PerFragment.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/PixelRectangles/ColorTable.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Convolution.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Histogram.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Minmax.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelMap.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelStorage.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelTransfer.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Rasterization.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/PixellikeObject.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Points.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Polygons.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/PrimitiveMode.hs +7/−5
- src/Graphics/Rendering/OpenGL/GL/QueryObject.hs +11/−5
- src/Graphics/Rendering/OpenGL/GL/QueryObjects.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/QueryUtils.hs +43/−2
- src/Graphics/Rendering/OpenGL/GL/QueryUtils/PName.hs +7/−3
- src/Graphics/Rendering/OpenGL/GL/RasterPos.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/ReadCopyPixels.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/RenderMode.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Selection.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Shaders/Attribs.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Shaders/Limits.hs +4/−4
- src/Graphics/Rendering/OpenGL/GL/Shaders/Program.hs +12/−6
- src/Graphics/Rendering/OpenGL/GL/Shaders/ProgramBinaries.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Shaders/ProgramObjects.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Shaders/Shader.hs +9/−3
- src/Graphics/Rendering/OpenGL/GL/Shaders/ShaderBinaries.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Shaders/ShaderObjects.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Shaders/Uniform.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Shaders/Variables.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/StateVar.hs +0/−160
- src/Graphics/Rendering/OpenGL/GL/StringQueries.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/SyncObjects.hs +11/−6
- src/Graphics/Rendering/OpenGL/GL/Texturing/Application.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Texturing/Environments.hs +3/−2
- src/Graphics/Rendering/OpenGL/GL/Texturing/Objects.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Texturing/Parameters.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Texturing/Specification.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Texturing/TexParameter.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/Texturing/TextureObject.hs +11/−5
- src/Graphics/Rendering/OpenGL/GL/TransformFeedback.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/VertexArrayObjects.hs +12/−7
- src/Graphics/Rendering/OpenGL/GL/VertexArrays.hs +1/−1
- src/Graphics/Rendering/OpenGL/GL/VertexSpec.hs +1/−1
- src/Graphics/Rendering/OpenGL/GLU/Errors.hs +1/−1
- src/Graphics/Rendering/OpenGL/GLU/Initialization.hs +1/−1
OpenGL.cabal view
@@ -1,5 +1,5 @@ name: OpenGL-version: 2.11.1.0+version: 2.12.0.0 synopsis: A binding for the OpenGL graphics system description: A Haskell binding for the OpenGL graphics system (GL, version 4.5) and its@@ -13,6 +13,7 @@ and <http://www.opengl.org/registry/>. homepage: http://www.haskell.org/haskellwiki/Opengl bug-reports: https://github.com/haskell-opengl/OpenGL/issues+copyright: Copyright (C) 2002-2015 Sven Panne license: BSD3 license-file: LICENSE author: Sven Panne@@ -50,7 +51,6 @@ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects Graphics.Rendering.OpenGL.GL.Hints Graphics.Rendering.OpenGL.GL.LineSegments- Graphics.Rendering.OpenGL.GL.ObjectName Graphics.Rendering.OpenGL.GL.PerFragment Graphics.Rendering.OpenGL.GL.PixelRectangles Graphics.Rendering.OpenGL.GL.PixelRectangles.ColorTable@@ -79,7 +79,6 @@ Graphics.Rendering.OpenGL.GL.Shaders.ShaderBinaries Graphics.Rendering.OpenGL.GL.Shaders.ShaderObjects Graphics.Rendering.OpenGL.GL.Shaders.Uniform- Graphics.Rendering.OpenGL.GL.StateVar Graphics.Rendering.OpenGL.GL.StringQueries Graphics.Rendering.OpenGL.GL.SyncObjects Graphics.Rendering.OpenGL.GL.Tensor@@ -148,7 +147,14 @@ hs-source-dirs: src ghc-options: -Wall build-depends:- base >= 3 && < 5, bytestring, text, OpenGLRaw >= 2.1, GLURaw >= 1.3.0.0+ base >= 3 && < 5,+ bytestring >= 0.9 && < 0.11,+ text >= 0.1 && < 1.3,+ transformers >= 0.2 && < 0.5,+ ObjectName >= 1.1 && < 1.2,+ StateVar >= 1.1 && < 1.2,+ OpenGLRaw >= 2.1 && < 2.5,+ GLURaw >= 1.3 && < 1.6 default-language: Haskell2010 other-extensions: CPP
src/Graphics/Rendering/OpenGL/GL.hs view
@@ -17,7 +17,7 @@ -- * OpenGL Fundamentals module Graphics.Rendering.OpenGL.Raw.Types, module Graphics.Rendering.OpenGL.GL.FlushFinish,- module Graphics.Rendering.OpenGL.GL.ObjectName,+ module Data.ObjectName, -- * Event Model module Graphics.Rendering.OpenGL.GL.SyncObjects,@@ -68,7 +68,7 @@ module Graphics.Rendering.OpenGL.GL.DebugOutput, -- * State and State Requests- module Graphics.Rendering.OpenGL.GL.StateVar,+ module Data.StateVar, module Graphics.Rendering.OpenGL.GL.Tensor, module Graphics.Rendering.OpenGL.GL.StringQueries, module Graphics.Rendering.OpenGL.GL.SavingState@@ -76,7 +76,8 @@ import Graphics.Rendering.OpenGL.Raw.Types import Graphics.Rendering.OpenGL.GL.FlushFinish-import Graphics.Rendering.OpenGL.GL.ObjectName+import Data.ObjectName+import Data.StateVar import Graphics.Rendering.OpenGL.GL.SyncObjects import Graphics.Rendering.OpenGL.GL.QueryObjects@@ -120,7 +121,6 @@ import Graphics.Rendering.OpenGL.GL.TransformFeedback import Graphics.Rendering.OpenGL.GL.DebugOutput -import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Tensor import Graphics.Rendering.OpenGL.GL.StringQueries import Graphics.Rendering.OpenGL.GL.SavingState
src/Graphics/Rendering/OpenGL/GL/Antialiasing.hs view
@@ -17,7 +17,7 @@ sampleBuffers, samples, multisample, subpixelBits ) where -import Graphics.Rendering.OpenGL.GL.StateVar+import Data.StateVar import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/BeginEnd.hs view
@@ -22,7 +22,7 @@ edgeFlag ) where -import Graphics.Rendering.OpenGL.GL.StateVar+import Data.StateVar import Graphics.Rendering.OpenGL.GL.EdgeFlag import Graphics.Rendering.OpenGL.GL.Exception import Graphics.Rendering.OpenGL.GL.PrimitiveMode
src/Graphics/Rendering/OpenGL/GL/BufferObjects.hs view
@@ -41,17 +41,18 @@ indexedBufferStart, indexedBufferSize ) where -import Data.Maybe-import Foreign.Marshal.Array-import Foreign.Marshal.Utils-import Foreign.Ptr-import Foreign.Storable+import Control.Monad.IO.Class+import Data.Maybe ( fromMaybe )+import Data.ObjectName+import Data.StateVar+import Foreign.Marshal.Array ( allocaArray, peekArray, withArrayLen )+import Foreign.Marshal.Utils ( with )+import Foreign.Ptr ( Ptr, nullPtr )+import Graphics.Rendering.OpenGL.GL.DebugOutput import Graphics.Rendering.OpenGL.GL.Exception import Graphics.Rendering.OpenGL.GL.GLboolean-import Graphics.Rendering.OpenGL.GL.ObjectName import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.VertexArrays import Graphics.Rendering.OpenGL.GLU.ErrorsInternal import Graphics.Rendering.OpenGL.Raw@@ -64,18 +65,21 @@ -------------------------------------------------------------------------------- instance ObjectName BufferObject where- isObjectName = fmap unmarshalGLboolean . glIsBuffer . bufferID+ isObjectName = liftIO . fmap unmarshalGLboolean . glIsBuffer . bufferID deleteObjectNames bufferObjects =- withArrayLen (map bufferID bufferObjects) $+ liftIO . withArrayLen (map bufferID bufferObjects) $ glDeleteBuffers . fromIntegral instance GeneratableObjectName BufferObject where genObjectNames n =- allocaArray n $ \buf -> do+ liftIO . allocaArray n $ \buf -> do glGenBuffers (fromIntegral n) buf fmap (map BufferObject) $ peekArray n buf +instance CanBeLabeled BufferObject where+ objectLabel = objectNameLabel gl_BUFFER . bufferID+ -------------------------------------------------------------------------------- data BufferTarget =@@ -288,7 +292,7 @@ getBufferPointer :: BufferTarget -> IO (Ptr a) getBufferPointer t = with nullPtr $ \buf -> do glGetBufferPointerv (marshalBufferTarget t) gl_BUFFER_MAP_POINTER buf- peek buf+ peek1 id buf --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/ByteString.hs view
@@ -19,8 +19,8 @@ packUtf8, unpackUtf8 ) where +import Data.StateVar import Foreign.Ptr-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw import qualified Data.ByteString as B import qualified Data.ByteString.Internal as BI
src/Graphics/Rendering/OpenGL/GL/Capability.hs view
@@ -21,7 +21,7 @@ IndexedEnableCap(..), makeIndexedCapability, ) where -import Graphics.Rendering.OpenGL.GL.StateVar+import Data.StateVar import Graphics.Rendering.OpenGL.GL.GLboolean import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GLU.ErrorsInternal
src/Graphics/Rendering/OpenGL/GL/Clipping.hs view
@@ -17,6 +17,7 @@ ClipPlaneName(..), clipPlane, maxClipPlanes ) where +import Data.StateVar import Foreign.Marshal.Alloc import Foreign.Marshal.Utils import Foreign.Ptr@@ -24,7 +25,6 @@ import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.CoordTrans import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GLU.ErrorsInternal import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/ColorSum.hs view
@@ -16,7 +16,7 @@ colorSum ) where -import Graphics.Rendering.OpenGL.GL.StateVar+import Data.StateVar import Graphics.Rendering.OpenGL.GL.Capability --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/Colors.hs view
@@ -44,12 +44,12 @@ ) where import Control.Monad+import Data.StateVar import Foreign.Marshal.Alloc import Foreign.Marshal.Array import Foreign.Marshal.Utils import Foreign.Ptr import Foreign.Storable-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Tensor import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.Face
src/Graphics/Rendering/OpenGL/GL/CoordTrans.hs view
@@ -36,13 +36,13 @@ Plane(..), TextureCoordName(..), TextureGenMode(..), textureGenMode ) where +import Data.StateVar import Foreign.ForeignPtr import Foreign.Marshal.Alloc import Foreign.Marshal.Array import Foreign.Marshal.Utils import Foreign.Ptr import Foreign.Storable-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Tensor import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.Exception
src/Graphics/Rendering/OpenGL/GL/DebugOutput.hs view
@@ -17,7 +17,7 @@ module Graphics.Rendering.OpenGL.GL.DebugOutput ( -- * Debug Messages debugOutput, DebugMessage(..), DebugSource(..), DebugType(..),- DebugMessageID(..), DebugSeverity(..), maxDebugMessageLength,+ DebugMessageID(DebugMessageID), DebugSeverity(..), maxDebugMessageLength, -- * Debug Message Callback debugMessageCallback,@@ -25,7 +25,8 @@ -- * Debug Message Log maxDebugLoggedMessages, debugLoggedMessages, - -- * Controlling Debug Messages (TODO)+ -- * Controlling Debug Messages+ MessageGroup(..), debugMessageControl, -- * Externally Generated Messages debugMessageInsert,@@ -34,24 +35,25 @@ DebugGroup(..), pushDebugGroup, popDebugGroup, withDebugGroup, maxDebugGroupStackDepth, - -- * Debug Labels (TODO)+ -- * Debug Labels+ CanBeLabeled(..), maxLabelLength, -- * Asynchronous and Synchronous Debug Output debugOutputSynchronous ) where import Control.Monad ( unless, replicateM )+import Data.StateVar import Foreign.C.String ( peekCStringLen, withCStringLen ) import Foreign.C.Types import Foreign.Marshal.Alloc ( alloca )-import Foreign.Marshal.Array ( allocaArray )+import Foreign.Marshal.Array ( allocaArray, withArrayLen ) import Foreign.Ptr (- Ptr, nullPtr, castPtrToFunPtr, FunPtr, nullFunPtr, freeHaskellFunPtr )+ nullPtr, castPtrToFunPtr, FunPtr, nullFunPtr, freeHaskellFunPtr ) import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.Exception import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------@@ -177,7 +179,7 @@ getDebugMessageCallback :: IO (Maybe (DebugMessage -> IO ())) getDebugMessageCallback = do- cb <- castPtrToFunPtr `fmap` getPointer DebugCallbackFunction+ cb <- getDebugCallbackFunction return $ if (cb == nullFunPtr) then Nothing else Just . toDebugProc . dyn_debugProc $ cb@@ -198,7 +200,7 @@ setDebugMessageCallback :: Maybe (DebugMessage -> IO ()) -> IO () setDebugMessageCallback maybeDebugProc = do- oldCB <- castPtrToFunPtr `fmap` getPointer DebugCallbackFunction+ oldCB <- getDebugCallbackFunction unless (oldCB == nullFunPtr) $ freeHaskellFunPtr oldCB newCB <-@@ -214,6 +216,10 @@ (unmarshalDebugSeverity severity) msg) +getDebugCallbackFunction :: IO (FunPtr GLDEBUGPROCFunc)+getDebugCallbackFunction =+ castPtrToFunPtr `fmap` getPointer DebugCallbackFunction+ -------------------------------------------------------------------------------- maxDebugLoggedMessages :: GettableStateVar GLsizei@@ -233,8 +239,8 @@ alloca $ \idBuf -> alloca $ \severityBuf -> allocaArray (fromIntegral len) $ \messageBuf -> do- glGetDebugMessageLog 1 len sourceBuf typeBuf idBuf severityBuf- nullPtr messageBuf+ _ <- glGetDebugMessageLog 1 len sourceBuf typeBuf idBuf+ severityBuf nullPtr messageBuf source <- peek1 unmarshalDebugSource sourceBuf typ <- peek1 unmarshalDebugType typeBuf msgID <- peek1 DebugMessageID idBuf@@ -244,6 +250,35 @@ -------------------------------------------------------------------------------- +data MessageGroup =+ MessageGroup (Maybe DebugSource) (Maybe DebugType) (Maybe DebugSeverity)+ | MessageGroupWithIDs DebugSource DebugType [DebugMessageID]+ deriving ( Eq, Ord, Show )++debugMessageControl :: MessageGroup -> SettableStateVar Capability+debugMessageControl x = case x of+ MessageGroup maybeSource maybeType maybeSeverity ->+ doDebugMessageControl maybeSource maybeType maybeSeverity []+ MessageGroupWithIDs source typ messageIDs ->+ doDebugMessageControl (Just source) (Just typ) Nothing messageIDs++doDebugMessageControl :: Maybe DebugSource+ -> Maybe DebugType+ -> Maybe DebugSeverity+ -> [DebugMessageID]+ -> SettableStateVar Capability+doDebugMessageControl maybeSource maybeType maybeSeverity messageIDs =+ makeSettableStateVar $ \cap ->+ withArrayLen (map debugMessageID messageIDs) $ \len idsBuf ->+ glDebugMessageControl (maybe gl_DONT_CARE marshalDebugSource maybeSource)+ (maybe gl_DONT_CARE marshalDebugType maybeType)+ (maybe gl_DONT_CARE marshalDebugSeverity maybeSeverity)+ (fromIntegral len)+ idsBuf+ (marshalCapability cap)++--------------------------------------------------------------------------------+ debugMessageInsert :: DebugMessage -> IO () debugMessageInsert (DebugMessage source typ msgID severity message) = withCStringLen message $ \(msg, len) ->@@ -276,6 +311,16 @@ maxDebugGroupStackDepth :: GettableStateVar GLsizei maxDebugGroupStackDepth = makeGettableStateVar (getSizei1 id GetMaxDebugGroupStackDepth)++--------------------------------------------------------------------------------++-- TODO: Make instances for the following features when we have them:+-- * PROGRAM_PIPELINE / glGenProgramPipelines+-- * SAMPLER / glGenSamplers+-- * TRANSFORM_FEEDBACK / glGenTransformFeedbacks++class CanBeLabeled a where+ objectLabel :: a -> StateVar (Maybe String) --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/DisplayLists.hs view
@@ -22,9 +22,11 @@ callList, callLists, listBase ) where -import Foreign.Ptr-import Graphics.Rendering.OpenGL.GL.ObjectName-import Graphics.Rendering.OpenGL.GL.StateVar+import Control.Monad.IO.Class+import Data.ObjectName+import Data.StateVar+import Foreign.Ptr ( Ptr )+import Graphics.Rendering.OpenGL.GL.DebugOutput import Graphics.Rendering.OpenGL.GL.DataType import Graphics.Rendering.OpenGL.GL.Exception import Graphics.Rendering.OpenGL.GL.GLboolean@@ -38,9 +40,13 @@ deriving ( Eq, Ord, Show ) instance ObjectName DisplayList where- isObjectName = fmap unmarshalGLboolean . glIsList . displayListID- deleteObjectNames = mapM_ (uncurry glDeleteLists) . combineConsecutive+ isObjectName = liftIO . fmap unmarshalGLboolean . glIsList . displayListID+ deleteObjectNames =+ liftIO . mapM_ (uncurry glDeleteLists) . combineConsecutive +instance CanBeLabeled DisplayList where+ objectLabel = objectNameLabel gl_DISPLAY_LIST . displayListID+ combineConsecutive :: [DisplayList] -> [(GLuint, GLsizei)] combineConsecutive [] = [] combineConsecutive (z:zs) = (displayListID z, len) : combineConsecutive rest@@ -53,12 +59,13 @@ DisplayList x `isFollowedBy` DisplayList y = x + 1 == y instance GeneratableObjectName DisplayList where- genObjectNames n = do+ genObjectNames n = liftIO $ do first <- glGenLists (fromIntegral n) if DisplayList first == noDisplayList then do recordOutOfMemory return []- else return [ DisplayList l | l <- [ first .. first + fromIntegral n - 1 ] ]+ else return [ DisplayList l+ | l <- [ first .. first + fromIntegral n - 1 ] ] --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/Evaluators.hs view
@@ -46,6 +46,7 @@ import Control.Monad import Data.List+import Data.StateVar import Foreign.ForeignPtr import Foreign.Marshal.Array import Foreign.Marshal.Utils@@ -57,7 +58,6 @@ import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.PolygonMode import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.VertexArrays import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/Feedback.hs view
@@ -18,12 +18,12 @@ ) where import Control.Monad+import Data.StateVar import Foreign.Marshal.Array import Foreign.Ptr import Foreign.Storable import Graphics.Rendering.OpenGL.GL.IOState import Graphics.Rendering.OpenGL.GL.RenderMode-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Tensor import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/Fog.hs view
@@ -20,9 +20,9 @@ FogDistanceMode(..), fogDistanceMode ) where +import Data.StateVar import Foreign.Marshal.Utils import Foreign.Ptr-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GL.VertexSpec
src/Graphics/Rendering/OpenGL/GL/Framebuffer.hs view
@@ -35,13 +35,13 @@ import Control.Monad import Data.List import Data.Maybe+import Data.StateVar import Foreign.Marshal.Array import Graphics.Rendering.OpenGL.GL.BufferMode import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.Face import Graphics.Rendering.OpenGL.GL.GLboolean import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.GLU.ErrorsInternal import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObject.hs view
@@ -17,25 +17,32 @@ FramebufferObject(..) ) where -import Foreign.Marshal+import Control.Monad.IO.Class+import Data.ObjectName+import Foreign.Marshal.Array ( allocaArray, peekArray, withArrayLen )+import Graphics.Rendering.OpenGL.GL.DebugOutput import Graphics.Rendering.OpenGL.GL.GLboolean-import Graphics.Rendering.OpenGL.GL.ObjectName+import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.Raw -------------------------------------------------------------------------------- -data FramebufferObject = FramebufferObject { framebufferID :: GLuint }+newtype FramebufferObject = FramebufferObject { framebufferID :: GLuint } deriving ( Eq, Ord, Show ) instance ObjectName FramebufferObject where- isObjectName = fmap unmarshalGLboolean . glIsFramebuffer . framebufferID+ isObjectName =+ liftIO . fmap unmarshalGLboolean . glIsFramebuffer . framebufferID deleteObjectNames objs =- withArrayLen (map framebufferID objs) $+ liftIO . withArrayLen (map framebufferID objs) $ glDeleteFramebuffers . fromIntegral instance GeneratableObjectName FramebufferObject where genObjectNames n =- allocaArray n $ \buf -> do+ liftIO . allocaArray n $ \buf -> do glGenFramebuffers (fromIntegral n) buf fmap (map FramebufferObject) $ peekArray n buf++instance CanBeLabeled FramebufferObject where+ objectLabel = objectNameLabel gl_FRAMEBUFFER . framebufferID
src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObjects.hs view
@@ -16,10 +16,10 @@ FramebufferStatus(..), framebufferStatus, ) where +import Data.StateVar import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObject import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferTarget import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw -----------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/Queries.hs view
@@ -25,11 +25,11 @@ renderbufferAlphaSize, renderbufferDepthSize, renderbufferStencilSize, ) where +import Data.StateVar import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObjectAttachment import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferTarget import Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObject import Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferTarget-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat import Graphics.Rendering.OpenGL.GL.Texturing.Specification(Level) import Graphics.Rendering.OpenGL.GL.Texturing.TextureObject
src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObject.hs view
@@ -17,25 +17,33 @@ RenderbufferObject(..) ) where -import Foreign.Marshal++import Control.Monad.IO.Class+import Data.ObjectName+import Foreign.Marshal ( allocaArray, peekArray, withArrayLen )+import Graphics.Rendering.OpenGL.GL.DebugOutput import Graphics.Rendering.OpenGL.GL.GLboolean-import Graphics.Rendering.OpenGL.GL.ObjectName+import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.Raw -------------------------------------------------------------------------------- -data RenderbufferObject = RenderbufferObject { renderbufferID :: GLuint}+newtype RenderbufferObject = RenderbufferObject { renderbufferID :: GLuint} deriving ( Eq, Ord, Show ) instance ObjectName RenderbufferObject where- isObjectName = fmap unmarshalGLboolean . glIsRenderbuffer . renderbufferID+ isObjectName =+ liftIO . fmap unmarshalGLboolean . glIsRenderbuffer . renderbufferID deleteObjectNames objs =- withArrayLen (map renderbufferID objs) $+ liftIO . withArrayLen (map renderbufferID objs) $ glDeleteRenderbuffers . fromIntegral instance GeneratableObjectName RenderbufferObject where genObjectNames n =- allocaArray n $ \buf -> do+ liftIO . allocaArray n $ \buf -> do glGenRenderbuffers (fromIntegral n) buf fmap (map RenderbufferObject) $ peekArray n buf++instance CanBeLabeled RenderbufferObject where+ objectLabel = objectNameLabel gl_RENDERBUFFER . renderbufferID
src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObjects.hs view
@@ -22,10 +22,10 @@ renderbufferStorage, renderbufferStorageMultiSample, ) where +import Data.StateVar import Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObject import Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferTarget import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/Hints.hs view
@@ -16,8 +16,8 @@ HintTarget(..), HintMode(..), hint ) where +import Data.StateVar import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/LineSegments.hs view
@@ -28,9 +28,9 @@ ) where import Control.Monad+import Data.StateVar import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
− src/Graphics/Rendering/OpenGL/GL/ObjectName.hs
@@ -1,75 +0,0 @@-{-# LANGUAGE CPP #-}------------------------------------------------------------------------------------ |--- Module : Graphics.Rendering.OpenGL.GL.ObjectName--- Copyright : (c) Sven Panne 2013--- License : BSD3--- --- Maintainer : Sven Panne <svenpanne@gmail.com>--- Stability : stable--- Portability : portable------ This module corresponds to section 2.5 (Objects and the Object Model) of the--- OpenGL 4.4 specs.------ Object names are explicitly handled identifiers for API objects, e.g. a--- texture object name in OpenGL or a buffer object name in OpenAL. They come in--- two flavors: If a name can exist on its own without an associated object, we--- have a 'GeneratableObjectName', otherwise we have an 'ObjectName'.--------------------------------------------------------------------------------------module Graphics.Rendering.OpenGL.GL.ObjectName (- ObjectName(..), GeneratableObjectName(..)-) where--import Control.Monad ( replicateM )-------------------------------------------------------------------------------------- | An 'ObjectName' is an explicitly handled identifier for API objects, e.g. a--- texture object name in OpenGL or a buffer object name in OpenAL.-#if __GLASGOW_HASKELL__ < 708------ Minimal complete definition: 'isObjectName' plus one of 'deleteObjectName' or--- 'deleteObjectNames'.-#endif--class ObjectName a where-#if __GLASGOW_HASKELL__ >= 708- {-# MINIMAL isObjectName, ( deleteObjectName | deleteObjectNames ) #-}-#endif- -- | Test if the given object name is currently in use, i.e. test if it has- -- been generated, but not been deleted so far.- isObjectName :: a -> IO Bool-- -- | Make the given object name available again, declaring it as unused.- deleteObjectName :: a -> IO ()- deleteObjectName = deleteObjectNames . (:[])-- -- | Bulk version of 'deleteObjectName'.- deleteObjectNames:: [a] -> IO ()- deleteObjectNames = mapM_ deleteObjectName---- | A 'GeneratableObjectName' is an 'ObjectName' which can be generated without--- creating an associated object at the same time, e.g. an OpenGL buffer object--- name. Note that e.g. OpenGL program object names do not fall into this--- category, because you can only create such a name together with a program--- object itself.-#if __GLASGOW_HASKELL__ < 708------ Minimal complete definition: One of 'genObjectName' or 'genObjectNames'.-#endif--class ObjectName a => GeneratableObjectName a where-#if __GLASGOW_HASKELL__ >= 708- {-# MINIMAL genObjectName | genObjectNames #-}-#endif- -- | Generate a new unused object name. By generating the name, it becomes- -- used.- genObjectName :: IO a- genObjectName = fmap head $ genObjectNames 1-- -- | Bulk version of 'genObjectName'.- genObjectNames :: Int -> IO [a]- genObjectNames = flip replicateM genObjectName
src/Graphics/Rendering/OpenGL/GL/PerFragment.hs view
@@ -48,6 +48,7 @@ ) where import Control.Monad+import Data.StateVar import Graphics.Rendering.OpenGL.GL.BlendingFactor import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.ComparisonFunction@@ -57,7 +58,6 @@ import Graphics.Rendering.OpenGL.GL.Framebuffer import Graphics.Rendering.OpenGL.GL.GLboolean import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/PixelRectangles/ColorTable.hs view
@@ -21,6 +21,7 @@ colorTableRGBASizes, colorTableLuminanceSize, colorTableIntesitySize, ) where +import Data.StateVar import Foreign.Marshal.Alloc import Foreign.Marshal.Utils import Foreign.Ptr@@ -29,7 +30,6 @@ import Graphics.Rendering.OpenGL.GL.CoordTrans import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.PixelData-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.GLU.ErrorsInternal
src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Convolution.hs view
@@ -25,6 +25,7 @@ convolutionFilterScale, convolutionFilterBias, ) where +import Data.StateVar import Foreign.Marshal.Alloc import Foreign.Marshal.Utils import Foreign.Ptr@@ -33,7 +34,6 @@ import Graphics.Rendering.OpenGL.GL.CoordTrans import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.PixelData-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.GLU.ErrorsInternal
src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Histogram.hs view
@@ -18,6 +18,7 @@ histogramRGBASizes, histogramLuminanceSize ) where +import Data.StateVar import Foreign.Marshal.Utils import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.PeekPoke@@ -25,7 +26,6 @@ import Graphics.Rendering.OpenGL.GL.PixelRectangles.ColorTable import Graphics.Rendering.OpenGL.GL.PixelRectangles.Reset import Graphics.Rendering.OpenGL.GL.PixelRectangles.Sink-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Minmax.hs view
@@ -17,13 +17,13 @@ minmax, getMinmax, resetMinmax ) where +import Data.StateVar import Foreign.Marshal.Utils import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.PixelData import Graphics.Rendering.OpenGL.GL.PixelRectangles.Reset import Graphics.Rendering.OpenGL.GL.PixelRectangles.Sink-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelMap.hs view
@@ -21,12 +21,12 @@ ) where import Data.List+import Data.StateVar import Foreign.ForeignPtr import Foreign.Marshal.Array import Foreign.Ptr import Foreign.Storable import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelStorage.hs view
@@ -18,9 +18,9 @@ skipPixels, rowAlignment, imageHeight, skipImages ) where +import Data.StateVar import Graphics.Rendering.OpenGL.GL.GLboolean import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/PixelRectangles/PixelTransfer.hs view
@@ -19,9 +19,9 @@ rgbaScale, rgbaBias ) where +import Data.StateVar import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/PixelRectangles/Rasterization.hs view
@@ -18,11 +18,11 @@ ) where import Control.Monad+import Data.StateVar import Graphics.Rendering.OpenGL.GL.CoordTrans import Graphics.Rendering.OpenGL.GL.PixelData import Graphics.Rendering.OpenGL.GL.PixelFormat import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/PixellikeObject.hs view
@@ -15,12 +15,12 @@ PixellikeObjectTarget(pixellikeObjTarParam), ) where +import Data.StateVar import Foreign.Marshal.Utils import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObjectAttachment import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferTarget import Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferTarget import Graphics.Rendering.OpenGL.GL.PeekPoke-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.Specification import Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/Points.hs view
@@ -33,11 +33,11 @@ ) where import Control.Monad+import Data.StateVar import Foreign.Marshal.Array import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.PointParameter import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/Polygons.hs view
@@ -20,6 +20,7 @@ ) where import Control.Monad+import Data.StateVar import Foreign.ForeignPtr import Foreign.Marshal.Array import Foreign.Ptr@@ -29,7 +30,6 @@ import Graphics.Rendering.OpenGL.GL.PolygonMode import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GL.SavingState-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/PrimitiveMode.hs view
@@ -20,7 +20,7 @@ patchVertices, maxPatchVertices ) where -import Graphics.Rendering.OpenGL.GL.StateVar+import Data.StateVar import Graphics.Rendering.OpenGL.GL.QueryUtils.PName import Graphics.Rendering.OpenGL.Raw @@ -82,10 +82,12 @@ -- 'patchVertices' is set to a value less than or equal to zero or greater -- than the implementation-dependent maximum value 'maxPatchVertices'. -patchVertices :: SettableStateVar GLint-patchVertices = makeSettableStateVar $ glPatchParameteri gl_PATCH_VERTICES+patchVertices :: StateVar GLsizei+patchVertices =+ makeStateVar (getSizei1 id GetMaxPatchVertices)+ (glPatchParameteri gl_PATCH_VERTICES . fromIntegral) -- | Contains the maximumum number of vertices in a single patch. -maxPatchVertices :: GettableStateVar GLint-maxPatchVertices = makeGettableStateVar $ getInteger1 id GetMaxPatchVertices+maxPatchVertices :: GettableStateVar GLsizei+maxPatchVertices = makeGettableStateVar $ getSizei1 id GetMaxPatchVertices
src/Graphics/Rendering/OpenGL/GL/QueryObject.hs view
@@ -17,9 +17,12 @@ QueryObject(..), noQueryObject ) where -import Foreign.Marshal.Array+import Control.Monad.IO.Class+import Data.ObjectName+import Foreign.Marshal.Array ( allocaArray, peekArray, withArrayLen )+import Graphics.Rendering.OpenGL.GL.DebugOutput import Graphics.Rendering.OpenGL.GL.GLboolean-import Graphics.Rendering.OpenGL.GL.ObjectName+import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------@@ -33,14 +36,17 @@ -------------------------------------------------------------------------------- instance ObjectName QueryObject where- isObjectName = fmap unmarshalGLboolean . glIsQuery . queryID+ isObjectName = liftIO . fmap unmarshalGLboolean . glIsQuery . queryID deleteObjectNames queryObjects =- withArrayLen (map queryID queryObjects) $+ liftIO . withArrayLen (map queryID queryObjects) $ glDeleteQueries . fromIntegral instance GeneratableObjectName QueryObject where genObjectNames n =- allocaArray n $ \buf -> do+ liftIO . allocaArray n $ \buf -> do glGenQueries (fromIntegral n) buf fmap (map QueryObject) $ peekArray n buf++instance CanBeLabeled QueryObject where+ objectLabel = objectNameLabel gl_QUERY . queryID
src/Graphics/Rendering/OpenGL/GL/QueryObjects.hs view
@@ -30,6 +30,7 @@ timestampQuery, timestamp ) where +import Data.StateVar import Foreign.Marshal.Alloc import Foreign.Marshal.Utils import Foreign.Ptr@@ -39,7 +40,6 @@ import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.QueryObject import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/QueryUtils.hs view
@@ -20,10 +20,17 @@ lightIndexToEnum, modelviewIndexToEnum, modelviewEnumToIndex, - maybeNullPtr+ maybeNullPtr,++ objectNameLabel, objectPtrLabel, maxLabelLength ) where -import Foreign.Ptr+import Data.StateVar+import Foreign.C.String ( peekCStringLen, withCStringLen )+import Foreign.Ptr ( Ptr, nullPtr )+import Foreign.Marshal.Alloc ( alloca )+import Foreign.Marshal.Array ( allocaArray )+import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.QueryUtils.PName import Graphics.Rendering.OpenGL.GL.QueryUtils.VertexAttrib import Graphics.Rendering.OpenGL.Raw@@ -63,3 +70,37 @@ maybeNullPtr :: b -> (Ptr a -> b) -> Ptr a -> b maybeNullPtr n f ptr | ptr == nullPtr = n | otherwise = f ptr++--------------------------------------------------------------------------------++objectNameLabel :: GLuint -> GLenum -> StateVar (Maybe String)+objectNameLabel name ident =+ makeStateVar+ (getObjectLabelWith (glGetObjectLabel ident name))+ (setObjectLabelWith (glObjectLabel ident name))++objectPtrLabel :: Ptr () -> StateVar (Maybe String)+objectPtrLabel ptr =+ makeStateVar+ (getObjectLabelWith (glGetObjectPtrLabel ptr))+ (setObjectLabelWith (glObjectPtrLabel ptr))++getObjectLabelWith :: (GLsizei -> Ptr GLsizei -> Ptr GLchar -> IO ())+ -> IO (Maybe String)+getObjectLabelWith getLabel = do+ maxLen <- get maxLabelLength+ alloca $ \lenBuf ->+ allocaArray (fromIntegral maxLen) $ \labelBuf -> do+ getLabel maxLen lenBuf labelBuf+ actualLen <- peek1 fromIntegral lenBuf+ label <- peekCStringLen (labelBuf, actualLen)+ return $ if label == "" then Nothing else Just label++setObjectLabelWith :: (GLsizei -> Ptr GLchar -> IO ()) -> Maybe String -> IO ()+setObjectLabelWith setLabel =+ maybe (set (nullPtr, (0 :: Int))) (flip withCStringLen set)+ where set (labelBuf, len) = setLabel (fromIntegral len) labelBuf++maxLabelLength :: GettableStateVar GLsizei+maxLabelLength =+ makeGettableStateVar (getSizei1 id GetMaxLabelLength)
src/Graphics/Rendering/OpenGL/GL/QueryUtils/PName.hs view
@@ -370,8 +370,9 @@ | GetMaxVertexAttribs -- ^ sizei | GetMaxVaryingFloats -- ^ sizei -- tessellation- | GetMaxPatchVertices -- ^ int- | GetMaxTessellationLevel -- ^ int+ | GetPatchVertices -- ^ sizei+ | GetMaxPatchVertices -- ^ sizei+ | GetMaxTessGenLevel -- ^ sizei -- coordtrans | GetMatrixMode -- ^ enum | GetModelviewStackDepth -- ^ sizei@@ -561,6 +562,7 @@ | GetDebugLoggedMessages -- ^ int | GetDebugNextLoggedMessageLength -- ^ int | GetMaxDebugGroupStackDepth -- ^ int+ | GetMaxLabelLength -- ^ int instance GetPName1I PName1I where @@ -638,8 +640,9 @@ GetMaxVaryingFloats -> Just gl_MAX_VARYING_COMPONENTS GetMaxVertexAttribs -> Just gl_MAX_VERTEX_ATTRIBS -- tessellation+ GetPatchVertices -> Just gl_PATCH_VERTICES GetMaxPatchVertices -> Just gl_MAX_PATCH_VERTICES- GetMaxTessellationLevel -> Just gl_MAX_TESS_GEN_LEVEL+ GetMaxTessGenLevel -> Just gl_MAX_TESS_GEN_LEVEL -- coordtrans GetMatrixMode -> Just gl_MATRIX_MODE GetModelviewStackDepth -> Just gl_MODELVIEW_STACK_DEPTH@@ -830,6 +833,7 @@ GetDebugLoggedMessages -> Just gl_DEBUG_LOGGED_MESSAGES GetDebugNextLoggedMessageLength -> Just gl_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH GetMaxDebugGroupStackDepth -> Just gl_MAX_DEBUG_GROUP_STACK_DEPTH+ GetMaxLabelLength -> Just gl_MAX_LABEL_LENGTH -- 0x8825 through 0x8834 are reserved for draw buffers
src/Graphics/Rendering/OpenGL/GL/RasterPos.hs view
@@ -23,11 +23,11 @@ rasterPositionUnclipped ) where +import Data.StateVar import Foreign.Ptr import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.GLboolean import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Tensor import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/ReadCopyPixels.hs view
@@ -24,11 +24,11 @@ BlitBuffer(..), blitFramebuffer ) where +import Data.StateVar import Graphics.Rendering.OpenGL.GL.BufferMode import Graphics.Rendering.OpenGL.GL.CoordTrans import Graphics.Rendering.OpenGL.GL.PixelData import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.Filter import Graphics.Rendering.OpenGL.GLU.ErrorsInternal import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/RenderMode.hs view
@@ -17,9 +17,9 @@ RenderMode(..), withRenderMode, renderMode ) where +import Data.StateVar import Graphics.Rendering.OpenGL.GL.Exception import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/Selection.hs view
@@ -18,13 +18,13 @@ RenderMode(..), renderMode ) where +import Data.StateVar import Foreign.Marshal.Array import Foreign.Ptr import Graphics.Rendering.OpenGL.GL.Exception import Graphics.Rendering.OpenGL.GL.IOState import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GL.RenderMode-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/Shaders/Attribs.hs view
@@ -17,11 +17,11 @@ attribLocation, VariableType(..), activeAttribs, ) where +import Data.StateVar import Graphics.Rendering.OpenGL.GL.ByteString import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GL.Shaders.Program import Graphics.Rendering.OpenGL.GL.Shaders.Variables-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/Shaders/Limits.hs view
@@ -16,10 +16,10 @@ maxVertexTextureImageUnits, maxTextureImageUnits, maxCombinedTextureImageUnits, maxTextureCoords, maxVertexUniformComponents, maxFragmentUniformComponents, maxVertexAttribs, maxVaryingFloats,- maxTessellationLevel+ maxTessGenLevel ) where -import Graphics.Rendering.OpenGL.GL.StateVar+import Data.StateVar import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.Raw @@ -79,8 +79,8 @@ -- | Contains the maximum allowed tessellation level. -maxTessellationLevel :: GettableStateVar GLint-maxTessellationLevel = makeGettableStateVar $ getInteger1 id GetMaxTessellationLevel+maxTessGenLevel :: GettableStateVar GLsizei+maxTessGenLevel = getLimit GetMaxTessGenLevel getLimit :: PName1I -> GettableStateVar GLsizei getLimit = makeGettableStateVar . getSizei1 id
src/Graphics/Rendering/OpenGL/GL/Shaders/Program.hs view
@@ -20,12 +20,15 @@ programVar1, programVar3 ) where -import Foreign.Marshal.Utils-import Foreign.Ptr+import Control.Monad.IO.Class+import Data.ObjectName+import Data.StateVar+import Foreign.Marshal.Utils ( with )+import Foreign.Ptr ( Ptr )+import Graphics.Rendering.OpenGL.GL.DebugOutput import Graphics.Rendering.OpenGL.GL.GLboolean-import Graphics.Rendering.OpenGL.GL.ObjectName import Graphics.Rendering.OpenGL.GL.PeekPoke-import Graphics.Rendering.OpenGL.GL.StateVar+import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------@@ -34,8 +37,11 @@ deriving ( Eq, Ord, Show ) instance ObjectName Program where- isObjectName = fmap unmarshalGLboolean . glIsProgram . programID- deleteObjectName = glDeleteProgram . programID+ isObjectName = liftIO . fmap unmarshalGLboolean . glIsProgram . programID+ deleteObjectName = liftIO . glDeleteProgram . programID++instance CanBeLabeled Program where+ objectLabel = objectNameLabel gl_PROGRAM . programID --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/Shaders/ProgramBinaries.hs view
@@ -18,12 +18,12 @@ ProgramBinary(..), programBinary ) where +import Data.StateVar import Foreign.Marshal.Alloc import Graphics.Rendering.OpenGL.GL.ByteString import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GL.Shaders.Program-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/Shaders/ProgramObjects.hs view
@@ -39,6 +39,7 @@ import Data.List import Data.Maybe+import Data.StateVar import Foreign.Marshal.Array import Foreign.Ptr import Graphics.Rendering.OpenGL.GL.ByteString@@ -47,7 +48,6 @@ import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GL.Shaders.Program import Graphics.Rendering.OpenGL.GL.Shaders.Shader-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/Shaders/Shader.hs view
@@ -17,8 +17,11 @@ Shader(..) ) where +import Control.Monad.IO.Class+import Data.ObjectName+import Graphics.Rendering.OpenGL.GL.DebugOutput import Graphics.Rendering.OpenGL.GL.GLboolean-import Graphics.Rendering.OpenGL.GL.ObjectName+import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------@@ -27,5 +30,8 @@ deriving ( Eq, Ord, Show ) instance ObjectName Shader where- isObjectName = fmap unmarshalGLboolean . glIsShader . shaderID- deleteObjectName = glDeleteShader . shaderID+ isObjectName = liftIO . fmap unmarshalGLboolean . glIsShader . shaderID+ deleteObjectName = liftIO . glDeleteShader . shaderID++instance CanBeLabeled Shader where+ objectLabel = objectNameLabel gl_SHADER . shaderID
src/Graphics/Rendering/OpenGL/GL/Shaders/ShaderBinaries.hs view
@@ -18,11 +18,11 @@ ShaderBinary(..), shaderBinary, ) where +import Data.StateVar import Foreign.Marshal.Array import Graphics.Rendering.OpenGL.GL.ByteString import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GL.Shaders.Shader-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/Shaders/ShaderObjects.hs view
@@ -28,6 +28,7 @@ ) where import Control.Monad+import Data.StateVar import Foreign.Marshal.Alloc import Foreign.Marshal.Array import Foreign.Marshal.Utils@@ -37,7 +38,6 @@ import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GL.Shaders.Shader-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/Shaders/Uniform.hs view
@@ -24,6 +24,7 @@ ) where import Data.Maybe+import Data.StateVar import Foreign.Marshal.Alloc import Foreign.Ptr import Foreign.Storable@@ -31,7 +32,6 @@ import Graphics.Rendering.OpenGL.GL.Shaders.Program import Graphics.Rendering.OpenGL.GL.Shaders.ProgramObjects import Graphics.Rendering.OpenGL.GL.Shaders.Variables-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Tensor import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/Shaders/Variables.hs view
@@ -19,13 +19,13 @@ ) where import Control.Monad+import Data.StateVar import Foreign.Marshal.Utils import Foreign.Ptr import Foreign.Storable import Graphics.Rendering.OpenGL.GL.ByteString import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.Shaders.Program-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
− src/Graphics/Rendering/OpenGL/GL/StateVar.hs
@@ -1,160 +0,0 @@------------------------------------------------------------------------------------ |--- Module : Graphics.Rendering.OpenGL.GL.StateVar--- Copyright : (c) Sven Panne 2013--- License : BSD3--- --- Maintainer : Sven Panne <svenpanne@gmail.com>--- Stability : stable--- Portability : portable------ State variables are references in the IO monad, like 'IORef's or parts of--- the OpenGL state. Note that state variables are not neccessarily writable or--- readable, they may come in read-only or write-only flavours, too. As a very--- simple example for a state variable, consider an explicitly allocated memory--- buffer. This buffer can easily be converted into a 'StateVar':------ @--- makeStateVarFromPtr :: Storable a => Ptr a -> StateVar a--- makeStateVarFromPtr p = makeStateVar (peek p) (poke p)--- @------ The example below puts 11 into a state variable (i.e. into the buffer),--- increments the contents of the state variable by 22, and finally prints the--- resulting content:------ @--- do p <- malloc :: IO (Ptr Int)--- let v = makeStateVarFromPtr p--- v $= 11--- v $~ (+ 22)--- x <- get v--- print x--- @------ 'IORef's are state variables, too, so an example with them looks extremely--- similiar:------ @--- do v <- newIORef (0 :: Int)--- v $= 11--- v $~ (+ 22)--- x <- get v--- print x--- @-----------------------------------------------------------------------------------module Graphics.Rendering.OpenGL.GL.StateVar (- -- * Readable State Variables- HasGetter(..),- GettableStateVar(..), makeGettableStateVar,- -- * Writable State Variables- HasSetter(..),- SettableStateVar(..), makeSettableStateVar,- -- * General State Variables- StateVar(..), makeStateVar,- -- * Utility Functions- ($~), ($=!), ($~!)-) where--import Control.Applicative ( Applicative(..) )-import Data.IORef ( IORef, readIORef, writeIORef )------------------------------------------------------------------------------------infixr 2 $=-------------------------------------------------------------------------------------- | The class of all readable state variables.-class HasGetter g where- -- | Read the value of a state variable.- get :: g a -> IO a--instance HasGetter IORef where- get = readIORef---- | A concrete implementation of a read-only state variable, carrying an IO--- action to read the value.-newtype GettableStateVar a = GettableStateVar (IO a)--instance HasGetter GettableStateVar where- get (GettableStateVar g) = g--instance Functor GettableStateVar where- fmap f (GettableStateVar g) = GettableStateVar (fmap f g)--instance Applicative GettableStateVar where- pure = GettableStateVar . pure- GettableStateVar g <*> GettableStateVar h = GettableStateVar (g <*> h)--instance Monad GettableStateVar where- return = pure- GettableStateVar g >>= h = GettableStateVar (g >>= get . h)---- | Construct a 'GettableStateVar' from an IO action.-makeGettableStateVar :: IO a -> GettableStateVar a-makeGettableStateVar = GettableStateVar-------------------------------------------------------------------------------------- | The class of all writable state variables.-class HasSetter s where- -- | Write a new value into a state variable.- ($=) :: s a -> a -> IO ()--instance HasSetter IORef where- ($=) = writeIORef---- | A concrete implementation of a write-only state variable, carrying an IO--- action to write the new value.-newtype SettableStateVar a = SettableStateVar (a -> IO ())--instance HasSetter SettableStateVar where- ($=) (SettableStateVar s) a = s a---- instance Contravariant SettableStateVar where--- contramap f (SettableStateVar s) = SettableStateVar (s . f)---- | Construct a 'SettableStateVar' from an IO action.-makeSettableStateVar :: (a -> IO ()) -> SettableStateVar a-makeSettableStateVar = SettableStateVar-------------------------------------------------------------------------------------- | A concrete implementation of a readable and writable state variable,--- carrying one IO action to read the value and another IO action to write the--- new value.-data StateVar a =- StateVar (GettableStateVar a) (SettableStateVar a)--instance HasGetter StateVar where- get (StateVar g _) = get g--instance HasSetter StateVar where- ($=) (StateVar _ s) a = s $= a---- | Construct a 'StateVar' from two IO actions, one for reading and one for--- writing.-makeStateVar :: IO a -> (a -> IO ()) -> StateVar a-makeStateVar g s = StateVar (makeGettableStateVar g) (makeSettableStateVar s)-------------------------------------------------------------------------------------- | A modificator convenience function, transforming the contents of a state--- variable with a given funtion.--($~) :: (HasGetter v, HasSetter v) => v a -> (a -> a) -> IO ()-v $~ f = do- x <- get v- v $= f x---- | A variant of '$=' which is strict in the value to be set.-($=!) :: HasSetter s => s a -> a -> IO ()-v $=! x = x `seq` v $= x---- | A variant of '$~' which is strict in the transformed value.-($~!) :: (HasGetter v, HasSetter v) => v a -> (a -> a) -> IO ()-v $~! f = do- x <- get v- v $=! f x
src/Graphics/Rendering/OpenGL/GL/StringQueries.hs view
@@ -20,10 +20,10 @@ import Data.Bits import Data.Char+import Data.StateVar import Foreign.C.String import Foreign.Ptr import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/SyncObjects.hs view
@@ -25,13 +25,15 @@ SyncStatus(..), syncStatus ) where -import Foreign.Marshal.Utils-import Foreign.Ptr+import Control.Monad.IO.Class+import Data.ObjectName+import Data.StateVar+import Foreign.Marshal.Utils ( with )+import Foreign.Ptr ( nullPtr )+import Graphics.Rendering.OpenGL.GL.DebugOutput import Graphics.Rendering.OpenGL.GL.GLboolean-import Graphics.Rendering.OpenGL.GL.ObjectName import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------@@ -40,8 +42,11 @@ deriving ( Eq, Ord, Show ) instance ObjectName SyncObject where- isObjectName = fmap unmarshalGLboolean . glIsSync . syncID- deleteObjectName = glDeleteSync . syncID+ isObjectName = liftIO . fmap unmarshalGLboolean . glIsSync . syncID+ deleteObjectName = liftIO . glDeleteSync . syncID++instance CanBeLabeled SyncObject where+ objectLabel = objectPtrLabel . syncID syncGpuCommandsComplete :: IO SyncObject syncGpuCommandsComplete =
src/Graphics/Rendering/OpenGL/GL/Texturing/Application.hs view
@@ -17,7 +17,7 @@ texture ) where -import Graphics.Rendering.OpenGL.GL.StateVar+import Data.StateVar import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget
src/Graphics/Rendering/OpenGL/GL/Texturing/Environments.hs view
@@ -22,13 +22,13 @@ ) where import Control.Monad+import Data.StateVar import Foreign.Marshal.Alloc import Foreign.Marshal.Utils import Foreign.Ptr import Foreign.Storable import Graphics.Rendering.OpenGL.GL.BlendingFactor import Graphics.Rendering.OpenGL.GL.PeekPoke-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.Parameters import Graphics.Rendering.OpenGL.GL.Texturing.TextureUnit import Graphics.Rendering.OpenGL.GL.VertexSpec@@ -320,7 +320,8 @@ arg :: TextureEnvParameter -> TextureEnvParameter -> StateVar Arg arg op src = combineArg (textureEnvOperand op) (textureEnvSrc src)- where combineArg v w = makeStateVar+ where combineArg :: StateVar BlendingFactor -> StateVar Src -> StateVar Arg+ combineArg v w = makeStateVar (liftM2 Arg (get v) (get w)) (\(Arg x y) -> do v $= x; w $= y)
src/Graphics/Rendering/OpenGL/GL/Texturing/Objects.hs view
@@ -22,10 +22,10 @@ import Data.List import Data.Maybe (fromMaybe)+import Data.StateVar import Foreign.Marshal.Array import Graphics.Rendering.OpenGL.GL.GLboolean import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.TexParameter import Graphics.Rendering.OpenGL.GL.Texturing.TextureObject import Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget
src/Graphics/Rendering/OpenGL/GL/Texturing/Parameters.hs view
@@ -24,11 +24,11 @@ ) where import Control.Monad+import Data.StateVar import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.ComparisonFunction import Graphics.Rendering.OpenGL.GL.CoordTrans import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.Filter import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat import Graphics.Rendering.OpenGL.GL.Texturing.Specification
src/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs view
@@ -20,11 +20,11 @@ ) where import Control.Monad+import Data.StateVar import Foreign.Marshal.Utils import Graphics.Rendering.OpenGL.GL.GLboolean import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.PixelRectangles-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat import Graphics.Rendering.OpenGL.GL.Texturing.Specification import Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget
src/Graphics/Rendering/OpenGL/GL/Texturing/Specification.hs view
@@ -73,13 +73,13 @@ ) where import Foreign.Ptr+import Data.StateVar import Graphics.Rendering.OpenGL.GL.CoordTrans import Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferTarget import Graphics.Rendering.OpenGL.GL.GLboolean import Graphics.Rendering.OpenGL.GL.PixelData import Graphics.Rendering.OpenGL.GL.PixelRectangles import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat import Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/Texturing/TexParameter.hs view
@@ -17,12 +17,12 @@ TexParameter(..), texParami, texParamf, texParamC4f, getTexParameteri ) where +import Data.StateVar import Foreign.Marshal.Alloc import Foreign.Marshal.Utils import Foreign.Ptr import Foreign.Storable import Graphics.Rendering.OpenGL.GL.PeekPoke-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.Raw
src/Graphics/Rendering/OpenGL/GL/Texturing/TextureObject.hs view
@@ -17,9 +17,12 @@ TextureObject(..) ) where -import Foreign.Marshal.Array+import Control.Monad.IO.Class+import Data.ObjectName+import Foreign.Marshal.Array ( allocaArray, peekArray, withArrayLen )+import Graphics.Rendering.OpenGL.GL.DebugOutput import Graphics.Rendering.OpenGL.GL.GLboolean-import Graphics.Rendering.OpenGL.GL.ObjectName+import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------@@ -30,14 +33,17 @@ -------------------------------------------------------------------------------- instance ObjectName TextureObject where- isObjectName = fmap unmarshalGLboolean . glIsTexture . textureID+ isObjectName = liftIO . fmap unmarshalGLboolean . glIsTexture . textureID deleteObjectNames textureObjects =- withArrayLen (map textureID textureObjects) $+ liftIO . withArrayLen (map textureID textureObjects) $ glDeleteTextures . fromIntegral instance GeneratableObjectName TextureObject where genObjectNames n =- allocaArray n $ \buf -> do+ liftIO . allocaArray n $ \buf -> do glGenTextures (fromIntegral n) buf fmap (map TextureObject) $ peekArray n buf++instance CanBeLabeled TextureObject where+ objectLabel = objectNameLabel gl_TEXTURE . textureID
src/Graphics/Rendering/OpenGL/GL/TransformFeedback.hs view
@@ -29,6 +29,7 @@ maxTransformFeedbackSeparateComponents ) where +import Data.StateVar import Foreign.Marshal.Array import Graphics.Rendering.OpenGL.GL.ByteString import Graphics.Rendering.OpenGL.GL.DataType@@ -37,7 +38,6 @@ import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GL.Shaders.Program import Graphics.Rendering.OpenGL.GL.Shaders.Variables-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GL/VertexArrayObjects.hs view
@@ -15,12 +15,13 @@ bindVertexArrayObject ) where -import Foreign.Marshal.Array-+import Control.Monad.IO.Class+import Data.ObjectName+import Data.StateVar+import Foreign.Marshal.Array ( allocaArray, peekArray, withArrayLen )+import Graphics.Rendering.OpenGL.GL.DebugOutput import Graphics.Rendering.OpenGL.GL.GLboolean-import Graphics.Rendering.OpenGL.GL.ObjectName import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw -----------------------------------------------------------------------------@@ -29,16 +30,20 @@ deriving( Eq, Ord, Show ) instance ObjectName VertexArrayObject where- isObjectName = fmap unmarshalGLboolean . glIsVertexArray . vertexArrayID+ isObjectName =+ liftIO . fmap unmarshalGLboolean . glIsVertexArray . vertexArrayID deleteObjectNames bufferObjects =- withArrayLen (map vertexArrayID bufferObjects) $+ liftIO . withArrayLen (map vertexArrayID bufferObjects) $ glDeleteVertexArrays . fromIntegral instance GeneratableObjectName VertexArrayObject where- genObjectNames n = allocaArray n $ \buf -> do+ genObjectNames n = liftIO . allocaArray n $ \buf -> do glGenVertexArrays (fromIntegral n) buf fmap (map VertexArrayObject) $ peekArray n buf++instance CanBeLabeled VertexArrayObject where+ objectLabel = objectNameLabel gl_VERTEX_ARRAY . vertexArrayID bindVertexArrayObject :: StateVar (Maybe VertexArrayObject) bindVertexArrayObject = makeStateVar getVAO bindVAO
src/Graphics/Rendering/OpenGL/GL/VertexArrays.hs view
@@ -35,6 +35,7 @@ vertexAttribPointer, vertexAttribArray, ) where +import Data.StateVar import Foreign.Ptr ( Ptr, nullPtr ) import Graphics.Rendering.OpenGL.GL.Capability import Graphics.Rendering.OpenGL.GL.DataType@@ -42,7 +43,6 @@ import Graphics.Rendering.OpenGL.GL.PrimitiveMode import Graphics.Rendering.OpenGL.GL.PrimitiveModeInternal import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Texturing.TextureUnit import Graphics.Rendering.OpenGL.GL.VertexSpec import Graphics.Rendering.OpenGL.GLU.ErrorsInternal
src/Graphics/Rendering/OpenGL/GL/VertexSpec.hs view
@@ -58,13 +58,13 @@ TextureUnit(..), maxTextureUnit ) where +import Data.StateVar import Foreign.Marshal.Array import Foreign.Ptr import Foreign.Storable import Graphics.Rendering.OpenGL.GL.GLboolean import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.GL.Tensor import Graphics.Rendering.OpenGL.GL.Texturing.TextureUnit import Graphics.Rendering.OpenGL.GL.VertexAttributes
src/Graphics/Rendering/OpenGL/GLU/Errors.hs view
@@ -18,7 +18,7 @@ Error(..), ErrorCategory(..), errors ) where -import Graphics.Rendering.OpenGL.GL.StateVar+import Data.StateVar import Graphics.Rendering.OpenGL.GLU.ErrorsInternal --------------------------------------------------------------------------------
src/Graphics/Rendering/OpenGL/GLU/Initialization.hs view
@@ -16,11 +16,11 @@ gluVersion, gluExtensions ) where +import Data.StateVar import Foreign.C.String import Foreign.Ptr import Graphics.Rendering.GLU.Raw import Graphics.Rendering.OpenGL.GL.QueryUtils-import Graphics.Rendering.OpenGL.GL.StateVar import Graphics.Rendering.OpenGL.Raw --------------------------------------------------------------------------------