ombra-1.1.0.0: Graphics/Rendering/Ombra/Draw.hs
-- |
-- Module: Graphics.Rendering.Ombra.Draw
-- License: BSD3
-- Maintainer: ziocroc@gmail.com
-- Stability: experimental
-- Portability: GHC only
module Graphics.Rendering.Ombra.Draw (
module Graphics.Rendering.Ombra.OutBuffer,
Draw,
Ctx,
-- * Running the Draw monad
runDraw,
-- * Draw actions
MonadDraw( withColorMask
, withDepthTest
, withDepthMask
, clearColor
, clearColorWith
, clearDepth
, clearDepthWith
, clearStencil
, clearStencilWith
),
MonadDrawBuffers(..),
MonadRead(..),
MonadScreen(resizeViewport),
-- ** Culling
CullFace(..),
MonadCulling(withCulling),
-- ** Resources
-- $resources
ResStatus(..),
preloadGeometry,
preloadTexture,
removeGeometry,
removeTexture,
checkGeometry,
checkTexture,
) where
import Graphics.Rendering.Ombra.Backend
import Graphics.Rendering.Ombra.Culling.Draw
import Graphics.Rendering.Ombra.Culling.Types
import Graphics.Rendering.Ombra.Draw.Class
import Graphics.Rendering.Ombra.Draw.Monad
import Graphics.Rendering.Ombra.Internal.GL (evalGL)
import Graphics.Rendering.Ombra.OutBuffer
import Graphics.Rendering.Ombra.Shader.Language.Types (GVec4)
import Graphics.Rendering.Ombra.Screen
-- | Run a 'Draw' program.
runDraw :: GLES
=> Int -- ^ Viewport width
-> Int -- ^ Viewport height
-> Ctx
-> Draw GVec4 a
-> IO a
runDraw w h ctx a = flip evalGL ctx . evalDraw (drawInit >> a) $ drawState w h
-- $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.