--------------------------------------------------------------------------------
-- |
-- Module      :  Graphics.Rendering.OpenGL.GL.Texturing.Specification
-- Copyright   :  (c) Sven Panne 2002-2019
-- License     :  BSD3
--
-- Maintainer  :  Sven Panne <svenpanne@gmail.com>
-- Stability   :  stable
-- Portability :  portable
--
-- This module corresponds to section 3.8.1 (Texture Image Specification),
-- section 3.8.2 (Alternate Texture Image Specification Commands), and section
-- 3.8.3 (Compressed Texture Images) of the OpenGL 2.1 specs.
--
--------------------------------------------------------------------------------

module Graphics.Rendering.OpenGL.GL.Texturing.Specification (
   -- * Texture Targets

   -- ** One-Dimensional Texture Targets
   TextureTarget1D(..),

   -- ** Two-Dimensional Texture Targets
   TextureTarget2D(..),
   TextureTarget2DMultisample(..),
   TextureTargetCubeMap(..),
   TextureTargetCubeMapFace(..),

   -- ** Three-Dimensional Texture Targets
   TextureTarget3D(..),
   TextureTarget2DMultisampleArray(..),

   -- ** Texture Buffer Target
   TextureTargetBuffer(..),

   -- ** Texture Target Classification
   BindableTextureTarget,
   ParameterizedTextureTarget,
   OneDimensionalTextureTarget,
   TwoDimensionalTextureTarget,
   ThreeDimensionalTextureTarget,
   QueryableTextureTarget,
   GettableTextureTarget,

   -- * Texture-related Data Types
   Level, Border,
   TexturePosition1D(..), TexturePosition2D(..), TexturePosition3D(..),
   TextureSize1D(..), TextureSize2D(..), TextureSize3D(..),

   -- * Texture Image Specification
   texImage1D, texImage2D, texImage3D,
   copyTexImage1D, copyTexImage2D,
   texSubImage1D, texSubImage2D, texSubImage3D,
   getTexImage,

   -- * Alternate Texture Image Specification Commands
   copyTexSubImage1D, copyTexSubImage2D, copyTexSubImage3D,

   -- * Compressed Texture Images
   CompressedTextureFormat(..), compressedTextureFormats,
   CompressedPixelData(..),
   compressedTexImage1D, compressedTexImage2D, compressedTexImage3D,
   compressedTexSubImage1D, compressedTexSubImage2D, compressedTexSubImage3D,
   getCompressedTexImage,

   -- * Multisample Texture Images
   SampleLocations(..), texImage2DMultisample, texImage3DMultisample,

   -- * Implementation-Dependent Limits
   maxTextureSize, maxCubeMapTextureSize, maxRectangleTextureSize,
   max3DTextureSize, maxArrayTextureLayers, maxSampleMaskWords,
   maxColorTextureSamples, maxDepthTextureSamples, maxIntegerSamples
) where

import Foreign.Ptr
import Data.StateVar
import Graphics.Rendering.OpenGL.GL.CoordTrans
import Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferTarget
import Graphics.Rendering.OpenGL.GL.GLboolean
import Graphics.Rendering.OpenGL.GL.PixelData
import Graphics.Rendering.OpenGL.GL.PixelRectangles
import Graphics.Rendering.OpenGL.GL.QueryUtils
import Graphics.Rendering.OpenGL.GL.Texturing.PixelInternalFormat
import Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget
import Graphics.GL

--------------------------------------------------------------------------------

type Level = GLint

type Border = GLint

newtype TexturePosition1D = TexturePosition1D GLint
   deriving ( TexturePosition1D -> TexturePosition1D -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TexturePosition1D -> TexturePosition1D -> Bool
$c/= :: TexturePosition1D -> TexturePosition1D -> Bool
== :: TexturePosition1D -> TexturePosition1D -> Bool
$c== :: TexturePosition1D -> TexturePosition1D -> Bool
Eq, Eq TexturePosition1D
TexturePosition1D -> TexturePosition1D -> Bool
TexturePosition1D -> TexturePosition1D -> Ordering
TexturePosition1D -> TexturePosition1D -> TexturePosition1D
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TexturePosition1D -> TexturePosition1D -> TexturePosition1D
$cmin :: TexturePosition1D -> TexturePosition1D -> TexturePosition1D
max :: TexturePosition1D -> TexturePosition1D -> TexturePosition1D
$cmax :: TexturePosition1D -> TexturePosition1D -> TexturePosition1D
>= :: TexturePosition1D -> TexturePosition1D -> Bool
$c>= :: TexturePosition1D -> TexturePosition1D -> Bool
> :: TexturePosition1D -> TexturePosition1D -> Bool
$c> :: TexturePosition1D -> TexturePosition1D -> Bool
<= :: TexturePosition1D -> TexturePosition1D -> Bool
$c<= :: TexturePosition1D -> TexturePosition1D -> Bool
< :: TexturePosition1D -> TexturePosition1D -> Bool
$c< :: TexturePosition1D -> TexturePosition1D -> Bool
compare :: TexturePosition1D -> TexturePosition1D -> Ordering
$ccompare :: TexturePosition1D -> TexturePosition1D -> Ordering
Ord, Int -> TexturePosition1D -> ShowS
[TexturePosition1D] -> ShowS
TexturePosition1D -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TexturePosition1D] -> ShowS
$cshowList :: [TexturePosition1D] -> ShowS
show :: TexturePosition1D -> String
$cshow :: TexturePosition1D -> String
showsPrec :: Int -> TexturePosition1D -> ShowS
$cshowsPrec :: Int -> TexturePosition1D -> ShowS
Show )

data TexturePosition2D = TexturePosition2D !GLint !GLint
   deriving ( TexturePosition2D -> TexturePosition2D -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TexturePosition2D -> TexturePosition2D -> Bool
$c/= :: TexturePosition2D -> TexturePosition2D -> Bool
== :: TexturePosition2D -> TexturePosition2D -> Bool
$c== :: TexturePosition2D -> TexturePosition2D -> Bool
Eq, Eq TexturePosition2D
TexturePosition2D -> TexturePosition2D -> Bool
TexturePosition2D -> TexturePosition2D -> Ordering
TexturePosition2D -> TexturePosition2D -> TexturePosition2D
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TexturePosition2D -> TexturePosition2D -> TexturePosition2D
$cmin :: TexturePosition2D -> TexturePosition2D -> TexturePosition2D
max :: TexturePosition2D -> TexturePosition2D -> TexturePosition2D
$cmax :: TexturePosition2D -> TexturePosition2D -> TexturePosition2D
>= :: TexturePosition2D -> TexturePosition2D -> Bool
$c>= :: TexturePosition2D -> TexturePosition2D -> Bool
> :: TexturePosition2D -> TexturePosition2D -> Bool
$c> :: TexturePosition2D -> TexturePosition2D -> Bool
<= :: TexturePosition2D -> TexturePosition2D -> Bool
$c<= :: TexturePosition2D -> TexturePosition2D -> Bool
< :: TexturePosition2D -> TexturePosition2D -> Bool
$c< :: TexturePosition2D -> TexturePosition2D -> Bool
compare :: TexturePosition2D -> TexturePosition2D -> Ordering
$ccompare :: TexturePosition2D -> TexturePosition2D -> Ordering
Ord, Int -> TexturePosition2D -> ShowS
[TexturePosition2D] -> ShowS
TexturePosition2D -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TexturePosition2D] -> ShowS
$cshowList :: [TexturePosition2D] -> ShowS
show :: TexturePosition2D -> String
$cshow :: TexturePosition2D -> String
showsPrec :: Int -> TexturePosition2D -> ShowS
$cshowsPrec :: Int -> TexturePosition2D -> ShowS
Show )

data TexturePosition3D = TexturePosition3D !GLint !GLint !GLint
   deriving ( TexturePosition3D -> TexturePosition3D -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TexturePosition3D -> TexturePosition3D -> Bool
$c/= :: TexturePosition3D -> TexturePosition3D -> Bool
== :: TexturePosition3D -> TexturePosition3D -> Bool
$c== :: TexturePosition3D -> TexturePosition3D -> Bool
Eq, Eq TexturePosition3D
TexturePosition3D -> TexturePosition3D -> Bool
TexturePosition3D -> TexturePosition3D -> Ordering
TexturePosition3D -> TexturePosition3D -> TexturePosition3D
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TexturePosition3D -> TexturePosition3D -> TexturePosition3D
$cmin :: TexturePosition3D -> TexturePosition3D -> TexturePosition3D
max :: TexturePosition3D -> TexturePosition3D -> TexturePosition3D
$cmax :: TexturePosition3D -> TexturePosition3D -> TexturePosition3D
>= :: TexturePosition3D -> TexturePosition3D -> Bool
$c>= :: TexturePosition3D -> TexturePosition3D -> Bool
> :: TexturePosition3D -> TexturePosition3D -> Bool
$c> :: TexturePosition3D -> TexturePosition3D -> Bool
<= :: TexturePosition3D -> TexturePosition3D -> Bool
$c<= :: TexturePosition3D -> TexturePosition3D -> Bool
< :: TexturePosition3D -> TexturePosition3D -> Bool
$c< :: TexturePosition3D -> TexturePosition3D -> Bool
compare :: TexturePosition3D -> TexturePosition3D -> Ordering
$ccompare :: TexturePosition3D -> TexturePosition3D -> Ordering
Ord, Int -> TexturePosition3D -> ShowS
[TexturePosition3D] -> ShowS
TexturePosition3D -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TexturePosition3D] -> ShowS
$cshowList :: [TexturePosition3D] -> ShowS
show :: TexturePosition3D -> String
$cshow :: TexturePosition3D -> String
showsPrec :: Int -> TexturePosition3D -> ShowS
$cshowsPrec :: Int -> TexturePosition3D -> ShowS
Show )

newtype TextureSize1D = TextureSize1D GLsizei
   deriving ( TextureSize1D -> TextureSize1D -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TextureSize1D -> TextureSize1D -> Bool
$c/= :: TextureSize1D -> TextureSize1D -> Bool
== :: TextureSize1D -> TextureSize1D -> Bool
$c== :: TextureSize1D -> TextureSize1D -> Bool
Eq, Eq TextureSize1D
TextureSize1D -> TextureSize1D -> Bool
TextureSize1D -> TextureSize1D -> Ordering
TextureSize1D -> TextureSize1D -> TextureSize1D
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TextureSize1D -> TextureSize1D -> TextureSize1D
$cmin :: TextureSize1D -> TextureSize1D -> TextureSize1D
max :: TextureSize1D -> TextureSize1D -> TextureSize1D
$cmax :: TextureSize1D -> TextureSize1D -> TextureSize1D
>= :: TextureSize1D -> TextureSize1D -> Bool
$c>= :: TextureSize1D -> TextureSize1D -> Bool
> :: TextureSize1D -> TextureSize1D -> Bool
$c> :: TextureSize1D -> TextureSize1D -> Bool
<= :: TextureSize1D -> TextureSize1D -> Bool
$c<= :: TextureSize1D -> TextureSize1D -> Bool
< :: TextureSize1D -> TextureSize1D -> Bool
$c< :: TextureSize1D -> TextureSize1D -> Bool
compare :: TextureSize1D -> TextureSize1D -> Ordering
$ccompare :: TextureSize1D -> TextureSize1D -> Ordering
Ord, Int -> TextureSize1D -> ShowS
[TextureSize1D] -> ShowS
TextureSize1D -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TextureSize1D] -> ShowS
$cshowList :: [TextureSize1D] -> ShowS
show :: TextureSize1D -> String
$cshow :: TextureSize1D -> String
showsPrec :: Int -> TextureSize1D -> ShowS
$cshowsPrec :: Int -> TextureSize1D -> ShowS
Show )

data TextureSize2D = TextureSize2D !GLsizei !GLsizei
   deriving ( TextureSize2D -> TextureSize2D -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TextureSize2D -> TextureSize2D -> Bool
$c/= :: TextureSize2D -> TextureSize2D -> Bool
== :: TextureSize2D -> TextureSize2D -> Bool
$c== :: TextureSize2D -> TextureSize2D -> Bool
Eq, Eq TextureSize2D
TextureSize2D -> TextureSize2D -> Bool
TextureSize2D -> TextureSize2D -> Ordering
TextureSize2D -> TextureSize2D -> TextureSize2D
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TextureSize2D -> TextureSize2D -> TextureSize2D
$cmin :: TextureSize2D -> TextureSize2D -> TextureSize2D
max :: TextureSize2D -> TextureSize2D -> TextureSize2D
$cmax :: TextureSize2D -> TextureSize2D -> TextureSize2D
>= :: TextureSize2D -> TextureSize2D -> Bool
$c>= :: TextureSize2D -> TextureSize2D -> Bool
> :: TextureSize2D -> TextureSize2D -> Bool
$c> :: TextureSize2D -> TextureSize2D -> Bool
<= :: TextureSize2D -> TextureSize2D -> Bool
$c<= :: TextureSize2D -> TextureSize2D -> Bool
< :: TextureSize2D -> TextureSize2D -> Bool
$c< :: TextureSize2D -> TextureSize2D -> Bool
compare :: TextureSize2D -> TextureSize2D -> Ordering
$ccompare :: TextureSize2D -> TextureSize2D -> Ordering
Ord, Int -> TextureSize2D -> ShowS
[TextureSize2D] -> ShowS
TextureSize2D -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TextureSize2D] -> ShowS
$cshowList :: [TextureSize2D] -> ShowS
show :: TextureSize2D -> String
$cshow :: TextureSize2D -> String
showsPrec :: Int -> TextureSize2D -> ShowS
$cshowsPrec :: Int -> TextureSize2D -> ShowS
Show )

data TextureSize3D = TextureSize3D !GLsizei !GLsizei !GLsizei
   deriving ( TextureSize3D -> TextureSize3D -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TextureSize3D -> TextureSize3D -> Bool
$c/= :: TextureSize3D -> TextureSize3D -> Bool
== :: TextureSize3D -> TextureSize3D -> Bool
$c== :: TextureSize3D -> TextureSize3D -> Bool
Eq, Eq TextureSize3D
TextureSize3D -> TextureSize3D -> Bool
TextureSize3D -> TextureSize3D -> Ordering
TextureSize3D -> TextureSize3D -> TextureSize3D
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TextureSize3D -> TextureSize3D -> TextureSize3D
$cmin :: TextureSize3D -> TextureSize3D -> TextureSize3D
max :: TextureSize3D -> TextureSize3D -> TextureSize3D
$cmax :: TextureSize3D -> TextureSize3D -> TextureSize3D
>= :: TextureSize3D -> TextureSize3D -> Bool
$c>= :: TextureSize3D -> TextureSize3D -> Bool
> :: TextureSize3D -> TextureSize3D -> Bool
$c> :: TextureSize3D -> TextureSize3D -> Bool
<= :: TextureSize3D -> TextureSize3D -> Bool
$c<= :: TextureSize3D -> TextureSize3D -> Bool
< :: TextureSize3D -> TextureSize3D -> Bool
$c< :: TextureSize3D -> TextureSize3D -> Bool
compare :: TextureSize3D -> TextureSize3D -> Ordering
$ccompare :: TextureSize3D -> TextureSize3D -> Ordering
Ord, Int -> TextureSize3D -> ShowS
[TextureSize3D] -> ShowS
TextureSize3D -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TextureSize3D] -> ShowS
$cshowList :: [TextureSize3D] -> ShowS
show :: TextureSize3D -> String
$cshow :: TextureSize3D -> String
showsPrec :: Int -> TextureSize3D -> ShowS
$cshowsPrec :: Int -> TextureSize3D -> ShowS
Show )

--------------------------------------------------------------------------------

texImage1D :: OneDimensionalTextureTarget t => t -> Proxy -> Level -> PixelInternalFormat -> TextureSize1D -> Border -> PixelData a -> IO ()
texImage1D :: forall t a.
OneDimensionalTextureTarget t =>
t
-> Proxy
-> GLint
-> PixelInternalFormat
-> TextureSize1D
-> GLint
-> PixelData a
-> IO ()
texImage1D t
target Proxy
proxy GLint
level PixelInternalFormat
int (TextureSize1D GLint
w) GLint
border PixelData a
pd =
   forall a b. PixelData a -> (GLenum -> GLenum -> Ptr a -> b) -> b
withPixelData PixelData a
pd forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> GLenum
-> GLenum
-> Ptr a
-> m ()
glTexImage1D
         (forall t. OneDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalOneDimensionalTextureTarget Proxy
proxy t
target)
         GLint
level (PixelInternalFormat -> GLint
marshalPixelInternalFormat PixelInternalFormat
int) GLint
w GLint
border

--------------------------------------------------------------------------------

texImage2D :: TwoDimensionalTextureTarget t => t -> Proxy -> Level -> PixelInternalFormat -> TextureSize2D -> Border -> PixelData a -> IO ()
texImage2D :: forall t a.
TwoDimensionalTextureTarget t =>
t
-> Proxy
-> GLint
-> PixelInternalFormat
-> TextureSize2D
-> GLint
-> PixelData a
-> IO ()
texImage2D t
target Proxy
proxy GLint
level PixelInternalFormat
int (TextureSize2D GLint
w GLint
h) GLint
border PixelData a
pd =
   forall a b. PixelData a -> (GLenum -> GLenum -> Ptr a -> b) -> b
withPixelData PixelData a
pd forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLenum
-> GLenum
-> Ptr a
-> m ()
glTexImage2D (forall t. TwoDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalTwoDimensionalTextureTarget Proxy
proxy t
target) GLint
level (PixelInternalFormat -> GLint
marshalPixelInternalFormat PixelInternalFormat
int) GLint
w GLint
h GLint
border

--------------------------------------------------------------------------------

texImage3D :: ThreeDimensionalTextureTarget t => t -> Proxy -> Level -> PixelInternalFormat -> TextureSize3D -> Border -> PixelData a -> IO ()
texImage3D :: forall t a.
ThreeDimensionalTextureTarget t =>
t
-> Proxy
-> GLint
-> PixelInternalFormat
-> TextureSize3D
-> GLint
-> PixelData a
-> IO ()
texImage3D t
target Proxy
proxy GLint
level PixelInternalFormat
int (TextureSize3D GLint
w GLint
h GLint
d) GLint
border PixelData a
pd =
   forall a b. PixelData a -> (GLenum -> GLenum -> Ptr a -> b) -> b
withPixelData PixelData a
pd forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLenum
-> GLenum
-> Ptr a
-> m ()
glTexImage3D
         (forall t. ThreeDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalThreeDimensionalTextureTarget Proxy
proxy t
target)
         GLint
level (PixelInternalFormat -> GLint
marshalPixelInternalFormat PixelInternalFormat
int) GLint
w GLint
h GLint
d GLint
border

--------------------------------------------------------------------------------

getTexImage :: GettableTextureTarget t => t -> Level -> PixelData a -> IO ()
getTexImage :: forall t a.
GettableTextureTarget t =>
t -> GLint -> PixelData a -> IO ()
getTexImage t
target GLint
level PixelData a
pd =
   forall a b. PixelData a -> (GLenum -> GLenum -> Ptr a -> b) -> b
withPixelData PixelData a
pd forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a.
MonadIO m =>
GLenum -> GLint -> GLenum -> GLenum -> Ptr a -> m ()
glGetTexImage (forall t. GettableTextureTarget t => t -> GLenum
marshalGettableTextureTarget t
target) GLint
level

--------------------------------------------------------------------------------

copyTexImage1D :: OneDimensionalTextureTarget t => t -> Level -> PixelInternalFormat -> Position -> TextureSize1D -> Border -> IO ()
copyTexImage1D :: forall t.
OneDimensionalTextureTarget t =>
t
-> GLint
-> PixelInternalFormat
-> Position
-> TextureSize1D
-> GLint
-> IO ()
copyTexImage1D t
target GLint
level PixelInternalFormat
int (Position GLint
x GLint
y) (TextureSize1D GLint
w) GLint
border =
   forall (m :: * -> *).
MonadIO m =>
GLenum
-> GLint -> GLenum -> GLint -> GLint -> GLint -> GLint -> m ()
glCopyTexImage1D
      (forall t. OneDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalOneDimensionalTextureTarget Proxy
NoProxy t
target) GLint
level
      (PixelInternalFormat -> GLenum
marshalPixelInternalFormat' PixelInternalFormat
int) GLint
x GLint
y GLint
w GLint
border

--------------------------------------------------------------------------------

copyTexImage2D :: TwoDimensionalTextureTarget t => t -> Level -> PixelInternalFormat -> Position -> TextureSize2D -> Border -> IO ()
copyTexImage2D :: forall t.
TwoDimensionalTextureTarget t =>
t
-> GLint
-> PixelInternalFormat
-> Position
-> TextureSize2D
-> GLint
-> IO ()
copyTexImage2D t
target GLint
level PixelInternalFormat
int (Position GLint
x GLint
y) (TextureSize2D GLint
w GLint
h) GLint
border =
   forall (m :: * -> *).
MonadIO m =>
GLenum
-> GLint
-> GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> m ()
glCopyTexImage2D
      (forall t. TwoDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalTwoDimensionalTextureTarget Proxy
NoProxy t
target) GLint
level
      (PixelInternalFormat -> GLenum
marshalPixelInternalFormat' PixelInternalFormat
int) GLint
x GLint
y GLint
w GLint
h GLint
border

--------------------------------------------------------------------------------

texSubImage1D :: OneDimensionalTextureTarget t => t -> Level -> TexturePosition1D -> TextureSize1D -> PixelData a -> IO ()
texSubImage1D :: forall t a.
OneDimensionalTextureTarget t =>
t
-> GLint
-> TexturePosition1D
-> TextureSize1D
-> PixelData a
-> IO ()
texSubImage1D t
target GLint
level (TexturePosition1D GLint
xOff) (TextureSize1D GLint
w) PixelData a
pd =
   forall a b. PixelData a -> (GLenum -> GLenum -> Ptr a -> b) -> b
withPixelData PixelData a
pd forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint -> GLint -> GLint -> GLenum -> GLenum -> Ptr a -> m ()
glTexSubImage1D (forall t. OneDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalOneDimensionalTextureTarget Proxy
NoProxy t
target) GLint
level GLint
xOff GLint
w

--------------------------------------------------------------------------------

texSubImage2D :: TwoDimensionalTextureTarget t => t -> Level -> TexturePosition2D -> TextureSize2D -> PixelData a -> IO ()
texSubImage2D :: forall t a.
TwoDimensionalTextureTarget t =>
t
-> GLint
-> TexturePosition2D
-> TextureSize2D
-> PixelData a
-> IO ()
texSubImage2D t
target GLint
level (TexturePosition2D GLint
xOff GLint
yOff) (TextureSize2D GLint
w GLint
h) PixelData a
pd =
   forall a b. PixelData a -> (GLenum -> GLenum -> Ptr a -> b) -> b
withPixelData PixelData a
pd forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLenum
-> GLenum
-> Ptr a
-> m ()
glTexSubImage2D (forall t. TwoDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalTwoDimensionalTextureTarget Proxy
NoProxy t
target) GLint
level GLint
xOff GLint
yOff GLint
w GLint
h

--------------------------------------------------------------------------------

texSubImage3D :: ThreeDimensionalTextureTarget t => t -> Level -> TexturePosition3D -> TextureSize3D -> PixelData a -> IO ()
texSubImage3D :: forall t a.
ThreeDimensionalTextureTarget t =>
t
-> GLint
-> TexturePosition3D
-> TextureSize3D
-> PixelData a
-> IO ()
texSubImage3D t
target GLint
level (TexturePosition3D GLint
xOff GLint
yOff GLint
zOff) (TextureSize3D GLint
w GLint
h GLint
d) PixelData a
pd =
   forall a b. PixelData a -> (GLenum -> GLenum -> Ptr a -> b) -> b
withPixelData PixelData a
pd forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLenum
-> GLenum
-> Ptr a
-> m ()
glTexSubImage3D (forall t. ThreeDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalThreeDimensionalTextureTarget Proxy
NoProxy t
target) GLint
level GLint
xOff GLint
yOff GLint
zOff GLint
w GLint
h GLint
d

--------------------------------------------------------------------------------

copyTexSubImage1D :: OneDimensionalTextureTarget t => t -> Level -> TexturePosition1D -> Position -> TextureSize1D -> IO ()
copyTexSubImage1D :: forall t.
OneDimensionalTextureTarget t =>
t
-> GLint -> TexturePosition1D -> Position -> TextureSize1D -> IO ()
copyTexSubImage1D t
target GLint
level (TexturePosition1D GLint
xOff) (Position GLint
x GLint
y) (TextureSize1D GLint
w) =
   forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> GLint -> GLint -> GLint -> GLint -> m ()
glCopyTexSubImage1D (forall t. OneDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalOneDimensionalTextureTarget Proxy
NoProxy t
target) GLint
level GLint
xOff GLint
x GLint
y GLint
w

--------------------------------------------------------------------------------

copyTexSubImage2D :: TwoDimensionalTextureTarget t => t -> Level -> TexturePosition2D -> Position -> TextureSize2D -> IO ()
copyTexSubImage2D :: forall t.
TwoDimensionalTextureTarget t =>
t
-> GLint -> TexturePosition2D -> Position -> TextureSize2D -> IO ()
copyTexSubImage2D t
target GLint
level (TexturePosition2D GLint
xOff GLint
yOff) (Position GLint
x GLint
y) (TextureSize2D GLint
w GLint
h) =
   forall (m :: * -> *).
MonadIO m =>
GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> m ()
glCopyTexSubImage2D (forall t. TwoDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalTwoDimensionalTextureTarget Proxy
NoProxy t
target) GLint
level GLint
xOff GLint
yOff GLint
x GLint
y GLint
w GLint
h

--------------------------------------------------------------------------------

copyTexSubImage3D :: ThreeDimensionalTextureTarget t => t -> Level -> TexturePosition3D -> Position -> TextureSize2D -> IO ()
copyTexSubImage3D :: forall t.
ThreeDimensionalTextureTarget t =>
t
-> GLint -> TexturePosition3D -> Position -> TextureSize2D -> IO ()
copyTexSubImage3D t
target GLint
level (TexturePosition3D GLint
xOff GLint
yOff GLint
zOff) (Position GLint
x GLint
y) (TextureSize2D GLint
w GLint
h) =
   forall (m :: * -> *).
MonadIO m =>
GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> m ()
glCopyTexSubImage3D (forall t. ThreeDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalThreeDimensionalTextureTarget Proxy
NoProxy t
target) GLint
level GLint
xOff GLint
yOff GLint
zOff GLint
x GLint
y GLint
w GLint
h

--------------------------------------------------------------------------------

newtype CompressedTextureFormat = CompressedTextureFormat GLenum
   deriving ( CompressedTextureFormat -> CompressedTextureFormat -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
$c/= :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
== :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
$c== :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
Eq, Eq CompressedTextureFormat
CompressedTextureFormat -> CompressedTextureFormat -> Bool
CompressedTextureFormat -> CompressedTextureFormat -> Ordering
CompressedTextureFormat
-> CompressedTextureFormat -> CompressedTextureFormat
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: CompressedTextureFormat
-> CompressedTextureFormat -> CompressedTextureFormat
$cmin :: CompressedTextureFormat
-> CompressedTextureFormat -> CompressedTextureFormat
max :: CompressedTextureFormat
-> CompressedTextureFormat -> CompressedTextureFormat
$cmax :: CompressedTextureFormat
-> CompressedTextureFormat -> CompressedTextureFormat
>= :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
$c>= :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
> :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
$c> :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
<= :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
$c<= :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
< :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
$c< :: CompressedTextureFormat -> CompressedTextureFormat -> Bool
compare :: CompressedTextureFormat -> CompressedTextureFormat -> Ordering
$ccompare :: CompressedTextureFormat -> CompressedTextureFormat -> Ordering
Ord, Int -> CompressedTextureFormat -> ShowS
[CompressedTextureFormat] -> ShowS
CompressedTextureFormat -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CompressedTextureFormat] -> ShowS
$cshowList :: [CompressedTextureFormat] -> ShowS
show :: CompressedTextureFormat -> String
$cshow :: CompressedTextureFormat -> String
showsPrec :: Int -> CompressedTextureFormat -> ShowS
$cshowsPrec :: Int -> CompressedTextureFormat -> ShowS
Show )

compressedTextureFormats :: GettableStateVar [CompressedTextureFormat]
compressedTextureFormats :: GettableStateVar [CompressedTextureFormat]
compressedTextureFormats =
   forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$ do
      Int
n <- forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getInteger1 forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetNumCompressedTextureFormats
      forall p a. GetPNameNI p => (GLenum -> a) -> p -> Int -> IO [a]
getEnumN GLenum -> CompressedTextureFormat
CompressedTextureFormat PNameNI
GetCompressedTextureFormats Int
n

--------------------------------------------------------------------------------

data CompressedPixelData a =
     CompressedPixelData !CompressedTextureFormat GLsizei (Ptr a)
   deriving ( CompressedPixelData a -> CompressedPixelData a -> Bool
forall a. CompressedPixelData a -> CompressedPixelData a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CompressedPixelData a -> CompressedPixelData a -> Bool
$c/= :: forall a. CompressedPixelData a -> CompressedPixelData a -> Bool
== :: CompressedPixelData a -> CompressedPixelData a -> Bool
$c== :: forall a. CompressedPixelData a -> CompressedPixelData a -> Bool
Eq, CompressedPixelData a -> CompressedPixelData a -> Bool
CompressedPixelData a -> CompressedPixelData a -> Ordering
forall a. Eq (CompressedPixelData a)
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. CompressedPixelData a -> CompressedPixelData a -> Bool
forall a.
CompressedPixelData a -> CompressedPixelData a -> Ordering
forall a.
CompressedPixelData a
-> CompressedPixelData a -> CompressedPixelData a
min :: CompressedPixelData a
-> CompressedPixelData a -> CompressedPixelData a
$cmin :: forall a.
CompressedPixelData a
-> CompressedPixelData a -> CompressedPixelData a
max :: CompressedPixelData a
-> CompressedPixelData a -> CompressedPixelData a
$cmax :: forall a.
CompressedPixelData a
-> CompressedPixelData a -> CompressedPixelData a
>= :: CompressedPixelData a -> CompressedPixelData a -> Bool
$c>= :: forall a. CompressedPixelData a -> CompressedPixelData a -> Bool
> :: CompressedPixelData a -> CompressedPixelData a -> Bool
$c> :: forall a. CompressedPixelData a -> CompressedPixelData a -> Bool
<= :: CompressedPixelData a -> CompressedPixelData a -> Bool
$c<= :: forall a. CompressedPixelData a -> CompressedPixelData a -> Bool
< :: CompressedPixelData a -> CompressedPixelData a -> Bool
$c< :: forall a. CompressedPixelData a -> CompressedPixelData a -> Bool
compare :: CompressedPixelData a -> CompressedPixelData a -> Ordering
$ccompare :: forall a.
CompressedPixelData a -> CompressedPixelData a -> Ordering
Ord, Int -> CompressedPixelData a -> ShowS
forall a. Int -> CompressedPixelData a -> ShowS
forall a. [CompressedPixelData a] -> ShowS
forall a. CompressedPixelData a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CompressedPixelData a] -> ShowS
$cshowList :: forall a. [CompressedPixelData a] -> ShowS
show :: CompressedPixelData a -> String
$cshow :: forall a. CompressedPixelData a -> String
showsPrec :: Int -> CompressedPixelData a -> ShowS
$cshowsPrec :: forall a. Int -> CompressedPixelData a -> ShowS
Show )

withCompressedPixelData ::
   CompressedPixelData a -> (GLenum -> GLsizei -> Ptr a -> b) -> b
withCompressedPixelData :: forall a b.
CompressedPixelData a -> (GLenum -> GLint -> Ptr a -> b) -> b
withCompressedPixelData
   (CompressedPixelData (CompressedTextureFormat GLenum
fmt) GLint
size Ptr a
ptr) GLenum -> GLint -> Ptr a -> b
f =
   GLenum -> GLint -> Ptr a -> b
f GLenum
fmt GLint
size Ptr a
ptr

--------------------------------------------------------------------------------

compressedTexImage1D :: OneDimensionalTextureTarget t => t -> Proxy -> Level -> TextureSize1D -> Border -> CompressedPixelData a -> IO ()
compressedTexImage1D :: forall t a.
OneDimensionalTextureTarget t =>
t
-> Proxy
-> GLint
-> TextureSize1D
-> GLint
-> CompressedPixelData a
-> IO ()
compressedTexImage1D t
target Proxy
proxy GLint
level (TextureSize1D GLint
w) GLint
border CompressedPixelData a
cpd =
   forall a b.
CompressedPixelData a -> (GLenum -> GLint -> Ptr a -> b) -> b
withCompressedPixelData CompressedPixelData a
cpd forall a b. (a -> b) -> a -> b
$ \GLenum
fmt ->
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint -> GLenum -> GLint -> GLint -> GLint -> Ptr a -> m ()
glCompressedTexImage1D
         (forall t. OneDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalOneDimensionalTextureTarget Proxy
proxy t
target) GLint
level GLenum
fmt GLint
w GLint
border

--------------------------------------------------------------------------------

-- Note that the spec currently disallows TextureRectangle, but then again the
-- extension specification explicitly allows a relaxation in the future.
compressedTexImage2D :: TwoDimensionalTextureTarget t => t -> Proxy -> Level -> TextureSize2D -> Border -> CompressedPixelData a -> IO ()
compressedTexImage2D :: forall t a.
TwoDimensionalTextureTarget t =>
t
-> Proxy
-> GLint
-> TextureSize2D
-> GLint
-> CompressedPixelData a
-> IO ()
compressedTexImage2D t
target Proxy
proxy GLint
level (TextureSize2D GLint
w GLint
h) GLint
border CompressedPixelData a
cpd =
   forall a b.
CompressedPixelData a -> (GLenum -> GLint -> Ptr a -> b) -> b
withCompressedPixelData CompressedPixelData a
cpd forall a b. (a -> b) -> a -> b
$ \GLenum
fmt ->
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint
-> GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> Ptr a
-> m ()
glCompressedTexImage2D (forall t. TwoDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalTwoDimensionalTextureTarget Proxy
proxy t
target) GLint
level GLenum
fmt GLint
w GLint
h GLint
border

--------------------------------------------------------------------------------

compressedTexImage3D :: ThreeDimensionalTextureTarget t => t -> Proxy -> Level -> TextureSize3D -> Border -> CompressedPixelData a -> IO ()
compressedTexImage3D :: forall t a.
ThreeDimensionalTextureTarget t =>
t
-> Proxy
-> GLint
-> TextureSize3D
-> GLint
-> CompressedPixelData a
-> IO ()
compressedTexImage3D t
target Proxy
proxy GLint
level (TextureSize3D GLint
w GLint
h GLint
d) GLint
border CompressedPixelData a
cpd =
   forall a b.
CompressedPixelData a -> (GLenum -> GLint -> Ptr a -> b) -> b
withCompressedPixelData CompressedPixelData a
cpd forall a b. (a -> b) -> a -> b
$ \GLenum
fmt ->
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint
-> GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> Ptr a
-> m ()
glCompressedTexImage3D
         (forall t. ThreeDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalThreeDimensionalTextureTarget Proxy
proxy t
target) GLint
level GLenum
fmt GLint
w GLint
h GLint
d GLint
border

--------------------------------------------------------------------------------

getCompressedTexImage :: GettableTextureTarget t => t -> Level -> Ptr a -> IO ()
getCompressedTexImage :: forall t a. GettableTextureTarget t => t -> GLint -> Ptr a -> IO ()
getCompressedTexImage = forall (m :: * -> *) a.
MonadIO m =>
GLenum -> GLint -> Ptr a -> m ()
glGetCompressedTexImage forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall t. GettableTextureTarget t => t -> GLenum
marshalGettableTextureTarget

--------------------------------------------------------------------------------

compressedTexSubImage1D :: OneDimensionalTextureTarget t => t -> Level -> TexturePosition1D -> TextureSize1D -> CompressedPixelData a -> IO ()
compressedTexSubImage1D :: forall t a.
OneDimensionalTextureTarget t =>
t
-> GLint
-> TexturePosition1D
-> TextureSize1D
-> CompressedPixelData a
-> IO ()
compressedTexSubImage1D t
target GLint
level (TexturePosition1D GLint
xOff) (TextureSize1D GLint
w) CompressedPixelData a
cpd =
   forall a b.
CompressedPixelData a -> (GLenum -> GLint -> Ptr a -> b) -> b
withCompressedPixelData CompressedPixelData a
cpd forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint -> GLint -> GLint -> GLenum -> GLint -> Ptr a -> m ()
glCompressedTexSubImage1D (forall t. OneDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalOneDimensionalTextureTarget Proxy
NoProxy t
target) GLint
level GLint
xOff GLint
w

--------------------------------------------------------------------------------

compressedTexSubImage2D :: TwoDimensionalTextureTarget t => t -> Level -> TexturePosition2D -> TextureSize2D -> CompressedPixelData a -> IO ()
compressedTexSubImage2D :: forall t a.
TwoDimensionalTextureTarget t =>
t
-> GLint
-> TexturePosition2D
-> TextureSize2D
-> CompressedPixelData a
-> IO ()
compressedTexSubImage2D t
target  GLint
level (TexturePosition2D GLint
xOff GLint
yOff) (TextureSize2D GLint
w GLint
h) CompressedPixelData a
cpd =
   forall a b.
CompressedPixelData a -> (GLenum -> GLint -> Ptr a -> b) -> b
withCompressedPixelData CompressedPixelData a
cpd forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLenum
-> GLint
-> Ptr a
-> m ()
glCompressedTexSubImage2D (forall t. TwoDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalTwoDimensionalTextureTarget Proxy
NoProxy t
target) GLint
level GLint
xOff GLint
yOff GLint
w GLint
h

--------------------------------------------------------------------------------

-- see texImage3D, but no proxies
compressedTexSubImage3D :: ThreeDimensionalTextureTarget t => t -> Level -> TexturePosition3D -> TextureSize3D -> CompressedPixelData a -> IO ()
compressedTexSubImage3D :: forall t a.
ThreeDimensionalTextureTarget t =>
t
-> GLint
-> TexturePosition3D
-> TextureSize3D
-> CompressedPixelData a
-> IO ()
compressedTexSubImage3D t
target GLint
level (TexturePosition3D GLint
xOff GLint
yOff GLint
zOff) (TextureSize3D GLint
w GLint
h GLint
d) CompressedPixelData a
cpd =
   forall a b.
CompressedPixelData a -> (GLenum -> GLint -> Ptr a -> b) -> b
withCompressedPixelData CompressedPixelData a
cpd forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a.
MonadIO m =>
GLenum
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLint
-> GLenum
-> GLint
-> Ptr a
-> m ()
glCompressedTexSubImage3D (forall t. ThreeDimensionalTextureTarget t => Proxy -> t -> GLenum
marshalThreeDimensionalTextureTarget Proxy
NoProxy t
target) GLint
level GLint
xOff GLint
yOff GLint
zOff GLint
w GLint
h GLint
d

--------------------------------------------------------------------------------

data SampleLocations =
     FlexibleSampleLocations
   | FixedSampleLocations
   deriving ( SampleLocations -> SampleLocations -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SampleLocations -> SampleLocations -> Bool
$c/= :: SampleLocations -> SampleLocations -> Bool
== :: SampleLocations -> SampleLocations -> Bool
$c== :: SampleLocations -> SampleLocations -> Bool
Eq, Eq SampleLocations
SampleLocations -> SampleLocations -> Bool
SampleLocations -> SampleLocations -> Ordering
SampleLocations -> SampleLocations -> SampleLocations
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: SampleLocations -> SampleLocations -> SampleLocations
$cmin :: SampleLocations -> SampleLocations -> SampleLocations
max :: SampleLocations -> SampleLocations -> SampleLocations
$cmax :: SampleLocations -> SampleLocations -> SampleLocations
>= :: SampleLocations -> SampleLocations -> Bool
$c>= :: SampleLocations -> SampleLocations -> Bool
> :: SampleLocations -> SampleLocations -> Bool
$c> :: SampleLocations -> SampleLocations -> Bool
<= :: SampleLocations -> SampleLocations -> Bool
$c<= :: SampleLocations -> SampleLocations -> Bool
< :: SampleLocations -> SampleLocations -> Bool
$c< :: SampleLocations -> SampleLocations -> Bool
compare :: SampleLocations -> SampleLocations -> Ordering
$ccompare :: SampleLocations -> SampleLocations -> Ordering
Ord, Int -> SampleLocations -> ShowS
[SampleLocations] -> ShowS
SampleLocations -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SampleLocations] -> ShowS
$cshowList :: [SampleLocations] -> ShowS
show :: SampleLocations -> String
$cshow :: SampleLocations -> String
showsPrec :: Int -> SampleLocations -> ShowS
$cshowsPrec :: Int -> SampleLocations -> ShowS
Show )

marshalSampleLocations :: SampleLocations -> GLboolean
marshalSampleLocations :: SampleLocations -> GLboolean
marshalSampleLocations = forall a. Num a => Bool -> a
marshalGLboolean forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SampleLocations
FixedSampleLocations forall a. Eq a => a -> a -> Bool
==)

{-
unmarshalSampleLocations :: GLboolean -> SampleLocations
unmarshalSampleLocations x =
   if unmarshalGLboolean x
      then FixedSampleLocations
      else FlexibleSampleLocations
-}

--------------------------------------------------------------------------------

texImage2DMultisample :: TextureTarget2DMultisample
                      -> Proxy
                      -> Samples
                      -> PixelInternalFormat
                      -> TextureSize2D
                      -> SampleLocations
                      -> IO ()
texImage2DMultisample :: TextureTarget2DMultisample
-> Proxy
-> Samples
-> PixelInternalFormat
-> TextureSize2D
-> SampleLocations
-> IO ()
texImage2DMultisample TextureTarget2DMultisample
target Proxy
proxy (Samples GLint
s) PixelInternalFormat
int (TextureSize2D GLint
w GLint
h) SampleLocations
loc =
   forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> GLenum -> GLint -> GLint -> GLboolean -> m ()
glTexImage2DMultisample
      (forall t. ParameterizedTextureTarget t => Proxy -> t -> GLenum
marshalMultisample Proxy
proxy TextureTarget2DMultisample
target) GLint
s (forall a b. (Integral a, Num b) => a -> b
fromIntegral (PixelInternalFormat -> GLint
marshalPixelInternalFormat PixelInternalFormat
int))
      GLint
w GLint
h (SampleLocations -> GLboolean
marshalSampleLocations SampleLocations
loc)

marshalMultisample :: ParameterizedTextureTarget t => Proxy -> t -> GLenum
marshalMultisample :: forall t. ParameterizedTextureTarget t => Proxy -> t -> GLenum
marshalMultisample Proxy
proxy = case Proxy
proxy of
   Proxy
NoProxy -> forall t. ParameterizedTextureTarget t => t -> GLenum
marshalParameterizedTextureTarget
   Proxy
Proxy -> forall t. ParameterizedTextureTarget t => t -> GLenum
marshalParameterizedTextureTargetProxy

texImage3DMultisample :: TextureTarget2DMultisampleArray
                      -> Proxy
                      -> Samples
                      -> PixelInternalFormat
                      -> TextureSize3D
                      -> SampleLocations
                      -> IO ()
texImage3DMultisample :: TextureTarget2DMultisampleArray
-> Proxy
-> Samples
-> PixelInternalFormat
-> TextureSize3D
-> SampleLocations
-> IO ()
texImage3DMultisample TextureTarget2DMultisampleArray
target Proxy
proxy (Samples GLint
s) PixelInternalFormat
int (TextureSize3D GLint
w GLint
h GLint
d) SampleLocations
loc =
   forall (m :: * -> *).
MonadIO m =>
GLenum
-> GLint -> GLenum -> GLint -> GLint -> GLint -> GLboolean -> m ()
glTexImage3DMultisample
      (forall t. ParameterizedTextureTarget t => Proxy -> t -> GLenum
marshalMultisample Proxy
proxy TextureTarget2DMultisampleArray
target) GLint
s (forall a b. (Integral a, Num b) => a -> b
fromIntegral (PixelInternalFormat -> GLint
marshalPixelInternalFormat PixelInternalFormat
int))
      GLint
w GLint
h GLint
d (SampleLocations -> GLboolean
marshalSampleLocations SampleLocations
loc)

--------------------------------------------------------------------------------

maxTextureSize :: GettableStateVar GLsizei
maxTextureSize :: GettableStateVar GLint
maxTextureSize = PName1I -> GettableStateVar GLint
maxTextureSizeWith PName1I
GetMaxTextureSize

maxCubeMapTextureSize :: GettableStateVar GLsizei
maxCubeMapTextureSize :: GettableStateVar GLint
maxCubeMapTextureSize = PName1I -> GettableStateVar GLint
maxTextureSizeWith PName1I
GetMaxCubeMapTextureSize

maxRectangleTextureSize :: GettableStateVar GLsizei
maxRectangleTextureSize :: GettableStateVar GLint
maxRectangleTextureSize = PName1I -> GettableStateVar GLint
maxTextureSizeWith PName1I
GetMaxRectangleTextureSize

max3DTextureSize :: GettableStateVar GLsizei
max3DTextureSize :: GettableStateVar GLint
max3DTextureSize = PName1I -> GettableStateVar GLint
maxTextureSizeWith PName1I
GetMax3DTextureSize

maxArrayTextureLayers :: GettableStateVar GLsizei
maxArrayTextureLayers :: GettableStateVar GLint
maxArrayTextureLayers = PName1I -> GettableStateVar GLint
maxTextureSizeWith PName1I
GetMaxArrayTextureLayers

maxSampleMaskWords :: GettableStateVar GLsizei
maxSampleMaskWords :: GettableStateVar GLint
maxSampleMaskWords = PName1I -> GettableStateVar GLint
maxTextureSizeWith PName1I
GetMaxSampleMaskWords

maxColorTextureSamples :: GettableStateVar GLsizei
maxColorTextureSamples :: GettableStateVar GLint
maxColorTextureSamples = PName1I -> GettableStateVar GLint
maxTextureSizeWith PName1I
GetMaxColorTextureSamples

maxDepthTextureSamples :: GettableStateVar GLsizei
maxDepthTextureSamples :: GettableStateVar GLint
maxDepthTextureSamples = PName1I -> GettableStateVar GLint
maxTextureSizeWith PName1I
GetMaxDepthTextureSamples

maxIntegerSamples :: GettableStateVar GLsizei
maxIntegerSamples :: GettableStateVar GLint
maxIntegerSamples = PName1I -> GettableStateVar GLint
maxTextureSizeWith PName1I
GetMaxIntegerSamples

maxTextureSizeWith :: PName1I -> GettableStateVar GLsizei
maxTextureSizeWith :: PName1I -> GettableStateVar GLint
maxTextureSizeWith = forall a. IO a -> IO a
makeGettableStateVar forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getInteger1 forall a b. (Integral a, Num b) => a -> b
fromIntegral