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