License | BSD3 |
---|---|
Maintainer | ziocroc@gmail.com |
Stability | experimental |
Portability | GHC only |
Safe Haskell | None |
Language | Haskell2010 |
- module Graphics.Rendering.Ombra.OutBuffer
- data Draw o a
- data DrawState
- runDraw :: GLES => Int -> Int -> Ctx -> Draw GVec4 a -> IO a
- class (MonadGeometry (m o), MonadProgram (m o), MonadTexture (m o), MonadScreen (m o)) => MonadDraw o m where
- class MonadDrawBuffers m where
- class MonadDraw o m => MonadRead o m where
- class (GLES, Monad m) => MonadScreen m where
- clearColor :: (GLES, MonadGL m) => m ()
- clearDepth :: (GLES, MonadGL m) => m ()
- clearStencil :: (GLES, MonadGL m) => m ()
- data CullFace
- class (GLES, MonadGL m) => MonadCulling m where
- data ResStatus r
- preloadGeometry :: (GLES, GeometryVertex g) => Geometry g -> Draw o (Maybe String)
- preloadTexture :: GLES => Texture -> Draw o (Maybe String)
- removeGeometry :: (GLES, GeometryVertex g) => Geometry g -> Draw o ()
- removeTexture :: GLES => Texture -> Draw o ()
- checkGeometry :: (GLES, GeometryVertex g) => Geometry g -> Draw o (ResStatus ())
- checkTexture :: (GLES, Num a) => Texture -> Draw o (ResStatus (a, a))
Documentation
An implementation of MonadDraw
and MonadDrawBuffers
.
GLES => MonadDrawBuffers Draw Source # | |
GLES => MonadRead GVec4 Draw Source # | |
(FragmentShaderOutput o, GLES) => MonadDraw o Draw Source # | |
MonadBase IO (Draw o) Source # | |
MonadBaseControl IO (Draw o) Source # | |
Monad (Draw o) Source # | |
Functor (Draw o) Source # | |
Applicative (Draw o) Source # | |
MonadIO (Draw o) Source # | |
GLES => MonadTexture (Draw o) Source # | |
GLES => MonadScreen (Draw o) Source # | |
GLES => MonadCulling (Draw o) Source # | |
type StM (Draw o) a Source # | |
Running the Draw monad
Draw actions
class (MonadGeometry (m o), MonadProgram (m o), MonadTexture (m o), MonadScreen (m o)) => MonadDraw o m where Source #
Monads that can be used to draw Image
s.
withColorMask :: (Bool, Bool, Bool, Bool) -> m o a -> m o a Source #
withDepthTest :: Bool -> m o a -> m o a Source #
withDepthMask :: Bool -> m o a -> m o a Source #
class MonadDrawBuffers m where Source #
Monads that support drawing to GBuffer
s and DepthBuffer
s.
:: Int | Width of the buffers. |
-> Int | Height of the buffers. |
-> Either (GBuffer t o) (GBufferInfo o) | The buffer that will contain the output of the fragment shader. Either a previously used buffer, or the info of a new buffer that drawBuffers will create. Do not reuse buffers with a different width or height than the one you specified with the previous argument. |
-> Either (DepthBuffer t') DepthBufferInfo | The buffer that contains the depth (and stencil) values. |
-> m o a | Image to draw to the buffers. |
-> (forall t. GBuffer t o -> DepthBuffer t -> a -> m o' b) | |
-> m o' b |
Draw an image to some buffers.
drawBuffers' :: Int -> Int -> Either (GBuffer t o) (GBufferInfo o) -> Either (DepthBuffer t1) DepthBufferInfo -> m o a -> m o' (a, GBuffer t2 o, DepthBuffer t3) Source #
Use this instead of drawBuffers
if you need to reuse the newly
created buffers layer. They will be deleted from the GPU when the
'GBuffer'/'DepthBuffer' is garbage collected.
class MonadDraw o m => MonadRead o m where Source #
readColor :: (Int, Int, Int, Int) -> m o [Color] Source #
Read a rectangle of pixel colors from the screen (or texture).
readColorFloat :: (Int, Int, Int, Int) -> m o [Vec4] Source #
readColor
variant that read color vectors.
readDepth :: (Int, Int, Int, Int) -> m o [Word16] Source #
Read a rectangle of pixel depths from the screen (or texture). Not supported on WebGL!
readDepthFloat :: (Int, Int, Int, Int) -> m o [Float] Source #
readDepth
variants that read floats. Not supported on WebGL as well.
readStencil :: (Int, Int, Int, Int) -> m o [Word8] Source #
Read a rectangle of stencil values from the screen (or texture). Not supported on WebGL!
class (GLES, Monad m) => MonadScreen m where Source #
currentViewport, resizeViewport
resizeViewport :: Int -> Int -> m () Source #
Resize the drawing space.
GLES => MonadScreen (Draw o) Source # | |
clearColor :: (GLES, MonadGL m) => m () Source #
Clear the color buffer.
clearDepth :: (GLES, MonadGL m) => m () Source #
Clear the depth buffer.
clearStencil :: (GLES, MonadGL m) => m () Source #
Clear the stencil buffer.
Culling
class (GLES, MonadGL m) => MonadCulling m where Source #
withCulling :: Maybe CullFace -> m a -> m a Source #
GLES => MonadCulling (Draw o) Source # | |
Resources
In Ombra, GPU resources are allocated when they're needed, and they're kept alive by their corresponding CPU resources. Specifically, these resources are Geometries, Textures and Shaders. This means that, when a CPU resource is garbage collected, the GPU resource is also removed. The functions below let you manage allocation and deallocation manually. Note that if you try to use a resource that was deallocated with the remove* functions, it will be allocated again.
preloadGeometry :: (GLES, GeometryVertex g) => Geometry g -> Draw o (Maybe String) Source #
Manually allocate a Geometry
in the GPU. Eventually returns an error
string.
preloadTexture :: GLES => Texture -> Draw o (Maybe String) Source #
Manually allocate a Texture
in the GPU.
removeGeometry :: (GLES, GeometryVertex g) => Geometry g -> Draw o () Source #
Manually delete a Geometry
from the GPU.
checkGeometry :: (GLES, GeometryVertex g) => Geometry g -> Draw o (ResStatus ()) Source #
Check if a Geometry
failed to load.