-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | OpenGL standard memory layouts -- -- OpenGL standard memory layouts @package gl-block @version 1.0 -- | OpenGL std140 and std430 support module Graphics.Gl.Block -- | This describes how to load and store primitives through a -- uniform/shader storage blocks according to OpenGL Std140 and Std430. -- -- There are lots of fiddly little constants around, beware. class Block b where { type PackedSize b :: Nat; type PackedSize b = GPackedSize (Rep b); } -- | As per Storable alignment, but matching OpenGL Std140. alignment140 :: Block b => proxy b -> Int -- | As per Storable alignment, but matching OpenGL Std140. alignment140 :: (Block b, GBlock (Rep b)) => proxy b -> Int -- | As per Storable sizeOf, but matching OpenGL Std140. sizeOf140 :: Block b => proxy b -> Int -- | As per Storable sizeOf, but matching OpenGL Std140. sizeOf140 :: (Block b, GBlock (Rep b)) => proxy b -> Int -- | Structures get smashed up to a minimum of a vec4 alignment in 140 mode isStruct :: Block b => proxy b -> Bool read140 :: (Block b, MonadIO m) => Ptr a -> Diff a b -> m b read140 :: (Block b, MonadIO m, Generic b, GBlock (Rep b)) => Ptr a -> Diff a b -> m b write140 :: (Block b, MonadIO m) => Ptr a -> Diff a b -> b -> m () write140 :: (Block b, MonadIO m, Generic b, GBlock (Rep b)) => Ptr a -> Diff a b -> b -> m () -- | As per Storable alignment, but matching OpenGL Std430. alignment430 :: Block b => proxy b -> Int -- | As per Storable alignment, but matching OpenGL Std430. alignment430 :: (Block b, GBlock (Rep b)) => proxy b -> Int -- | As per Storable sizeOf, but matching OpenGL Std430. sizeOf430 :: Block b => proxy b -> Int -- | As per Storable sizeOf, but matching OpenGL Std430. sizeOf430 :: (Block b, GBlock (Rep b)) => proxy b -> Int read430 :: (Block b, MonadIO m) => Ptr a -> Diff a b -> m b read430 :: (Block b, MonadIO m, Generic b, GBlock (Rep b)) => Ptr a -> Diff a b -> m b write430 :: (Block b, MonadIO m) => Ptr a -> Diff a b -> b -> m () write430 :: (Block b, MonadIO m, Generic b, GBlock (Rep b)) => Ptr a -> Diff a b -> b -> m () -- | As per Storable sizeOf, but without padding and no -- alignment sizeOfPacked :: Block b => proxy b -> Int -- | As per Storable sizeOf, but without padding and no -- alignment sizeOfPacked :: (Block b, KnownNat (PackedSize b)) => proxy b -> Int readPacked :: (Block b, MonadIO m) => Ptr a -> Diff a b -> m b readPacked :: (Block b, MonadIO m, Generic b, GBlock (Rep b)) => Ptr a -> Diff a b -> m b writePacked :: (Block b, MonadIO m) => Ptr a -> Diff a b -> b -> m () writePacked :: (Block b, MonadIO m, Generic b, GBlock (Rep b)) => Ptr a -> Diff a b -> b -> m () -- | Automatically derive Std140 and Std430 alignment using GHC Generics class GBlock f where { type GPackedSize f :: Nat; } galignment140 :: GBlock f => p f -> Int galignment430 :: GBlock f => p f -> Int gsizeOf140 :: GBlock f => p f -> Int gsizeOf430 :: GBlock f => p f -> Int gsizeOfPacked :: GBlock f => p f -> Int gread140 :: GBlock f => Ptr a -> Int -> IO (f b) gread430 :: GBlock f => Ptr a -> Int -> IO (f b) greadPacked :: GBlock f => Ptr a -> Int -> IO (f b) gwrite140 :: GBlock f => Ptr a -> Int -> f b -> IO () gwrite430 :: GBlock f => Ptr a -> Int -> f b -> IO () gwritePacked :: GBlock f => Ptr a -> Int -> f b -> IO () newtype Packed a Packed :: a -> Packed a [getPacked] :: Packed a -> a newtype Std140 a Std140 :: a -> Std140 a [getStd140] :: Std140 a -> a newtype Std430 a Std430 :: a -> Std430 a [getStd430] :: Std430 a -> a -- | roundUp k n rounds up k up to an integral multiple of n roundUp :: Int -> Int -> Int instance GHC.Read.Read a => GHC.Read.Read (Graphics.Gl.Block.Packed a) instance GHC.Show.Show a => GHC.Show.Show (Graphics.Gl.Block.Packed a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Graphics.Gl.Block.Packed a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Graphics.Gl.Block.Packed a) instance Data.Traversable.Traversable Graphics.Gl.Block.Packed instance Data.Foldable.Foldable Graphics.Gl.Block.Packed instance GHC.Base.Functor Graphics.Gl.Block.Packed instance GHC.Generics.Generic (Graphics.Gl.Block.Packed a) instance Data.Data.Data a => Data.Data.Data (Graphics.Gl.Block.Packed a) instance GHC.Read.Read a => GHC.Read.Read (Graphics.Gl.Block.Std140 a) instance GHC.Show.Show a => GHC.Show.Show (Graphics.Gl.Block.Std140 a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Graphics.Gl.Block.Std140 a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Graphics.Gl.Block.Std140 a) instance Data.Traversable.Traversable Graphics.Gl.Block.Std140 instance Data.Foldable.Foldable Graphics.Gl.Block.Std140 instance GHC.Base.Functor Graphics.Gl.Block.Std140 instance GHC.Generics.Generic (Graphics.Gl.Block.Std140 a) instance Data.Data.Data a => Data.Data.Data (Graphics.Gl.Block.Std140 a) instance GHC.Read.Read a => GHC.Read.Read (Graphics.Gl.Block.Std430 a) instance GHC.Show.Show a => GHC.Show.Show (Graphics.Gl.Block.Std430 a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Graphics.Gl.Block.Std430 a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Graphics.Gl.Block.Std430 a) instance Data.Traversable.Traversable Graphics.Gl.Block.Std430 instance Data.Foldable.Foldable Graphics.Gl.Block.Std430 instance GHC.Base.Functor Graphics.Gl.Block.Std430 instance GHC.Generics.Generic (Graphics.Gl.Block.Std430 a) instance Data.Data.Data a => Data.Data.Data (Graphics.Gl.Block.Std430 a) instance Graphics.Gl.Block.Block a => Foreign.Storable.Storable (Graphics.Gl.Block.Packed a) instance Graphics.Gl.Block.Block a => Foreign.Storable.Storable (Graphics.Gl.Block.Std140 a) instance Graphics.Gl.Block.Block a => Foreign.Storable.Storable (Graphics.Gl.Block.Std430 a) instance Graphics.Gl.Block.Block c => Graphics.Gl.Block.GBlock (GHC.Generics.K1 i c) instance Graphics.Gl.Block.Block GHC.Types.Bool instance Graphics.Gl.Block.Block GHC.Int.Int32 instance Graphics.Gl.Block.Block GHC.Word.Word32 instance Graphics.Gl.Block.Block GHC.Types.Float instance Graphics.Gl.Block.Block GHC.Types.Double instance (Graphics.Gl.Block.Block a, Graphics.Gl.Block.Block b, GHC.TypeNats.KnownNat (Graphics.Gl.Block.PackedSize a GHC.TypeNats.+ Graphics.Gl.Block.PackedSize b)) => Graphics.Gl.Block.Block (a, b) instance (Graphics.Gl.Block.Block a, Graphics.Gl.Block.Block b, Graphics.Gl.Block.Block c, GHC.TypeNats.KnownNat (Graphics.Gl.Block.PackedSize a GHC.TypeNats.+ (Graphics.Gl.Block.PackedSize b GHC.TypeNats.+ Graphics.Gl.Block.PackedSize c))) => Graphics.Gl.Block.Block (a, b, c) instance Graphics.Gl.Block.GBlock GHC.Generics.U1 instance forall k (f :: k -> *) (g :: k -> *). (Graphics.Gl.Block.GBlock f, Graphics.Gl.Block.GBlock g) => Graphics.Gl.Block.GBlock (f GHC.Generics.:*: g) instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Graphics.Gl.Block.GBlock f => Graphics.Gl.Block.GBlock (GHC.Generics.M1 GHC.Generics.S c f) instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Graphics.Gl.Block.GBlock f => Graphics.Gl.Block.GBlock (GHC.Generics.M1 GHC.Generics.C c f) instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Graphics.Gl.Block.GBlock f => Graphics.Gl.Block.GBlock (GHC.Generics.M1 GHC.Generics.D c f)