module Graphics.Rendering.OpenGL.GL.ConditionalRendering (
   ConditionalRenderMode(..),
   beginConditionalRender, endConditionalRender, withConditionalRender
) where
import Graphics.Rendering.OpenGL.GL.Exception
import Graphics.Rendering.OpenGL.GL.QueryObject
import Graphics.Rendering.OpenGL.Raw
data ConditionalRenderMode =
     QueryWait
   | QueryNoWait
   | QueryByRegionWait
   | QueryByRegionNoWait
   deriving ( Eq, Ord, Show )
marshalConditionalRenderMode :: ConditionalRenderMode -> GLenum
marshalConditionalRenderMode x = case x of
   QueryWait -> gl_QUERY_WAIT
   QueryNoWait -> gl_QUERY_NO_WAIT
   QueryByRegionWait -> gl_QUERY_BY_REGION_WAIT
   QueryByRegionNoWait -> gl_QUERY_BY_REGION_NO_WAIT
beginConditionalRender :: QueryObject -> ConditionalRenderMode -> IO ()
beginConditionalRender q =
   glBeginConditionalRender (queryID q) . marshalConditionalRenderMode
endConditionalRender :: IO ()
endConditionalRender = glEndConditionalRender
withConditionalRender :: QueryObject -> ConditionalRenderMode -> IO a -> IO a
withConditionalRender q m =
   bracket_ (beginConditionalRender q m) endConditionalRender