packages feed

lambdacube-engine-0.1.1: Graphics/LambdaCube/RenderSystem/GL/GLOcclusionQuery.hs

module Graphics.LambdaCube.RenderSystem.GL.GLOcclusionQuery where

import Graphics.Rendering.OpenGL (($=))
import qualified Graphics.Rendering.OpenGL as GL

import Graphics.LambdaCube.HardwareOcclusionQuery

data GLOcclusionQuery
    = GLOcclusionQuery
    { gloqQueryObject    :: GL.QueryObject
    }

instance HardwareOcclusionQuery GLOcclusionQuery where
    beginOcclusionQuery     = glBeginOcclusionQuery
    endOcclusionQuery       = glEndOcclusionQuery
    pullOcclusionQuery      = glPullOcclusionQuery
--    getLastQuerysPixelcount :: a -> IO Int
    isStillOutstanding      = glStillOutstanding

mkGLOcclusionQuery = do
    [q] <- GL.genObjectNames 1
    return $ GLOcclusionQuery q
    
rmGLOcclusionQuery o = do
    GL.deleteObjectNames [gloqQueryObject o]

glBeginOcclusionQuery o = GL.beginQuery GL.SamplesPassed $ gloqQueryObject o
    
glEndOcclusionQuery o = GL.endQuery GL.SamplesPassed
    
glPullOcclusionQuery o = do
    c <- GL.get $ GL.queryResult $ gloqQueryObject o
    return $ fromIntegral c

glStillOutstanding o = do
    b <- GL.get $ GL.queryResultAvailable $ gloqQueryObject o
    return $ not b