-- 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)