module Graphics.Rendering.OpenGL.GL.PixelRectangles.Histogram (
Sink(..), histogram, Reset(..), getHistogram, resetHistogram,
histogramRGBASizes, histogramLuminanceSize
) where
import Data.StateVar
import Foreign.Marshal.Utils
import Graphics.Rendering.OpenGL.GL.Capability
import Graphics.Rendering.OpenGL.GL.PeekPoke
import Graphics.Rendering.OpenGL.GL.PixelData
import Graphics.Rendering.OpenGL.GL.PixelRectangles.ColorTable
import Graphics.Rendering.OpenGL.GL.PixelRectangles.Reset
import Graphics.Rendering.OpenGL.GL.PixelRectangles.Sink
import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat
import Graphics.Rendering.OpenGL.GL.VertexSpec
import Graphics.GL
data HistogramTarget =
Histogram
| ProxyHistogram
marshalHistogramTarget :: HistogramTarget -> GLenum
marshalHistogramTarget :: HistogramTarget -> GLenum
marshalHistogramTarget HistogramTarget
x = case HistogramTarget
x of
HistogramTarget
Histogram -> GLenum
GL_HISTOGRAM
HistogramTarget
ProxyHistogram -> GLenum
GL_PROXY_HISTOGRAM
proxyToHistogramTarget :: Proxy -> HistogramTarget
proxyToHistogramTarget :: Proxy -> HistogramTarget
proxyToHistogramTarget Proxy
x = case Proxy
x of
Proxy
NoProxy -> HistogramTarget
Histogram
Proxy
Proxy -> HistogramTarget
ProxyHistogram
histogram :: Proxy -> StateVar (Maybe (GLsizei, PixelInternalFormat, Sink))
histogram :: Proxy -> StateVar (Maybe (GLsizei, PixelInternalFormat, Sink))
histogram Proxy
proxy =
IO EnableCap
-> IO (GLsizei, PixelInternalFormat, Sink)
-> ((GLsizei, PixelInternalFormat, Sink) -> IO ())
-> StateVar (Maybe (GLsizei, PixelInternalFormat, Sink))
forall a.
IO EnableCap -> IO a -> (a -> IO ()) -> StateVar (Maybe a)
makeStateVarMaybe
(EnableCap -> IO EnableCap
forall (m :: * -> *) a. Monad m => a -> m a
return EnableCap
CapHistogram) (Proxy -> IO (GLsizei, PixelInternalFormat, Sink)
getHistogram' Proxy
proxy) (Proxy -> (GLsizei, PixelInternalFormat, Sink) -> IO ()
setHistogram Proxy
proxy)
getHistogram' :: Proxy -> IO (GLsizei, PixelInternalFormat, Sink)
getHistogram' :: Proxy -> IO (GLsizei, PixelInternalFormat, Sink)
getHistogram' Proxy
proxy = do
GLsizei
w <- (GLsizei -> GLsizei)
-> Proxy -> GetHistogramParameterPName -> IO GLsizei
forall a.
(GLsizei -> a) -> Proxy -> GetHistogramParameterPName -> IO a
getHistogramParameteri GLsizei -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral Proxy
proxy GetHistogramParameterPName
HistogramWidth
PixelInternalFormat
f <- (GLsizei -> PixelInternalFormat)
-> Proxy -> GetHistogramParameterPName -> IO PixelInternalFormat
forall a.
(GLsizei -> a) -> Proxy -> GetHistogramParameterPName -> IO a
getHistogramParameteri GLsizei -> PixelInternalFormat
unmarshalPixelInternalFormat Proxy
proxy GetHistogramParameterPName
HistogramFormat
Sink
s <- (GLsizei -> Sink) -> Proxy -> GetHistogramParameterPName -> IO Sink
forall a.
(GLsizei -> a) -> Proxy -> GetHistogramParameterPName -> IO a
getHistogramParameteri GLsizei -> Sink
unmarshalSink Proxy
proxy GetHistogramParameterPName
HistogramSink
(GLsizei, PixelInternalFormat, Sink)
-> IO (GLsizei, PixelInternalFormat, Sink)
forall (m :: * -> *) a. Monad m => a -> m a
return (GLsizei
w, PixelInternalFormat
f, Sink
s)
getHistogramParameteri ::
(GLint -> a) -> Proxy -> GetHistogramParameterPName -> IO a
getHistogramParameteri :: (GLsizei -> a) -> Proxy -> GetHistogramParameterPName -> IO a
getHistogramParameteri GLsizei -> a
f Proxy
proxy GetHistogramParameterPName
p =
GLsizei -> (Ptr GLsizei -> IO a) -> IO a
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLsizei
0 ((Ptr GLsizei -> IO a) -> IO a) -> (Ptr GLsizei -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \Ptr GLsizei
buf -> do
GLenum -> GLenum -> Ptr GLsizei -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> Ptr GLsizei -> m ()
glGetHistogramParameteriv
(HistogramTarget -> GLenum
marshalHistogramTarget (Proxy -> HistogramTarget
proxyToHistogramTarget Proxy
proxy))
(GetHistogramParameterPName -> GLenum
marshalGetHistogramParameterPName GetHistogramParameterPName
p)
Ptr GLsizei
buf
(GLsizei -> a) -> Ptr GLsizei -> IO a
forall a b. Storable a => (a -> b) -> Ptr a -> IO b
peek1 GLsizei -> a
f Ptr GLsizei
buf
setHistogram :: Proxy -> (GLsizei, PixelInternalFormat, Sink) -> IO ()
setHistogram :: Proxy -> (GLsizei, PixelInternalFormat, Sink) -> IO ()
setHistogram Proxy
proxy (GLsizei
w, PixelInternalFormat
int, Sink
sink) =
GLenum -> GLsizei -> GLenum -> GLboolean -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLsizei -> GLenum -> GLboolean -> m ()
glHistogram
(HistogramTarget -> GLenum
marshalHistogramTarget (Proxy -> HistogramTarget
proxyToHistogramTarget Proxy
proxy))
GLsizei
w
(PixelInternalFormat -> GLenum
marshalPixelInternalFormat' PixelInternalFormat
int)
(Sink -> GLboolean
marshalSink Sink
sink)
getHistogram :: Reset -> PixelData a -> IO ()
getHistogram :: Reset -> PixelData a -> IO ()
getHistogram Reset
reset PixelData a
pd =
PixelData a -> (GLenum -> GLenum -> Ptr a -> IO ()) -> IO ()
forall a b. PixelData a -> (GLenum -> GLenum -> Ptr a -> b) -> b
withPixelData PixelData a
pd ((GLenum -> GLenum -> Ptr a -> IO ()) -> IO ())
-> (GLenum -> GLenum -> Ptr a -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$
GLenum -> GLboolean -> GLenum -> GLenum -> Ptr a -> IO ()
forall (m :: * -> *) a.
MonadIO m =>
GLenum -> GLboolean -> GLenum -> GLenum -> Ptr a -> m ()
glGetHistogram
(HistogramTarget -> GLenum
marshalHistogramTarget HistogramTarget
Histogram)
(Reset -> GLboolean
marshalReset Reset
reset)
resetHistogram :: IO ()
resetHistogram :: IO ()
resetHistogram = GLenum -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> m ()
glResetHistogram (HistogramTarget -> GLenum
marshalHistogramTarget HistogramTarget
Histogram)
data GetHistogramParameterPName =
HistogramWidth
| HistogramFormat
| HistogramRedSize
| HistogramGreenSize
| HistogramBlueSize
| HistogramAlphaSize
| HistogramLuminanceSize
| HistogramSink
marshalGetHistogramParameterPName :: GetHistogramParameterPName -> GLenum
marshalGetHistogramParameterPName :: GetHistogramParameterPName -> GLenum
marshalGetHistogramParameterPName GetHistogramParameterPName
x = case GetHistogramParameterPName
x of
GetHistogramParameterPName
HistogramWidth -> GLenum
GL_HISTOGRAM_WIDTH
GetHistogramParameterPName
HistogramFormat -> GLenum
GL_HISTOGRAM_FORMAT
GetHistogramParameterPName
HistogramRedSize -> GLenum
GL_HISTOGRAM_RED_SIZE
GetHistogramParameterPName
HistogramGreenSize -> GLenum
GL_HISTOGRAM_GREEN_SIZE
GetHistogramParameterPName
HistogramBlueSize -> GLenum
GL_HISTOGRAM_BLUE_SIZE
GetHistogramParameterPName
HistogramAlphaSize -> GLenum
GL_HISTOGRAM_ALPHA_SIZE
GetHistogramParameterPName
HistogramLuminanceSize -> GLenum
GL_HISTOGRAM_LUMINANCE_SIZE
GetHistogramParameterPName
HistogramSink -> GLenum
GL_HISTOGRAM_SINK
histogramRGBASizes :: Proxy -> GettableStateVar (Color4 GLsizei)
histogramRGBASizes :: Proxy -> GettableStateVar (Color4 GLsizei)
histogramRGBASizes Proxy
proxy =
GettableStateVar (Color4 GLsizei)
-> GettableStateVar (Color4 GLsizei)
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar (Color4 GLsizei)
-> GettableStateVar (Color4 GLsizei))
-> GettableStateVar (Color4 GLsizei)
-> GettableStateVar (Color4 GLsizei)
forall a b. (a -> b) -> a -> b
$ do
GLsizei
r <- (GLsizei -> GLsizei)
-> Proxy -> GetHistogramParameterPName -> IO GLsizei
forall a.
(GLsizei -> a) -> Proxy -> GetHistogramParameterPName -> IO a
getHistogramParameteri GLsizei -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral Proxy
proxy GetHistogramParameterPName
HistogramRedSize
GLsizei
g <- (GLsizei -> GLsizei)
-> Proxy -> GetHistogramParameterPName -> IO GLsizei
forall a.
(GLsizei -> a) -> Proxy -> GetHistogramParameterPName -> IO a
getHistogramParameteri GLsizei -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral Proxy
proxy GetHistogramParameterPName
HistogramGreenSize
GLsizei
b <- (GLsizei -> GLsizei)
-> Proxy -> GetHistogramParameterPName -> IO GLsizei
forall a.
(GLsizei -> a) -> Proxy -> GetHistogramParameterPName -> IO a
getHistogramParameteri GLsizei -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral Proxy
proxy GetHistogramParameterPName
HistogramBlueSize
GLsizei
a <- (GLsizei -> GLsizei)
-> Proxy -> GetHistogramParameterPName -> IO GLsizei
forall a.
(GLsizei -> a) -> Proxy -> GetHistogramParameterPName -> IO a
getHistogramParameteri GLsizei -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral Proxy
proxy GetHistogramParameterPName
HistogramAlphaSize
Color4 GLsizei -> GettableStateVar (Color4 GLsizei)
forall (m :: * -> *) a. Monad m => a -> m a
return (Color4 GLsizei -> GettableStateVar (Color4 GLsizei))
-> Color4 GLsizei -> GettableStateVar (Color4 GLsizei)
forall a b. (a -> b) -> a -> b
$ GLsizei -> GLsizei -> GLsizei -> GLsizei -> Color4 GLsizei
forall a. a -> a -> a -> a -> Color4 a
Color4 GLsizei
r GLsizei
g GLsizei
b GLsizei
a
histogramLuminanceSize :: Proxy -> GettableStateVar GLsizei
histogramLuminanceSize :: Proxy -> IO GLsizei
histogramLuminanceSize Proxy
proxy =
IO GLsizei -> IO GLsizei
forall a. IO a -> IO a
makeGettableStateVar (IO GLsizei -> IO GLsizei) -> IO GLsizei -> IO GLsizei
forall a b. (a -> b) -> a -> b
$
(GLsizei -> GLsizei)
-> Proxy -> GetHistogramParameterPName -> IO GLsizei
forall a.
(GLsizei -> a) -> Proxy -> GetHistogramParameterPName -> IO a
getHistogramParameteri GLsizei -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral Proxy
proxy GetHistogramParameterPName
HistogramLuminanceSize