packages feed

OpenGL 2.12.0.1 → 2.13.0.0

raw patch · 18 files changed

+567/−252 lines, 18 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Graphics.Rendering.OpenGL.GL.FramebufferObjects: Renderbuffer :: RenderbufferTarget
- Graphics.Rendering.OpenGL.GL.FramebufferObjects: RenderbufferSize :: !GLsizei -> !GLsizei -> RenderbufferSize
- Graphics.Rendering.OpenGL.GL.FramebufferObjects: Samples :: GLsizei -> Samples
- Graphics.Rendering.OpenGL.GL.FramebufferObjects: bindRenderbuffer :: RenderbufferTarget -> StateVar RenderbufferObject
- Graphics.Rendering.OpenGL.GL.FramebufferObjects: data RenderbufferObject
- Graphics.Rendering.OpenGL.GL.FramebufferObjects: data RenderbufferSize
- Graphics.Rendering.OpenGL.GL.FramebufferObjects: data RenderbufferTarget
- Graphics.Rendering.OpenGL.GL.FramebufferObjects: newtype Samples
- Graphics.Rendering.OpenGL.GL.FramebufferObjects: noRenderbufferObject :: RenderbufferObject
- Graphics.Rendering.OpenGL.GL.FramebufferObjects: renderbufferStorage :: RenderbufferTarget -> PixelInternalFormat -> RenderbufferSize -> IO ()
- Graphics.Rendering.OpenGL.GL.FramebufferObjects: renderbufferStorageMultiSample :: RenderbufferTarget -> Samples -> PixelInternalFormat -> RenderbufferSize -> IO ()
- Graphics.Rendering.OpenGL.GL.Shaders.Limits: maxTessGenLevel :: GettableStateVar GLsizei
+ Graphics.Rendering.OpenGL.GL.Framebuffer: ClearColorBufferFloat :: DrawBufferIndex -> (Color4 GLfloat) -> ClearBufferCommand
+ Graphics.Rendering.OpenGL.GL.Framebuffer: ClearColorBufferInt :: DrawBufferIndex -> (Color4 GLint) -> ClearBufferCommand
+ Graphics.Rendering.OpenGL.GL.Framebuffer: ClearColorBufferUint :: DrawBufferIndex -> (Color4 GLuint) -> ClearBufferCommand
+ Graphics.Rendering.OpenGL.GL.Framebuffer: ClearDepthAndStencilBuffers :: GLfloat -> GLint -> ClearBufferCommand
+ Graphics.Rendering.OpenGL.GL.Framebuffer: ClearDepthBuffer :: GLfloat -> ClearBufferCommand
+ Graphics.Rendering.OpenGL.GL.Framebuffer: ClearStencilBuffer :: GLint -> ClearBufferCommand
+ Graphics.Rendering.OpenGL.GL.Framebuffer: clearBuffer :: ClearBufferCommand -> IO ()
+ Graphics.Rendering.OpenGL.GL.Framebuffer: clearDepthf :: StateVar GLfloat
+ Graphics.Rendering.OpenGL.GL.Framebuffer: clearNamedFramebuffer :: FramebufferObject -> ClearBufferCommand -> IO ()
+ Graphics.Rendering.OpenGL.GL.Framebuffer: data ClearBufferCommand
+ Graphics.Rendering.OpenGL.GL.Framebuffer: instance Eq ClearBufferCommand
+ Graphics.Rendering.OpenGL.GL.Framebuffer: instance Ord ClearBufferCommand
+ Graphics.Rendering.OpenGL.GL.Framebuffer: instance Show ClearBufferCommand
+ Graphics.Rendering.OpenGL.GL.Framebuffer: invalidateFramebuffer :: FramebufferTarget -> [FramebufferObjectAttachment] -> IO ()
+ Graphics.Rendering.OpenGL.GL.Framebuffer: invalidateNamedFramebufferData :: FramebufferObject -> [FramebufferObjectAttachment] -> IO ()
+ Graphics.Rendering.OpenGL.GL.Framebuffer: invalidateNamedFramebufferSubData :: FramebufferObject -> [FramebufferObjectAttachment] -> (Position, Size) -> IO ()
+ Graphics.Rendering.OpenGL.GL.Framebuffer: invalidateSubFramebuffer :: FramebufferTarget -> [FramebufferObjectAttachment] -> (Position, Size) -> IO ()
+ Graphics.Rendering.OpenGL.GL.Framebuffer: namedFramebufferDrawBuffer :: FramebufferObject -> SettableStateVar BufferMode
+ Graphics.Rendering.OpenGL.GL.Framebuffer: namedFramebufferDrawBuffers :: FramebufferObject -> SettableStateVar [BufferMode]
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: Renderbuffer :: RenderbufferTarget
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: RenderbufferSize :: !GLsizei -> !GLsizei -> RenderbufferSize
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: Samples :: GLsizei -> Samples
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: bindRenderbuffer :: RenderbufferTarget -> StateVar RenderbufferObject
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: data RenderbufferObject
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: data RenderbufferSize
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: data RenderbufferTarget
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: instance Eq RenderbufferSize
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: instance Ord RenderbufferSize
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: instance Show RenderbufferSize
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: newtype Samples
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: noRenderbufferObject :: RenderbufferObject
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: renderbufferStorage :: RenderbufferTarget -> PixelInternalFormat -> RenderbufferSize -> IO ()
+ Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects: renderbufferStorageMultiSample :: RenderbufferTarget -> Samples -> PixelInternalFormat -> RenderbufferSize -> IO ()
+ Graphics.Rendering.OpenGL.GL.PrimitiveMode: maxTessGenLevel :: GettableStateVar GLsizei
+ Graphics.Rendering.OpenGL.GL.PrimitiveMode: patchDefaultInnerLevel :: StateVar (GLfloat, GLfloat)
+ Graphics.Rendering.OpenGL.GL.PrimitiveMode: patchDefaultOuterLevel :: StateVar (GLfloat, GLfloat, GLfloat, GLfloat)
+ Graphics.Rendering.OpenGL.GL.TransformFeedback: SeparateAttribs :: TransformFeedbackBufferMode
+ Graphics.Rendering.OpenGL.GL.VertexArrays: drawArraysInstanced :: PrimitiveMode -> ArrayIndex -> NumArrayIndices -> NumInstances -> IO ()
+ Graphics.Rendering.OpenGL.GL.VertexArrays: drawArraysInstancedBaseInstance :: PrimitiveMode -> ArrayIndex -> NumArrayIndices -> NumInstances -> BaseInstance -> IO ()
+ Graphics.Rendering.OpenGL.GL.VertexArrays: drawElementsBaseVertex :: PrimitiveMode -> NumArrayIndices -> DataType -> Ptr a -> BaseVertex -> IO ()
+ Graphics.Rendering.OpenGL.GL.VertexArrays: drawElementsInstanced :: PrimitiveMode -> NumArrayIndices -> DataType -> Ptr a -> NumInstances -> IO ()
+ Graphics.Rendering.OpenGL.GL.VertexArrays: drawElementsInstancedBaseInstance :: PrimitiveMode -> NumArrayIndices -> DataType -> Ptr a -> NumInstances -> BaseInstance -> IO ()
+ Graphics.Rendering.OpenGL.GL.VertexArrays: drawElementsInstancedBaseVertex :: PrimitiveMode -> NumArrayIndices -> DataType -> Ptr a -> NumInstances -> BaseVertex -> IO ()
+ Graphics.Rendering.OpenGL.GL.VertexArrays: drawElementsInstancedBaseVertexBaseInstance :: PrimitiveMode -> NumArrayIndices -> DataType -> Ptr a -> NumInstances -> BaseVertex -> BaseInstance -> IO ()
+ Graphics.Rendering.OpenGL.GL.VertexArrays: drawRangeElementsBaseVertex :: PrimitiveMode -> (ArrayIndex, ArrayIndex) -> NumArrayIndices -> DataType -> Ptr a -> BaseVertex -> IO ()
+ Graphics.Rendering.OpenGL.GL.VertexArrays: multiDrawElementsBaseVertex :: PrimitiveMode -> Ptr NumArrayIndices -> DataType -> Ptr (Ptr a) -> NumIndexBlocks -> Ptr BaseVertex -> IO ()
+ Graphics.Rendering.OpenGL.GL.VertexArrays: type BaseInstance = GLuint
+ Graphics.Rendering.OpenGL.GL.VertexArrays: type BaseVertex = GLint
+ Graphics.Rendering.OpenGL.GL.VertexArrays: type NumInstances = GLsizei
+ Graphics.Rendering.OpenGL.GLU.Errors: ContextLost :: ErrorCategory
- Graphics.Rendering.OpenGL.GL.Framebuffer: clearColor :: StateVar (Color4 GLclampf)
+ Graphics.Rendering.OpenGL.GL.Framebuffer: clearColor :: StateVar (Color4 GLfloat)
- Graphics.Rendering.OpenGL.GL.Framebuffer: clearDepth :: StateVar GLclampd
+ Graphics.Rendering.OpenGL.GL.Framebuffer: clearDepth :: StateVar GLdouble
- Graphics.Rendering.OpenGL.GL.Framebuffer: stencilMaskSeparate :: Face -> SettableStateVar GLuint
+ Graphics.Rendering.OpenGL.GL.Framebuffer: stencilMaskSeparate :: Face -> StateVar GLuint
- Graphics.Rendering.OpenGL.GL.PerFragment: stencilFuncSeparate :: Face -> SettableStateVar (ComparisonFunction, GLint, GLuint)
+ Graphics.Rendering.OpenGL.GL.PerFragment: stencilFuncSeparate :: Face -> StateVar (ComparisonFunction, GLint, GLuint)
- Graphics.Rendering.OpenGL.GL.PerFragment: stencilOpSeparate :: Face -> SettableStateVar (StencilOp, StencilOp, StencilOp)
+ Graphics.Rendering.OpenGL.GL.PerFragment: stencilOpSeparate :: Face -> StateVar (StencilOp, StencilOp, StencilOp)

Files

OpenGL.cabal view
@@ -1,5 +1,5 @@ name: OpenGL-version: 2.12.0.1+version: 2.13.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
src/Graphics/Rendering/OpenGL/GL/BufferMode.hs view
@@ -2,7 +2,7 @@ -------------------------------------------------------------------------------- -- | -- Module      :  Graphics.Rendering.OpenGL.GL.BufferMode--- Copyright   :  (c) Sven Panne 2002-2013+-- Copyright   :  (c) Sven Panne 2002-2015 -- License     :  BSD3 -- -- Maintainer  :  Sven Panne <svenpanne@gmail.com>@@ -23,7 +23,10 @@  -------------------------------------------------------------------------------- --- | The set of color buffers which are selected for reading and writing.+-- | The set of color buffers which are selected for reading and writing. Note+-- that 'FBOColorAttachment' can only be used with framebuffer objects, while+-- the rest can only be used with the default framebuffer. Furthermore, OpenGL+-- 3.0 deprecated auxiliary buffers, so avoid 'AuxBuffer' in modern code.  data BufferMode =      NoBuffers
src/Graphics/Rendering/OpenGL/GL/DataType.hs view
@@ -22,7 +22,7 @@  -------------------------------------------------------------------------------- --- basically table 3.2 (pixel data type parameter) plus a few additions+-- basically table 8.7 (pixel data type parameter) plus a few additions data DataType =      UnsignedByte    | Byte
src/Graphics/Rendering/OpenGL/GL/Framebuffer.hs view
@@ -1,45 +1,61 @@ -------------------------------------------------------------------------------- -- | -- Module      :  Graphics.Rendering.OpenGL.GL.Framebuffer--- Copyright   :  (c) Sven Panne 2002-2013+-- Copyright   :  (c) Sven Panne 2002-2015 -- License     :  BSD3 -- -- Maintainer  :  Sven Panne <svenpanne@gmail.com> -- Stability   :  stable -- Portability :  portable ----- This module corresponds to section 4.2 (Whole Framebuffer Operations) of the--- OpenGL 2.1 specs.+-- This module corresponds to section 17.4 (Whole Framebuffer Operations) of the+-- OpenGL 4.5 specs. -- --------------------------------------------------------------------------------  module Graphics.Rendering.OpenGL.GL.Framebuffer (-   -- * Querying the Buffer Configuration-   auxBuffers, doubleBuffer, stereoBuffer,-   rgbaBits, stencilBits, depthBits, accumBits, rgbaSignedComponents,-    -- * Selecting a Buffer for Writing-   DrawBufferIndex, BufferMode(..), drawBuffer, drawBuffers, drawBufferi, maxDrawBuffers,+   BufferMode(..),+   drawBuffer, namedFramebufferDrawBuffer,+   drawBuffers, namedFramebufferDrawBuffers,+   DrawBufferIndex, drawBufferi,+   maxDrawBuffers,     -- * Fine Control of Buffer Updates-   indexMask, colorMask, colorMaski, stencilMask, stencilMaskSeparate, depthMask,+   indexMask, colorMask, colorMaski, depthMask,+   stencilMask, stencilMaskSeparate,     -- * Clearing the Buffers    ClearBuffer(..), clear,-   clearColor, clearIndex, clearStencil, clearDepth, clearAccum,+   clearColor, clearIndex, clearDepth, clearDepthf, clearStencil, clearAccum, +   ClearBufferCommand(..), clearBuffer, clearNamedFramebuffer,++   -- * Invalidating Framebuffer Contents+   invalidateSubFramebuffer, invalidateNamedFramebufferSubData,+   invalidateFramebuffer, invalidateNamedFramebufferData,+    -- * The Accumulation Buffer-   AccumOp(..), accum+   AccumOp(..), accum,++   -- * Querying the Buffer Configuration+   auxBuffers, doubleBuffer, stereoBuffer,+   rgbaBits, stencilBits, depthBits, accumBits, rgbaSignedComponents, ) where  import Control.Monad-import Data.List import Data.Maybe import Data.StateVar import Foreign.Marshal.Array+import Foreign.Marshal.Utils+import Foreign.Ptr import Graphics.Rendering.OpenGL.GL.BufferMode import Graphics.Rendering.OpenGL.GL.Capability+import Graphics.Rendering.OpenGL.GL.CoordTrans import Graphics.Rendering.OpenGL.GL.Face+import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObject+import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObjectAttachment+import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferTarget import Graphics.Rendering.OpenGL.GL.GLboolean import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GL.VertexSpec@@ -48,56 +64,6 @@  -------------------------------------------------------------------------------- --- | The implementation and context dependent number of auxiliary buffers.--auxBuffers :: GettableStateVar GLsizei-auxBuffers = makeGettableStateVar $ getSizei1 id GetAuxBuffers---- | 'True' if front and back buffers exist.--doubleBuffer :: GettableStateVar Bool-doubleBuffer =-   makeGettableStateVar $ getBoolean1 unmarshalGLboolean GetDoublebuffer---- | 'True' if left and right buffers exist.--stereoBuffer :: GettableStateVar Bool-stereoBuffer =-    makeGettableStateVar $ getBoolean1 unmarshalGLboolean GetStereo--rgbaBits :: GettableStateVar (Color4 GLsizei)-rgbaBits =-   makeGettableStateVar $-      liftM4 Color4 (getSizei1 id GetRedBits)-                    (getSizei1 id GetGreenBits)-                    (getSizei1 id GetBlueBits)-                    (getSizei1 id GetAlphaBits)--stencilBits :: GettableStateVar GLsizei-stencilBits = makeGettableStateVar $ getSizei1 id GetStencilBits--depthBits :: GettableStateVar GLsizei-depthBits = makeGettableStateVar $ getSizei1 id GetDepthBits--accumBits :: GettableStateVar (Color4 GLsizei)-accumBits =-   makeGettableStateVar $-      liftM4 Color4 (getSizei1 id GetAccumRedBits)-                    (getSizei1 id GetAccumGreenBits)-                    (getSizei1 id GetAccumBlueBits)-                    (getSizei1 id GetAccumAlphaBits)--rgbaSignedComponents :: GettableStateVar (Color4 Bool)-rgbaSignedComponents =-   makeGettableStateVar $-      getInteger4 (\r g b a -> Color4 (unmarshalGLboolean r)-                                      (unmarshalGLboolean g)-                                      (unmarshalGLboolean b)-                                      (unmarshalGLboolean a))-                  GetRGBASignedComponents----------------------------------------------------------------------------------- -- | When colors are written to the framebuffer, they are written into the color -- buffers specified by 'drawBuffer'. --@@ -114,15 +80,24 @@ -- 'BackBuffers' for double-buffered contexts.  drawBuffer :: StateVar BufferMode-drawBuffer =-   makeStateVar-      (getEnum1 unmarshalBufferMode GetDrawBuffer)-      (maybe recordInvalidValue glDrawBuffer . marshalBufferMode)+drawBuffer = makeStateVar getDrawBuffer setDrawBuffer ---------------------------------------------------------------------------------+getDrawBuffer :: IO BufferMode+getDrawBuffer = getDrawBufferi 0 -type DrawBufferIndex = GLuint+setDrawBuffer :: BufferMode -> IO ()+setDrawBuffer mode =+   withBufferModes [mode] $ \[m] ->+      glDrawBuffer m +-- | The direct-state-access version of 'drawBuffer'.++namedFramebufferDrawBuffer :: FramebufferObject -> SettableStateVar BufferMode+namedFramebufferDrawBuffer fbo =+   makeSettableStateVar $ \mode ->+      withBufferModes [mode] $ \[m] ->+         glNamedFramebufferDrawBuffer (framebufferID fbo) m+ -- | 'drawBuffers' defines the draw buffers to which all fragment colors are -- written. The draw buffers being defined correspond in order to the respective -- fragment colors. The draw buffer for fragment colors beyond those specified@@ -150,26 +125,44 @@ getDrawBuffers :: IO [BufferMode] getDrawBuffers = do    n <- get maxDrawBuffers-   mapM (getEnum1 unmarshalBufferMode . GetDrawBufferN) [ 0 .. n ]+   mapM getDrawBufferi [ 0 .. n-1 ]  setDrawBuffers :: [BufferMode] -> IO ()-setDrawBuffers modes = do-   let ms = map marshalBufferMode modes-   if all isJust ms-      then withArray (map fromJust ms) $-              glDrawBuffers (genericLength ms)-      else recordInvalidValue+setDrawBuffers modes =+   withBufferModes modes $ \ms ->+      withArrayLen ms $ \len ->+         glDrawBuffers (fromIntegral len) --- | 'drawBufferi' is a fast query function. For indices in the range 0..maxDrawBuffers it's results--- are the same as selection the index from the list returned by drawBuffers. Though this function--- only uses one gl-function call instead of maxDrawBuffers + 1.-drawBufferi :: DrawBufferIndex -> GettableStateVar BufferMode-drawBufferi ind = makeGettableStateVar-    (getEnum1 unmarshalBufferMode . GetDrawBufferN $ fromIntegral ind)+-- | The direct-state-access version of 'drawBuffers'. +namedFramebufferDrawBuffers :: FramebufferObject -> SettableStateVar [BufferMode]+namedFramebufferDrawBuffers fbo =+   makeSettableStateVar $ \modes ->+      withBufferModes modes $ \ms ->+         withArrayLen ms $ \len ->+            glNamedFramebufferDrawBuffers (framebufferID fbo) (fromIntegral len) ---------------------------------------------------------------------------------+withBufferModes :: [BufferMode] -> ([GLenum] -> IO ()) -> IO ()+withBufferModes modes success+   | all isJust ms = success (catMaybes ms)+   | otherwise = recordInvalidValue+   where ms = map marshalBufferMode modes +-- | The index of the draw buffer.++type DrawBufferIndex = GLuint++-- | 'drawBufferi' is a fast query function. For indices in the range+-- 0..'maxDrawBuffers'-1 its results is the same as selecting the corresponding+-- element from the list returned by 'drawBuffers', but this function uses only+-- one GL function call instead of 'maxDrawBuffers' ones.++drawBufferi :: DrawBufferIndex -> GettableStateVar BufferMode+drawBufferi = makeGettableStateVar . getDrawBufferi . fromIntegral++getDrawBufferi :: GLsizei -> IO BufferMode+getDrawBufferi = getEnum1 unmarshalBufferMode . GetDrawBufferN+ -- | Contains the maximum number of buffers that can activated via 'drawBuffers' -- or which can be simultaneously written into from within a fragment shader -- using the special output variable array @gl_FragData@. This constant@@ -183,7 +176,7 @@  -- | Controls the writing of individual bits in the color index buffers. The -- least significant /n/ bits of its value, where /n/ is the number of bits in a--- color index buffer, specify a mask.  Where a 1 appears in the mask, it is+-- color index buffer, specify a mask. Where a 1 appears in the mask, it is -- possible to write to the corresponding bit in the color index buffer (or -- buffers). Where a 0 appears, the corresponding bit is write-protected. --@@ -195,8 +188,6 @@ indexMask =    makeStateVar (getInteger1 fromIntegral GetIndexWritemask) glIndexMask ---------------------------------------------------------------------------------- -- | Controls whether the individual color components in the framebuffer can or -- cannot be written. If the red flag is 'Disabled', for example, no change is -- made to the red component of any pixel in any of the color buffers,@@ -214,25 +205,28 @@                                        (unmarshalCapability g)                                        (unmarshalCapability b)                                        (unmarshalCapability a))-                                      GetColorWritemask)+                                       GetColorWritemask)       (\(Color4 r g b a) -> glColorMask (marshalCapability r)                                         (marshalCapability g)                                         (marshalCapability b)                                         (marshalCapability a))--- | 'colorMaski' is a version of 'colorMask' that only applies to the specified drawbuffer++-- | 'colorMaski' is a version of 'colorMask' that only applies to the specified+-- draw buffer.+ colorMaski :: DrawBufferIndex -> StateVar (Color4 Capability)-colorMaski x = makeStateVar+colorMaski idx =+   makeStateVar       (getBoolean4i (\r g b a -> Color4 (unmarshalCapability r)-                                       (unmarshalCapability g)-                                       (unmarshalCapability b)-                                       (unmarshalCapability a))-                    GetColorWritemask x)-      (\(Color4 r g b a) -> glColorMaski (x) (marshalCapability r)-                                        (marshalCapability g)-                                        (marshalCapability b)-                                        (marshalCapability a))----------------------------------------------------------------------------------+                                        (unmarshalCapability g)+                                        (unmarshalCapability b)+                                        (unmarshalCapability a))+                    GetColorWritemask idx)+      (\(Color4 r g b a) -> glColorMaski idx+                                         (marshalCapability r)+                                         (marshalCapability g)+                                         (marshalCapability b)+                                         (marshalCapability a))  -- | Controls whether the depth buffer is enabled for writing. The initial state -- is 'Enabled'.@@ -241,23 +235,27 @@ depthMask = makeStateVar (getBoolean1 unmarshalCapability GetDepthWritemask)                          (glDepthMask . marshalCapability) ---------------------------------------------------------------------------------- -- | Controls the writing of individual bits in the stencil planes. The least -- significant /n/ bits of its value, where /n/ is the number of bits in the--- stencil buffer, specify a mask. Where a 1 appears in the mask, it is--- possible to write to the corresponding bit in the stencil buffer. Where a 0--- appears, the corresponding bit is write-protected.--- Initially, all bits are enabled for writing.+-- stencil buffer, specify a mask. Where a 1 appears in the mask, it is possible+-- to write to the corresponding bit in the stencil buffer. Where a 0 appears,+-- the corresponding bit is write-protected. Initially, all bits are enabled for+-- writing.  stencilMask :: StateVar GLuint stencilMask =-   makeStateVar (getInteger1 fromIntegral GetStencilWritemask) glStencilMask+   makeStateVar (get (stencilMaskSeparate Front)) glStencilMask -stencilMaskSeparate :: Face -> SettableStateVar GLuint+-- | A per-face version of 'stencilMask'.++stencilMaskSeparate :: Face -> StateVar GLuint stencilMaskSeparate face =-   makeSettableStateVar $-      glStencilMaskSeparate (marshalFace face)+   makeStateVar+      (case face of+          Front -> getInteger1 fromIntegral GetStencilWritemask+          Back -> getInteger1 fromIntegral GetStencilBackWritemask+          FrontAndBack -> do recordInvalidEnum; return 0)+      (glStencilMaskSeparate (marshalFace face))  -------------------------------------------------------------------------------- @@ -277,8 +275,6 @@    StencilBuffer -> gl_STENCIL_BUFFER_BIT    DepthBuffer -> gl_DEPTH_BUFFER_BIT ---------------------------------------------------------------------------------- -- | Set the bitplane area of the window to values previously selected by -- 'clearColor', 'clearIndex', 'clearDepth', 'clearStencil', and 'clearAccum'. -- Multiple color buffers can be cleared simultaneously by selecting more than@@ -299,18 +295,13 @@ clear :: [ClearBuffer] -> IO () clear = glClear . sum . map marshalClearBuffer ---------------------------------------------------------------------------------- -- | Controls the red, green, blue, and alpha values used by 'clear' to clear--- the color buffers. Values written into 'clearColor' are clamped to the range--- [0, 1]. Initially, all values are 0.+-- the color buffers. Initially, all values are 0. -clearColor :: StateVar (Color4 GLclampf)-clearColor = makeStateVar (getClampf4 Color4 GetColorClearValue)+clearColor :: StateVar (Color4 GLfloat)+clearColor = makeStateVar (getFloat4 Color4 GetColorClearValue)                           (\(Color4 r g b a) -> glClearColor r g b a) ---------------------------------------------------------------------------------- -- | Controls the index /c/ used by 'clear' to clear the color index buffers. -- /c/ is not clamped. Rather, /c/ is converted to a fixed-point value with -- unspecified precision to the right of the binary point. The integer part of@@ -321,16 +312,16 @@ clearIndex = makeStateVar (getFloat1 Index1 GetIndexClearValue)                           (\(Index1 i) -> glClearIndex i) ---------------------------------------------------------------------------------+-- | Controls the depth value used by 'clear' to clear the depth buffer. The+-- initial value is 1. --- | Controls the depth value used by 'clear' to clear the depth buffer. Values--- written into 'clearDepth' are clamped to the range [0, 1]. The initial value--- is 1.+clearDepth :: StateVar GLdouble+clearDepth = makeStateVar (getDouble1 id GetDepthClearValue) glClearDepth -clearDepth :: StateVar GLclampd-clearDepth = makeStateVar (getClampd1 id GetDepthClearValue) glClearDepth+-- | A variant of 'clearDepth' with a 'GLfloat' argument. ---------------------------------------------------------------------------------+clearDepthf :: StateVar GLfloat+clearDepthf = makeStateVar (getFloat1 id GetDepthClearValue) glClearDepthf  -- | Controls the value /s/ used by 'clear' to clear the stencil buffer. /s/ is -- masked with 2^/m/-1, where /m/ is the number of bits in the stencil buffer.@@ -339,8 +330,6 @@ clearStencil :: StateVar GLint clearStencil = makeStateVar (getInteger1 id GetStencilClearValue) glClearStencil ---------------------------------------------------------------------------------- -- | Controls the red, green, blue, and alpha values used by 'clear' to clear -- the accumulation buffer. Values written into 'clearAccum' are clamped to the -- range [-1, 1]. The initial values are all 0.@@ -349,6 +338,145 @@ clearAccum =    makeStateVar (getFloat4 Color4 GetAccumClearValue)                 (\(Color4 r g b a) -> glClearAccum r g b a)++-- | Describes which buffer(s) to clear and the value to use.++data ClearBufferCommand+   = ClearColorBufferInt DrawBufferIndex (Color4 GLint)+   -- ^ Clear the signed integer color buffer(s) at the given index.+   | ClearColorBufferFloat DrawBufferIndex (Color4 GLfloat)+   -- ^ Clear the fixed- or floating-point color buffer(s) at the given index.+   | ClearColorBufferUint DrawBufferIndex (Color4 GLuint)+   -- ^ Clear the unsigned color buffer(s) at the given index.+   | ClearDepthBuffer GLfloat+   -- ^ Clear the depth buffer.+   | ClearStencilBuffer GLint+   -- ^ Clear the stencil buffer.+   | ClearDepthAndStencilBuffers GLfloat GLint+   -- ^ Clear the depth buffer and the stencil buffer.+   deriving ( Eq, Ord, Show )++-- | Clear the given buffer(s).++clearBuffer :: ClearBufferCommand -> IO ()+clearBuffer cmd = case cmd of+   ClearColorBufferInt i c ->+      with c $ glClearBufferiv gl_COLOR (fromIntegral i) . castPtr+   ClearColorBufferFloat i c ->+      with c $ glClearBufferfv gl_COLOR (fromIntegral i) . castPtr+   ClearColorBufferUint i c ->+      with c $ glClearBufferuiv gl_COLOR (fromIntegral i) . castPtr+   ClearDepthBuffer d ->+      with d $ glClearBufferfv gl_DEPTH 0+   ClearStencilBuffer s ->+      with s $ glClearBufferiv gl_STENCIL 0+   ClearDepthAndStencilBuffers d s ->+      glClearBufferfi gl_DEPTH_STENCIL 0 d s++-- | The direct-state-access version of 'clearBuffer'.++clearNamedFramebuffer :: FramebufferObject -> ClearBufferCommand -> IO ()+clearNamedFramebuffer fbo cmd = case cmd of+   ClearColorBufferInt i c ->+      with c $ glClearNamedFramebufferiv f gl_COLOR (fromIntegral i) . castPtr+   ClearColorBufferFloat i c ->+      with c $ glClearNamedFramebufferfv f gl_COLOR (fromIntegral i) . castPtr+   ClearColorBufferUint i c ->+      with c $ glClearNamedFramebufferuiv f gl_COLOR (fromIntegral i) . castPtr+   ClearDepthBuffer d ->+      with d $ glClearNamedFramebufferfv f gl_DEPTH 0+   ClearStencilBuffer s ->+      with s $ glClearNamedFramebufferiv f gl_STENCIL 0+   ClearDepthAndStencilBuffers d s ->+      glClearNamedFramebufferfi f gl_DEPTH_STENCIL d s+   where f = framebufferID fbo++--------------------------------------------------------------------------------++-- | Invalidate a region of the attachments bound to the given target.++invalidateSubFramebuffer :: FramebufferTarget -> [FramebufferObjectAttachment] -> (Position, Size) -> IO ()+invalidateSubFramebuffer target attachments (Position x y, Size w h) =+   withAttachments attachments $ \numAttachments atts ->+      glInvalidateSubFramebuffer (marshalFramebufferTarget target) numAttachments atts x y w h++-- | The direct-state-access version of 'invalidateSubFramebuffer'.++invalidateNamedFramebufferSubData :: FramebufferObject -> [FramebufferObjectAttachment] -> (Position, Size) -> IO ()+invalidateNamedFramebufferSubData fbo attachments (Position x y, Size w h) =+   withAttachments attachments $ \numAttachments atts ->+      glInvalidateNamedFramebufferSubData (framebufferID fbo) numAttachments atts x y w h++-- | A version of 'invalidateSubFramebuffer' affecting the whole viewport.++invalidateFramebuffer :: FramebufferTarget -> [FramebufferObjectAttachment] -> IO ()+invalidateFramebuffer target attachments =+   withAttachments attachments $+      glInvalidateFramebuffer (marshalFramebufferTarget target)++-- | The direct-state-access version of 'invalidateFramebuffer'.++invalidateNamedFramebufferData :: FramebufferObject -> [FramebufferObjectAttachment] -> IO ()+invalidateNamedFramebufferData fbo attachments =+   withAttachments attachments $+      glInvalidateNamedFramebufferData (framebufferID fbo)++withAttachments :: [FramebufferObjectAttachment] -> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()+withAttachments attachments success+   | all isJust atts = withArrayLen (catMaybes atts) $ \len buf ->+                          success (fromIntegral len) buf+   | otherwise = recordInvalidEnum+   where atts = map marshalFramebufferObjectAttachment attachments++--------------------------------------------------------------------------------++-- | The implementation and context dependent number of auxiliary buffers.++auxBuffers :: GettableStateVar GLsizei+auxBuffers = makeGettableStateVar $ getSizei1 id GetAuxBuffers++-- | 'True' if front and back buffers exist.++doubleBuffer :: GettableStateVar Bool+doubleBuffer =+   makeGettableStateVar $ getBoolean1 unmarshalGLboolean GetDoublebuffer++-- | 'True' if left and right buffers exist.++stereoBuffer :: GettableStateVar Bool+stereoBuffer =+    makeGettableStateVar $ getBoolean1 unmarshalGLboolean GetStereo++rgbaBits :: GettableStateVar (Color4 GLsizei)+rgbaBits =+   makeGettableStateVar $+      liftM4 Color4 (getSizei1 id GetRedBits)+                    (getSizei1 id GetGreenBits)+                    (getSizei1 id GetBlueBits)+                    (getSizei1 id GetAlphaBits)++stencilBits :: GettableStateVar GLsizei+stencilBits = makeGettableStateVar $ getSizei1 id GetStencilBits++depthBits :: GettableStateVar GLsizei+depthBits = makeGettableStateVar $ getSizei1 id GetDepthBits++accumBits :: GettableStateVar (Color4 GLsizei)+accumBits =+   makeGettableStateVar $+      liftM4 Color4 (getSizei1 id GetAccumRedBits)+                    (getSizei1 id GetAccumGreenBits)+                    (getSizei1 id GetAccumBlueBits)+                    (getSizei1 id GetAccumAlphaBits)++rgbaSignedComponents :: GettableStateVar (Color4 Bool)+rgbaSignedComponents =+   makeGettableStateVar $+      getInteger4 (\r g b a -> Color4 (unmarshalGLboolean r)+                                      (unmarshalGLboolean g)+                                      (unmarshalGLboolean b)+                                      (unmarshalGLboolean a))+                  GetRGBASignedComponents  -------------------------------------------------------------------------------- 
src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObject.hs view
@@ -2,14 +2,14 @@ -------------------------------------------------------------------------------- -- | -- Module      :  Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObject--- Copyright   :  (c) Sven Panne 2013+-- Copyright   :  (c) Sven Panne 2013-2015 -- License     :  BSD3 --  -- Maintainer  :  Sven Panne <svenpanne@gmail.com> -- Stability   :  stable -- Portability :  portable ----- This is a purely internal module for handling FrameBufferObjects.+-- This is a purely internal module for handling FramebufferObjects. -- -------------------------------------------------------------------------------- 
src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferObjectAttachment.hs view
@@ -2,14 +2,14 @@ -------------------------------------------------------------------------------- -- | -- Module      :  Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObjectAttachment--- Copyright   :  (c) Sven Panne 2013+-- Copyright   :  (c) Sven Panne 2013-2015 -- License     :  BSD3 -- -- Maintainer  :  Sven Panne <svenpanne@gmail.com> -- Stability   :  stable -- Portability :  portable ----- This is a purely internal module for marshaling FrameBufferObjectAttachments.+-- This is a purely internal module for marshaling FramebufferObjectAttachments. -- -------------------------------------------------------------------------------- 
src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/FramebufferTarget.hs view
@@ -2,14 +2,14 @@ -------------------------------------------------------------------------------- -- | -- Module      :  Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferTarget--- Copyright   :  (c) Sven Panne 2013+-- Copyright   :  (c) Sven Panne 2013-2015 -- License     :  BSD3 -- -- Maintainer  :  Sven Panne <svenpanne@gmail.com> -- Stability   :  stable -- Portability :  portable ----- This is a purely internal module for marshaling FrameBufferTargets.+-- This is a purely internal module for marshaling FramebufferTargets. -- -------------------------------------------------------------------------------- 
src/Graphics/Rendering/OpenGL/GL/FramebufferObjects/RenderbufferObjects.hs view
@@ -1,4 +1,3 @@-{-# OPTIONS_HADDOCK hide #-} ----------------------------------------------------------------------------- -- | -- Module      :  Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferObjects
src/Graphics/Rendering/OpenGL/GL/IOState.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# OPTIONS_HADDOCK hide #-} -------------------------------------------------------------------------------- -- |@@ -18,7 +19,9 @@    IOState(..), getIOState, peekIOState, evalIOState, nTimes ) where +#if !MIN_VERSION_base(4,8,0) import Control.Applicative ( Applicative(..) )+#endif import Control.Monad ( ap, liftM, replicateM ) import Foreign.Ptr ( Ptr, plusPtr ) import Foreign.Storable ( Storable(sizeOf,peek) )
src/Graphics/Rendering/OpenGL/GL/PerFragment.hs view
@@ -1,7 +1,7 @@ -------------------------------------------------------------------------------- -- | -- Module      :  Graphics.Rendering.OpenGL.GL.PerFragment--- Copyright   :  (c) Sven Panne 2002-2013+-- Copyright   :  (c) Sven Panne 2002-2015 -- License     :  BSD3 -- -- Maintainer  :  Sven Panne <svenpanne@gmail.com>@@ -59,6 +59,7 @@ import Graphics.Rendering.OpenGL.GL.GLboolean import Graphics.Rendering.OpenGL.GL.QueryUtils import Graphics.Rendering.OpenGL.GL.VertexSpec+import Graphics.Rendering.OpenGL.GLU.ErrorsInternal import Graphics.Rendering.OpenGL.Raw  --------------------------------------------------------------------------------@@ -126,16 +127,28 @@ stencilFunc :: StateVar (ComparisonFunction, GLint, GLuint) stencilFunc =    makeStateVar-      (liftM3 (,,) (getEnum1 unmarshalComparisonFunction GetStencilFunc)-                   (getInteger1 id GetStencilRef)-                   (getInteger1 fromIntegral GetStencilValueMask))+      (get (stencilFuncSeparate Front))       (\(func, ref, mask) ->          glStencilFunc (marshalComparisonFunction func) ref mask) -stencilFuncSeparate :: Face -> SettableStateVar (ComparisonFunction, GLint, GLuint)+stencilFuncSeparate :: Face -> StateVar (ComparisonFunction, GLint, GLuint) stencilFuncSeparate face =-   makeSettableStateVar $ \(func, ref, mask) ->-      glStencilFuncSeparate (marshalFace face) (marshalComparisonFunction func) ref mask+   makeStateVar+      (case face of+          Front -> getStencilFunc GetStencilFunc+                                  GetStencilRef+                                  GetStencilValueMask+          Back -> getStencilFunc GetStencilBackFunc+                                 GetStencilBackRef+                                 GetStencilBackValueMask+          FrontAndBack -> do recordInvalidEnum; return (Never, 0, 0))+      (\(func, ref, mask) ->+         glStencilFuncSeparate (marshalFace face)+                               (marshalComparisonFunction func) ref mask)+   where getStencilFunc func ref mask =+            liftM3 (,,) (getEnum1 unmarshalComparisonFunction func)+                        (getInteger1 id ref)+                        (getInteger1 fromIntegral mask)  -------------------------------------------------------------------------------- @@ -178,20 +191,32 @@ stencilOp :: StateVar (StencilOp, StencilOp, StencilOp) stencilOp =    makeStateVar-      (liftM3 (,,) (getEnum1 unmarshalStencilOp GetStencilFail)-                   (getEnum1 unmarshalStencilOp GetStencilPassDepthFail)-                   (getEnum1 unmarshalStencilOp GetStencilPassDepthPass))+      (get (stencilOpSeparate Front))       (\(sf, spdf, spdp) -> glStencilOp (marshalStencilOp sf)                                         (marshalStencilOp spdf)                                         (marshalStencilOp spdp)) -stencilOpSeparate :: Face -> SettableStateVar (StencilOp, StencilOp, StencilOp)+stencilOpSeparate :: Face -> StateVar (StencilOp, StencilOp, StencilOp) stencilOpSeparate face =-   makeSettableStateVar $ \(sf, spdf, spdp) ->-      glStencilOpSeparate (marshalFace face)-                          (marshalStencilOp sf)-                          (marshalStencilOp spdf)-                          (marshalStencilOp spdp)+   makeStateVar+      (case face of+          Front -> getStencilOp GetStencilFail+                                GetStencilPassDepthFail+                                GetStencilPassDepthPass+          Back ->  getStencilOp GetStencilBackFail+                                GetStencilBackPassDepthFail+                                GetStencilBackPassDepthPass+          FrontAndBack -> do recordInvalidEnum+                             return (OpZero, OpZero, OpZero))+      (\(sf, spdf, spdp) -> glStencilOpSeparate (marshalFace face)+                                                (marshalStencilOp sf)+                                                (marshalStencilOp spdf)+                                                (marshalStencilOp spdp))+   where getStencilOp sf spdf spdp =+            (liftM3 (,,) (getEnum1 unmarshalStencilOp sf)+                         (getEnum1 unmarshalStencilOp spdf)+                         (getEnum1 unmarshalStencilOp spdp))+  -------------------------------------------------------------------------------- 
src/Graphics/Rendering/OpenGL/GL/PrimitiveMode.hs view
@@ -17,10 +17,13 @@    -- * Primitive Modes    PrimitiveMode(..),    -- * Patches (Tessellation)-   patchVertices, maxPatchVertices+   patchVertices, maxPatchVertices,+   patchDefaultOuterLevel, patchDefaultInnerLevel, maxTessGenLevel ) where  import Data.StateVar+import Foreign.Marshal.Array+import Graphics.Rendering.OpenGL.GL.PeekPoke import Graphics.Rendering.OpenGL.GL.QueryUtils.PName import Graphics.Rendering.OpenGL.Raw @@ -84,10 +87,37 @@  patchVertices :: StateVar GLsizei patchVertices =-  makeStateVar (getSizei1 id GetMaxPatchVertices)+  makeStateVar (getSizei1 id GetPatchVertices)                (glPatchParameteri gl_PATCH_VERTICES . fromIntegral)  -- | Contains the maximumum number of vertices in a single patch.  maxPatchVertices :: GettableStateVar GLsizei maxPatchVertices = makeGettableStateVar $ getSizei1 id GetMaxPatchVertices++-- | Contains the four default outer tessellation levels to be used when no+-- tessellation control shader is present.++patchDefaultOuterLevel :: StateVar (GLfloat, GLfloat, GLfloat, GLfloat)+patchDefaultOuterLevel =+  makeStateVar+    (getFloat4 (,,,) GetPatchDefaultOuterLevel)+    (\(l0, l1, l2, l3) -> allocaArray 4 $ \ptr -> do+                            poke4 ptr l0 l1 l2 l3+                            glPatchParameterfv gl_PATCH_DEFAULT_OUTER_LEVEL ptr)++-- | Contains the two default inner tessellation levels to be used when no+-- tessellation control shader is present.++patchDefaultInnerLevel :: StateVar (GLfloat, GLfloat)+patchDefaultInnerLevel =+  makeStateVar+    (getFloat2 (,) GetPatchDefaultInnerLevel)+    (\(l0, l1) -> allocaArray 2 $ \ptr -> do+                    poke2 ptr l0 l1+                    glPatchParameterfv gl_PATCH_DEFAULT_INNER_LEVEL ptr)++-- | Contains the maximum allowed tessellation level.++maxTessGenLevel :: GettableStateVar GLsizei+maxTessGenLevel = makeGettableStateVar $ getSizei1 id GetMaxTessGenLevel
src/Graphics/Rendering/OpenGL/GL/QueryUtils/PName.hs view
@@ -479,6 +479,7 @@     | GetIndexWritemask     -- ^ int     | GetDepthWritemask     -- ^ bool     | GetStencilWritemask   -- ^ bool+    | GetStencilBackWritemask   -- ^ bool     | GetStencilClearValue  -- ^ int     -- Program     | GetCurrentProgram     -- ^ int@@ -495,11 +496,17 @@     | GetSampleCoverageInvert       -- ^ bool     | GetAlphaTestFunc              -- ^ enum     | GetStencilFunc                -- ^ enum+    | GetStencilBackFunc            -- ^ enum     | GetStencilValueMask           -- ^ int+    | GetStencilBackValueMask       -- ^ int     | GetStencilRef                 -- ^ int+    | GetStencilBackRef             -- ^ int     | GetStencilFail                -- ^ enum+    | GetStencilBackFail            -- ^ enum     | GetStencilPassDepthFail       -- ^ enum+    | GetStencilBackPassDepthFail   -- ^ enum     | GetStencilPassDepthPass       -- ^ enum+    | GetStencilBackPassDepthPass   -- ^ enum     | GetActiveStencilFace          -- ^ enum     | GetLogicOpMode                -- ^ enum     | GetBlendDst                   -- ^ enum@@ -749,6 +756,7 @@         GetIndexWritemask -> Just gl_INDEX_WRITEMASK         GetDepthWritemask -> Just gl_DEPTH_WRITEMASK         GetStencilWritemask -> Just gl_STENCIL_WRITEMASK+        GetStencilBackWritemask -> Just gl_STENCIL_BACK_WRITEMASK         GetStencilClearValue -> Just gl_STENCIL_CLEAR_VALUE         -- Program         GetCurrentProgram -> Just gl_CURRENT_PROGRAM@@ -766,11 +774,17 @@         GetSampleCoverageInvert -> Just gl_SAMPLE_COVERAGE_INVERT         GetAlphaTestFunc -> Just gl_ALPHA_TEST_FUNC         GetStencilFunc -> Just gl_STENCIL_FUNC+        GetStencilBackFunc -> Just gl_STENCIL_BACK_FUNC         GetStencilValueMask -> Just gl_STENCIL_VALUE_MASK+        GetStencilBackValueMask -> Just gl_STENCIL_BACK_VALUE_MASK         GetStencilRef -> Just gl_STENCIL_REF+        GetStencilBackRef -> Just gl_STENCIL_BACK_REF         GetStencilFail -> Just gl_STENCIL_FAIL+        GetStencilBackFail -> Just gl_STENCIL_BACK_FAIL         GetStencilPassDepthFail -> Just gl_STENCIL_PASS_DEPTH_FAIL+        GetStencilBackPassDepthFail -> Just gl_STENCIL_BACK_PASS_DEPTH_FAIL         GetStencilPassDepthPass -> Just gl_STENCIL_PASS_DEPTH_PASS+        GetStencilBackPassDepthPass -> Just gl_STENCIL_BACK_PASS_DEPTH_PASS         GetActiveStencilFace -> Just gl_ACTIVE_STENCIL_FACE_EXT         GetLogicOpMode -> Just gl_LOGIC_OP_MODE         GetBlendDst -> Just gl_BLEND_DST@@ -1046,6 +1060,8 @@     | GetSmoothLineWidthRange   -- ^ float     -- PerFragment     | GetDepthBounds            -- ^ clampd+    -- Tessellation+    | GetPatchDefaultInnerLevel -- ^ float  instance GetPName2F PName2F where @@ -1063,6 +1079,8 @@         GetSmoothLineWidthRange -> Just gl_SMOOTH_LINE_WIDTH_RANGE         -- PerFragment         GetDepthBounds -> Just gl_DEPTH_BOUNDS_EXT+        -- Tessellation+        GetPatchDefaultInnerLevel -> Just gl_PATCH_DEFAULT_INNER_LEVEL  ----------------------------------------------------------------------------- @@ -1134,7 +1152,10 @@     | GetCurrentRasterSecondaryColor    -- ^ float     | GetCurrentRasterTextureCoords     -- ^ float     | GetCurrentRasterPosition          -- ^ float+    -- PerFragment     | GetBlendColor                     -- ^ clampf+    -- Tessellation+    | GetPatchDefaultOuterLevel         -- ^ float  instance GetPName4F PName4F where @@ -1152,15 +1173,15 @@         -- Framebuffer         GetColorClearValue -> Just gl_COLOR_CLEAR_VALUE         GetAccumClearValue -> Just gl_ACCUM_CLEAR_VALUE-        -- Rasterpos+        -- RasterPos         GetCurrentRasterColor -> Just gl_CURRENT_RASTER_COLOR         GetCurrentRasterSecondaryColor -> Just gl_CURRENT_RASTER_SECONDARY_COLOR         GetCurrentRasterTextureCoords -> Just gl_CURRENT_RASTER_TEXTURE_COORDS         GetCurrentRasterPosition -> Just gl_CURRENT_RASTER_POSITION         -- PerFragment         GetBlendColor -> Just gl_BLEND_COLOR--+        -- Tessellation+        GetPatchDefaultOuterLevel -> Just gl_PATCH_DEFAULT_OUTER_LEVEL  -- 0x3000 through 0x3FFF are reserved for clip planes clipPlaneIndexToEnum :: GLsizei -> Maybe GLenum
src/Graphics/Rendering/OpenGL/GL/Shaders/Limits.hs view
@@ -15,8 +15,7 @@ module Graphics.Rendering.OpenGL.GL.Shaders.Limits (    maxVertexTextureImageUnits, maxTextureImageUnits,    maxCombinedTextureImageUnits, maxTextureCoords, maxVertexUniformComponents,-   maxFragmentUniformComponents, maxVertexAttribs, maxVaryingFloats,-   maxTessGenLevel+   maxFragmentUniformComponents, maxVertexAttribs, maxVaryingFloats ) where  import Data.StateVar@@ -76,11 +75,6 @@  maxVaryingFloats :: GettableStateVar GLsizei maxVaryingFloats = getLimit GetMaxVaryingFloats---- | Contains the maximum allowed tessellation level.--maxTessGenLevel :: GettableStateVar GLsizei-maxTessGenLevel = getLimit GetMaxTessGenLevel  getLimit :: PName1I -> GettableStateVar GLsizei getLimit = makeGettableStateVar . getSizei1 id
src/Graphics/Rendering/OpenGL/GL/Tensor.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable, CPP #-} -------------------------------------------------------------------------------- -- | -- Module      :  Graphics.Rendering.OpenGL.GL.Tensor@@ -19,9 +19,12 @@    Vector1(..), Vector2(..), Vector3(..), Vector4(..) ) where +#if !MIN_VERSION_base(4,8,0) import Control.Applicative ( Applicative(..) )+import Data.Foldable ( Foldable(..) )+#endif import Control.Monad ( ap )-import Data.Foldable ( Foldable(..), foldlM )+import Data.Foldable ( foldlM ) import Data.Ix ( Ix ) import Data.Traversable ( Traversable(..), mapAccumL ) import Data.Typeable ( Typeable )
src/Graphics/Rendering/OpenGL/GL/TransformFeedback.hs view
@@ -52,18 +52,21 @@  data TransformFeedbackBufferMode =      InterleavedAttribs+   | SeparateAttribs    | SeperateAttribs    deriving ( Eq, Ord, Show )+{-# DEPRECATED SeperateAttribs "Use 'SeparateAttribs' instead." #-}  marshalTransformFeedbackBufferMode :: TransformFeedbackBufferMode -> GLenum marshalTransformFeedbackBufferMode x = case x of    InterleavedAttribs -> gl_INTERLEAVED_ATTRIBS+   SeparateAttribs -> gl_SEPARATE_ATTRIBS    SeperateAttribs -> gl_SEPARATE_ATTRIBS  unmarshalTransformFeedbackBufferMode :: GLenum -> TransformFeedbackBufferMode unmarshalTransformFeedbackBufferMode x    | x == gl_INTERLEAVED_ATTRIBS = InterleavedAttribs-   | x == gl_SEPARATE_ATTRIBS = SeperateAttribs+   | x == gl_SEPARATE_ATTRIBS = SeparateAttribs    | otherwise = error $ "unmarshalTransformFeedbackBufferMode: illegal value " ++ show x  -- limits
src/Graphics/Rendering/OpenGL/GL/VertexArrays.hs view
@@ -26,9 +26,21 @@    clientState, clientActiveTexture,     -- * Dereferencing and Rendering-   ArrayIndex, NumArrayIndices, NumIndexBlocks,-   arrayElement, drawArrays, multiDrawArrays, drawElements, multiDrawElements,-   drawRangeElements, maxElementsVertices, maxElementsIndices, lockArrays,+   ArrayIndex, NumArrayIndices, NumIndexBlocks, NumInstances,+   BaseInstance, BaseVertex,+   arrayElement,++   drawArrays, drawArraysInstancedBaseInstance, drawArraysInstanced,+   multiDrawArrays,++   drawElements, drawElementsInstancedBaseInstance, drawElementsInstanced,+   multiDrawElements, drawRangeElements,++   drawElementsBaseVertex, drawRangeElementsBaseVertex,+   drawElementsInstancedBaseVertex, drawElementsInstancedBaseVertexBaseInstance,+   multiDrawElementsBaseVertex,++   maxElementsVertices, maxElementsIndices, lockArrays,    primitiveRestartIndex, primitiveRestartIndexNV,     -- * Generic Vertex Attribute Arrays@@ -322,6 +334,16 @@  type NumIndexBlocks = GLsizei +type NumInstances = GLsizei++type BaseInstance = GLuint++type BaseVertex = GLint++-- TODO: The ranges (ArrayIndex, ArrayIndex) below should actually use GLuint:+-- type RangeStart = GLuint+-- type RangeEnd = GLuint+ --------------------------------------------------------------------------------  arrayElement :: ArrayIndex -> IO ()@@ -330,26 +352,44 @@ drawArrays :: PrimitiveMode -> ArrayIndex -> NumArrayIndices -> IO () drawArrays = glDrawArrays . marshalPrimitiveMode -multiDrawArrays ::-      PrimitiveMode -> Ptr ArrayIndex -> Ptr NumArrayIndices -> NumIndexBlocks-   -> IO ()+drawArraysInstancedBaseInstance :: PrimitiveMode -> ArrayIndex -> NumArrayIndices -> NumInstances -> BaseInstance -> IO ()+drawArraysInstancedBaseInstance = glDrawArraysInstancedBaseInstance . marshalPrimitiveMode++drawArraysInstanced :: PrimitiveMode -> ArrayIndex -> NumArrayIndices -> NumInstances -> IO ()+drawArraysInstanced = glDrawArraysInstanced . marshalPrimitiveMode++multiDrawArrays :: PrimitiveMode -> Ptr ArrayIndex -> Ptr NumArrayIndices -> NumIndexBlocks -> IO () multiDrawArrays = glMultiDrawArrays . marshalPrimitiveMode  drawElements :: PrimitiveMode -> NumArrayIndices -> DataType -> Ptr a -> IO () drawElements m c = glDrawElements (marshalPrimitiveMode m) c . marshalDataType -multiDrawElements ::-      PrimitiveMode -> Ptr NumArrayIndices -> DataType -> Ptr (Ptr a)-   -> NumIndexBlocks -> IO ()-multiDrawElements m c =-   glMultiDrawElements (marshalPrimitiveMode m) c . marshalDataType+drawElementsInstancedBaseInstance :: PrimitiveMode -> NumArrayIndices -> DataType -> Ptr a -> NumInstances -> BaseInstance -> IO ()+drawElementsInstancedBaseInstance m c = glDrawElementsInstancedBaseInstance (marshalPrimitiveMode m) c . marshalDataType -drawRangeElements ::-      PrimitiveMode -> (ArrayIndex, ArrayIndex) -> NumArrayIndices -> DataType-   -> Ptr a -> IO ()-drawRangeElements m (s, e) c =-   glDrawRangeElements (marshalPrimitiveMode m) (fromIntegral s)-                       (fromIntegral e) c . marshalDataType+drawElementsInstanced :: PrimitiveMode -> NumArrayIndices -> DataType -> Ptr a -> NumInstances -> IO ()+drawElementsInstanced m c = glDrawElementsInstanced (marshalPrimitiveMode m) c . marshalDataType++multiDrawElements :: PrimitiveMode -> Ptr NumArrayIndices -> DataType -> Ptr (Ptr a) -> NumIndexBlocks -> IO ()+multiDrawElements m c = glMultiDrawElements (marshalPrimitiveMode m) c . marshalDataType++drawRangeElements :: PrimitiveMode -> (ArrayIndex, ArrayIndex) -> NumArrayIndices -> DataType -> Ptr a -> IO ()+drawRangeElements m (s, e) c = glDrawRangeElements (marshalPrimitiveMode m) (fromIntegral s) (fromIntegral e) c . marshalDataType++drawElementsBaseVertex :: PrimitiveMode -> NumArrayIndices -> DataType -> Ptr a -> BaseVertex -> IO ()+drawElementsBaseVertex m c = glDrawElementsBaseVertex (marshalPrimitiveMode m) c . marshalDataType++drawRangeElementsBaseVertex :: PrimitiveMode -> (ArrayIndex, ArrayIndex) -> NumArrayIndices -> DataType -> Ptr a -> BaseVertex -> IO ()+drawRangeElementsBaseVertex m (s, e) c = glDrawRangeElementsBaseVertex (marshalPrimitiveMode m) (fromIntegral s) (fromIntegral e) c . marshalDataType++drawElementsInstancedBaseVertex :: PrimitiveMode -> NumArrayIndices -> DataType -> Ptr a -> NumInstances -> BaseVertex -> IO ()+drawElementsInstancedBaseVertex m c = glDrawElementsInstancedBaseVertex (marshalPrimitiveMode m) c . marshalDataType++drawElementsInstancedBaseVertexBaseInstance :: PrimitiveMode -> NumArrayIndices -> DataType -> Ptr a -> NumInstances -> BaseVertex -> BaseInstance -> IO ()+drawElementsInstancedBaseVertexBaseInstance m c = glDrawElementsInstancedBaseVertexBaseInstance (marshalPrimitiveMode m) c . marshalDataType++multiDrawElementsBaseVertex :: PrimitiveMode -> Ptr NumArrayIndices -> DataType -> Ptr (Ptr a) -> NumIndexBlocks -> Ptr BaseVertex -> IO ()+multiDrawElementsBaseVertex m c = glMultiDrawElementsBaseVertex (marshalPrimitiveMode m) c . marshalDataType  maxElementsVertices :: GettableStateVar NumArrayIndices maxElementsVertices = makeGettableStateVar (getSizei1 id GetMaxElementsVertices)
src/Graphics/Rendering/OpenGL/GL/VertexAttributes.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable, CPP #-} {-# OPTIONS_HADDOCK hide #-} -------------------------------------------------------------------------------- -- |@@ -22,7 +22,9 @@    Index1(..) ) where -import Control.Applicative+#if !MIN_VERSION_base(4,8,0)+import Control.Applicative ( Applicative(..) )+#endif import Control.Monad import Data.Foldable import Data.Ix
src/Graphics/Rendering/OpenGL/GLU/ErrorsInternal.hs view
@@ -1,5 +1,5 @@+{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-cse #-}- {-# OPTIONS_HADDOCK hide #-} -------------------------------------------------------------------------------- -- |@@ -22,8 +22,6 @@ ) where  import Data.IORef ( IORef, newIORef, readIORef, writeIORef )-import Foreign.C.String ( peekCString )-import Foreign.Ptr ( castPtr ) import Graphics.Rendering.GLU.Raw import Graphics.Rendering.OpenGL.Raw import System.IO.Unsafe ( unsafePerformIO )@@ -36,12 +34,11 @@ data Error = Error ErrorCategory String    deriving ( Eq, Ord, Show ) ---------------------------------------------------------------------------------- -- | General GL\/GLU error categories  data ErrorCategory-   = InvalidEnum+   = ContextLost+   | InvalidEnum    | InvalidValue    | InvalidOperation    | InvalidFramebufferOperation@@ -53,61 +50,130 @@    | NURBSError    deriving ( Eq, Ord, Show ) -unmarshalErrorCategory :: GLenum -> ErrorCategory-unmarshalErrorCategory c-   | isInvalidEnum c      = InvalidEnum-   | isInvalidValue c     = InvalidValue-   | isInvalidOperation c = InvalidOperation-   | isInvalidFramebufferOperation c = InvalidFramebufferOperation-   | isOutOfMemory c      = OutOfMemory-   | isStackOverflow c    = StackOverflow-   | isStackUnderflow c   = StackUnderflow-   | isTableTooLarge c    = TableTooLarge-   | isTesselatorError c  = TesselatorError-   | isNURBSError c       = NURBSError-   | otherwise = error "unmarshalErrorCategory"--isInvalidEnum :: GLenum -> Bool-isInvalidEnum c = c == gl_INVALID_ENUM || c == glu_INVALID_ENUM--isInvalidValue :: GLenum -> Bool-isInvalidValue c = c == gl_INVALID_VALUE || c == glu_INVALID_VALUE--isInvalidOperation :: GLenum -> Bool-isInvalidOperation c = c == gl_INVALID_OPERATION || c == glu_INVALID_OPERATION--isInvalidFramebufferOperation :: GLenum -> Bool-isInvalidFramebufferOperation c = c == gl_INVALID_FRAMEBUFFER_OPERATION--isOutOfMemory :: GLenum -> Bool-isOutOfMemory c = c == gl_OUT_OF_MEMORY || c == glu_OUT_OF_MEMORY--isStackOverflow :: GLenum -> Bool-isStackOverflow c = c == gl_STACK_OVERFLOW--isStackUnderflow :: GLenum -> Bool-isStackUnderflow c = c == gl_STACK_UNDERFLOW--isTableTooLarge :: GLenum -> Bool-isTableTooLarge c = c == gl_TABLE_TOO_LARGE--isTesselatorError :: GLenum -> Bool-isTesselatorError c = glu_TESS_ERROR1 <= c && c <= glu_TESS_ERROR8--isNURBSError :: GLenum -> Bool-isNURBSError c = glu_NURBS_ERROR1 <= c && c <= glu_NURBS_ERROR37-------------------------------------------------------------------------------------- The returned error string is statically allocated, so peekCString--- does the right thing here. No malloc/free necessary here.--makeError :: GLenum -> IO Error-makeError e = do-   let category = unmarshalErrorCategory e-   ptr <- gluErrorString e-   description <- peekCString (castPtr ptr)-   return $ Error category description+makeError :: GLenum -> Error+makeError c+   -- GL errors+   | c == gl_CONTEXT_LOST =+       Error ContextLost "context lost"+   | c == gl_INVALID_ENUM =+       Error InvalidEnum "invalid enumerant"+   | c == gl_INVALID_VALUE =+       Error InvalidValue  "invalid value"+   | c == gl_INVALID_OPERATION =+       Error InvalidOperation "invalid operation"+   | c == gl_INVALID_FRAMEBUFFER_OPERATION =+       Error InvalidFramebufferOperation "invalid framebuffer operation"+   | c == gl_OUT_OF_MEMORY+       = Error OutOfMemory "out of memory"+   | c == gl_STACK_OVERFLOW =+       Error StackOverflow "stack overflow"+   | c == gl_STACK_UNDERFLOW =+       Error StackUnderflow "stack underflow"+   | c == gl_TABLE_TOO_LARGE =+       Error TableTooLarge "table too large"+   -- GLU errors+   | c == glu_INVALID_ENUM =+       Error InvalidEnum "invalid enumerant"+   | c == glu_INVALID_VALUE =+       Error InvalidValue  "invalid value"+   | c == glu_INVALID_OPERATION =+       Error InvalidOperation "invalid operation"+   | c == glu_OUT_OF_MEMORY+       = Error OutOfMemory "out of memory"+   -- GLU tesselator error+   | c == glu_TESS_ERROR1 =+       Error TesselatorError "gluTessBeginPolygon() must precede a gluTessEndPolygon()"+   | c == glu_TESS_ERROR2 =+       Error TesselatorError "gluTessBeginContour() must precede a gluTessEndContour()"+   | c == glu_TESS_ERROR3 =+       Error TesselatorError "gluTessEndPolygon() must follow a gluTessBeginPolygon()"+   | c == glu_TESS_ERROR4 =+       Error TesselatorError "gluTessEndContour() must follow a gluTessBeginContour()"+   | c == glu_TESS_ERROR5 =+       Error TesselatorError "a coordinate is too large"+   | c == glu_TESS_ERROR6 =+       Error TesselatorError "need combine callback"+   | c == glu_TESS_ERROR7 =+       Error TesselatorError "tesselation error 7"+   | c == glu_TESS_ERROR8 =+       Error TesselatorError "tesselation error 8"+   -- GLU NUBRS errors+   | c == glu_NURBS_ERROR1 =+       Error NURBSError "spline order un-supported"+   | c == glu_NURBS_ERROR2 =+       Error NURBSError "too few knots"+   | c == glu_NURBS_ERROR3 =+       Error NURBSError "valid knot range is empty"+   | c == glu_NURBS_ERROR4 =+       Error NURBSError "decreasing knot sequence knot"+   | c == glu_NURBS_ERROR5 =+       Error NURBSError "knot multiplicity greater than order of spline"+   | c == glu_NURBS_ERROR6 =+       Error NURBSError "gluEndCurve() must follow gluBeginCurve()"+   | c == glu_NURBS_ERROR7 =+       Error NURBSError "gluBeginCurve() must precede gluEndCurve()"+   | c == glu_NURBS_ERROR8 =+       Error NURBSError "missing or extra geometric data"+   | c == glu_NURBS_ERROR9 =+       Error NURBSError "can't draw piecewise linear trimming curves"+   | c == glu_NURBS_ERROR10 =+       Error NURBSError "missing or extra domain data"+   | c == glu_NURBS_ERROR11 =+       Error NURBSError "missing or extra domain data"+   | c == glu_NURBS_ERROR12 =+       Error NURBSError "gluEndTrim() must precede gluEndSurface()"+   | c == glu_NURBS_ERROR13 =+       Error NURBSError "gluBeginSurface() must precede gluEndSurface()"+   | c == glu_NURBS_ERROR14 =+       Error NURBSError "curve of improper type passed as trim curve"+   | c == glu_NURBS_ERROR15 =+       Error NURBSError "gluBeginSurface() must precede gluBeginTrim()"+   | c == glu_NURBS_ERROR16 =+       Error NURBSError "gluEndTrim() must follow gluBeginTrim()"+   | c == glu_NURBS_ERROR17 =+       Error NURBSError "gluBeginTrim() must precede gluEndTrim()"+   | c == glu_NURBS_ERROR18 =+       Error NURBSError "invalid or missing trim curve"+   | c == glu_NURBS_ERROR19 =+       Error NURBSError "gluBeginTrim() must precede gluPwlCurve()"+   | c == glu_NURBS_ERROR20 =+       Error NURBSError "piecewise linear trimming curve referenced twice"+   | c == glu_NURBS_ERROR21 =+       Error NURBSError "piecewise linear trimming curve and nurbs curve mixed"+   | c == glu_NURBS_ERROR22 =+       Error NURBSError "improper usage of trim data type"+   | c == glu_NURBS_ERROR23 =+       Error NURBSError "nurbs curve referenced twice"+   | c == glu_NURBS_ERROR24 =+       Error NURBSError "nurbs curve and piecewise linear trimming curve mixed"+   | c == glu_NURBS_ERROR25 =+       Error NURBSError "nurbs surface referenced twice"+   | c == glu_NURBS_ERROR26 =+       Error NURBSError "invalid property"+   | c == glu_NURBS_ERROR27 =+       Error NURBSError "gluEndSurface() must follow gluBeginSurface()"+   | c == glu_NURBS_ERROR28 =+       Error NURBSError "intersecting or misoriented trim curves"+   | c == glu_NURBS_ERROR29 =+       Error NURBSError "intersecting trim curves"+   | c == glu_NURBS_ERROR30 =+       Error NURBSError "UNUSED"+   | c == glu_NURBS_ERROR31 =+       Error NURBSError "unconnected trim curves"+   | c == glu_NURBS_ERROR32 =+       Error NURBSError "unknown knot error"+   | c == glu_NURBS_ERROR33 =+       Error NURBSError "negative vertex count encountered"+   | c == glu_NURBS_ERROR34 =+       Error NURBSError "negative byte-stride encounteed"+   | c == glu_NURBS_ERROR35 =+       Error NURBSError "unknown type descriptor"+   | c == glu_NURBS_ERROR36 =+       Error NURBSError "null control point reference"+   | c == glu_NURBS_ERROR37 =+       Error NURBSError "duplicate point on piecewise linear trimming curve"+   -- Something went terribly wrong...+   | otherwise = error "makeError"  -------------------------------------------------------------------------------- @@ -141,9 +207,7 @@ --------------------------------------------------------------------------------  getErrors :: IO [Error]-getErrors = do-   es <- getErrorCodesAux (const ([], True))-   mapM makeError es+getErrors = map makeError `fmap` getErrorCodesAux (const ([], True))  recordErrorCode :: GLenum -> IO () recordErrorCode e = do