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