{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- An object to build the uniforms data for a @GskGLShader@.

#if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__))
#define ENABLE_OVERLOADING
#endif

module GI.Gsk.Structs.ShaderArgsBuilder
    ( 

-- * Exported types
    ShaderArgsBuilder(..)                   ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [ref]("GI.Gsk.Structs.ShaderArgsBuilder#g:method:ref"), [toArgs]("GI.Gsk.Structs.ShaderArgsBuilder#g:method:toArgs"), [unref]("GI.Gsk.Structs.ShaderArgsBuilder#g:method:unref").
-- 
-- ==== Getters
-- /None/.
-- 
-- ==== Setters
-- [setBool]("GI.Gsk.Structs.ShaderArgsBuilder#g:method:setBool"), [setFloat]("GI.Gsk.Structs.ShaderArgsBuilder#g:method:setFloat"), [setInt]("GI.Gsk.Structs.ShaderArgsBuilder#g:method:setInt"), [setUint]("GI.Gsk.Structs.ShaderArgsBuilder#g:method:setUint"), [setVec2]("GI.Gsk.Structs.ShaderArgsBuilder#g:method:setVec2"), [setVec3]("GI.Gsk.Structs.ShaderArgsBuilder#g:method:setVec3"), [setVec4]("GI.Gsk.Structs.ShaderArgsBuilder#g:method:setVec4").

#if defined(ENABLE_OVERLOADING)
    ResolveShaderArgsBuilderMethod          ,
#endif

-- ** new #method:new#

    shaderArgsBuilderNew                    ,


-- ** ref #method:ref#

#if defined(ENABLE_OVERLOADING)
    ShaderArgsBuilderRefMethodInfo          ,
#endif
    shaderArgsBuilderRef                    ,


-- ** setBool #method:setBool#

#if defined(ENABLE_OVERLOADING)
    ShaderArgsBuilderSetBoolMethodInfo      ,
#endif
    shaderArgsBuilderSetBool                ,


-- ** setFloat #method:setFloat#

#if defined(ENABLE_OVERLOADING)
    ShaderArgsBuilderSetFloatMethodInfo     ,
#endif
    shaderArgsBuilderSetFloat               ,


-- ** setInt #method:setInt#

#if defined(ENABLE_OVERLOADING)
    ShaderArgsBuilderSetIntMethodInfo       ,
#endif
    shaderArgsBuilderSetInt                 ,


-- ** setUint #method:setUint#

#if defined(ENABLE_OVERLOADING)
    ShaderArgsBuilderSetUintMethodInfo      ,
#endif
    shaderArgsBuilderSetUint                ,


-- ** setVec2 #method:setVec2#

#if defined(ENABLE_OVERLOADING)
    ShaderArgsBuilderSetVec2MethodInfo      ,
#endif
    shaderArgsBuilderSetVec2                ,


-- ** setVec3 #method:setVec3#

#if defined(ENABLE_OVERLOADING)
    ShaderArgsBuilderSetVec3MethodInfo      ,
#endif
    shaderArgsBuilderSetVec3                ,


-- ** setVec4 #method:setVec4#

#if defined(ENABLE_OVERLOADING)
    ShaderArgsBuilderSetVec4MethodInfo      ,
#endif
    shaderArgsBuilderSetVec4                ,


-- ** toArgs #method:toArgs#

#if defined(ENABLE_OVERLOADING)
    ShaderArgsBuilderToArgsMethodInfo       ,
#endif
    shaderArgsBuilderToArgs                 ,


-- ** unref #method:unref#

#if defined(ENABLE_OVERLOADING)
    ShaderArgsBuilderUnrefMethodInfo        ,
#endif
    shaderArgsBuilderUnref                  ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GHashTable as B.GHT
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GHC.Records as R

import qualified GI.GLib.Structs.Bytes as GLib.Bytes
import qualified GI.Graphene.Structs.Vec2 as Graphene.Vec2
import qualified GI.Graphene.Structs.Vec3 as Graphene.Vec3
import qualified GI.Graphene.Structs.Vec4 as Graphene.Vec4
import {-# SOURCE #-} qualified GI.Gsk.Objects.GLShader as Gsk.GLShader

-- | Memory-managed wrapper type.
newtype ShaderArgsBuilder = ShaderArgsBuilder (SP.ManagedPtr ShaderArgsBuilder)
    deriving (ShaderArgsBuilder -> ShaderArgsBuilder -> Bool
(ShaderArgsBuilder -> ShaderArgsBuilder -> Bool)
-> (ShaderArgsBuilder -> ShaderArgsBuilder -> Bool)
-> Eq ShaderArgsBuilder
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ShaderArgsBuilder -> ShaderArgsBuilder -> Bool
== :: ShaderArgsBuilder -> ShaderArgsBuilder -> Bool
$c/= :: ShaderArgsBuilder -> ShaderArgsBuilder -> Bool
/= :: ShaderArgsBuilder -> ShaderArgsBuilder -> Bool
Eq)

instance SP.ManagedPtrNewtype ShaderArgsBuilder where
    toManagedPtr :: ShaderArgsBuilder -> ManagedPtr ShaderArgsBuilder
toManagedPtr (ShaderArgsBuilder ManagedPtr ShaderArgsBuilder
p) = ManagedPtr ShaderArgsBuilder
p

foreign import ccall "gsk_shader_args_builder_get_type" c_gsk_shader_args_builder_get_type :: 
    IO GType

type instance O.ParentTypes ShaderArgsBuilder = '[]
instance O.HasParentTypes ShaderArgsBuilder

instance B.Types.TypedObject ShaderArgsBuilder where
    glibType :: IO GType
glibType = IO GType
c_gsk_shader_args_builder_get_type

instance B.Types.GBoxed ShaderArgsBuilder

-- | Convert 'ShaderArgsBuilder' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe ShaderArgsBuilder) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_gsk_shader_args_builder_get_type
    gvalueSet_ :: Ptr GValue -> Maybe ShaderArgsBuilder -> IO ()
gvalueSet_ Ptr GValue
gv Maybe ShaderArgsBuilder
P.Nothing = Ptr GValue -> Ptr ShaderArgsBuilder -> IO ()
forall a. Ptr GValue -> Ptr a -> IO ()
B.GValue.set_boxed Ptr GValue
gv (Ptr ShaderArgsBuilder
forall a. Ptr a
FP.nullPtr :: FP.Ptr ShaderArgsBuilder)
    gvalueSet_ Ptr GValue
gv (P.Just ShaderArgsBuilder
obj) = ShaderArgsBuilder -> (Ptr ShaderArgsBuilder -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr ShaderArgsBuilder
obj (Ptr GValue -> Ptr ShaderArgsBuilder -> IO ()
forall a. Ptr GValue -> Ptr a -> IO ()
B.GValue.set_boxed Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe ShaderArgsBuilder)
gvalueGet_ Ptr GValue
gv = do
        Ptr ShaderArgsBuilder
ptr <- Ptr GValue -> IO (Ptr ShaderArgsBuilder)
forall b. Ptr GValue -> IO (Ptr b)
B.GValue.get_boxed Ptr GValue
gv :: IO (Ptr ShaderArgsBuilder)
        if Ptr ShaderArgsBuilder
ptr Ptr ShaderArgsBuilder -> Ptr ShaderArgsBuilder -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr ShaderArgsBuilder
forall a. Ptr a
FP.nullPtr
        then ShaderArgsBuilder -> Maybe ShaderArgsBuilder
forall a. a -> Maybe a
P.Just (ShaderArgsBuilder -> Maybe ShaderArgsBuilder)
-> IO ShaderArgsBuilder -> IO (Maybe ShaderArgsBuilder)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr ShaderArgsBuilder -> ShaderArgsBuilder)
-> Ptr ShaderArgsBuilder -> IO ShaderArgsBuilder
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
B.ManagedPtr.newBoxed ManagedPtr ShaderArgsBuilder -> ShaderArgsBuilder
ShaderArgsBuilder Ptr ShaderArgsBuilder
ptr
        else Maybe ShaderArgsBuilder -> IO (Maybe ShaderArgsBuilder)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe ShaderArgsBuilder
forall a. Maybe a
P.Nothing
        
    


#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList ShaderArgsBuilder
type instance O.AttributeList ShaderArgsBuilder = ShaderArgsBuilderAttributeList
type ShaderArgsBuilderAttributeList = ('[ ] :: [(Symbol, *)])
#endif

-- method ShaderArgsBuilder::new
-- method type : Constructor
-- Args: [ Arg
--           { argCName = "shader"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "GLShader" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskGLShader`" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "initial_values"
--           , argType = TInterface Name { namespace = "GLib" , name = "Bytes" }
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "optional `GBytes` with initial values"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just
--               (TInterface
--                  Name { namespace = "Gsk" , name = "ShaderArgsBuilder" })
-- throws : False
-- Skip return : False

foreign import ccall "gsk_shader_args_builder_new" gsk_shader_args_builder_new :: 
    Ptr Gsk.GLShader.GLShader ->            -- shader : TInterface (Name {namespace = "Gsk", name = "GLShader"})
    Ptr GLib.Bytes.Bytes ->                 -- initial_values : TInterface (Name {namespace = "GLib", name = "Bytes"})
    IO (Ptr ShaderArgsBuilder)

-- | Allocates a builder that can be used to construct a new uniform data
-- chunk.
shaderArgsBuilderNew ::
    (B.CallStack.HasCallStack, MonadIO m, Gsk.GLShader.IsGLShader a) =>
    a
    -- ^ /@shader@/: a @GskGLShader@
    -> Maybe (GLib.Bytes.Bytes)
    -- ^ /@initialValues@/: optional @GBytes@ with initial values
    -> m ShaderArgsBuilder
    -- ^ __Returns:__ The newly allocated builder, free with
    --     'GI.Gsk.Structs.ShaderArgsBuilder.shaderArgsBuilderUnref'
shaderArgsBuilderNew :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsGLShader a) =>
a -> Maybe Bytes -> m ShaderArgsBuilder
shaderArgsBuilderNew a
shader Maybe Bytes
initialValues = IO ShaderArgsBuilder -> m ShaderArgsBuilder
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ShaderArgsBuilder -> m ShaderArgsBuilder)
-> IO ShaderArgsBuilder -> m ShaderArgsBuilder
forall a b. (a -> b) -> a -> b
$ do
    Ptr GLShader
shader' <- a -> IO (Ptr GLShader)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
shader
    Ptr Bytes
maybeInitialValues <- case Maybe Bytes
initialValues of
        Maybe Bytes
Nothing -> Ptr Bytes -> IO (Ptr Bytes)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr Bytes
forall a. Ptr a
nullPtr
        Just Bytes
jInitialValues -> do
            Ptr Bytes
jInitialValues' <- Bytes -> IO (Ptr Bytes)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Bytes
jInitialValues
            Ptr Bytes -> IO (Ptr Bytes)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr Bytes
jInitialValues'
    Ptr ShaderArgsBuilder
result <- Ptr GLShader -> Ptr Bytes -> IO (Ptr ShaderArgsBuilder)
gsk_shader_args_builder_new Ptr GLShader
shader' Ptr Bytes
maybeInitialValues
    Text -> Ptr ShaderArgsBuilder -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"shaderArgsBuilderNew" Ptr ShaderArgsBuilder
result
    ShaderArgsBuilder
result' <- ((ManagedPtr ShaderArgsBuilder -> ShaderArgsBuilder)
-> Ptr ShaderArgsBuilder -> IO ShaderArgsBuilder
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapBoxed ManagedPtr ShaderArgsBuilder -> ShaderArgsBuilder
ShaderArgsBuilder) Ptr ShaderArgsBuilder
result
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
shader
    Maybe Bytes -> (Bytes -> IO ()) -> IO ()
forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
whenJust Maybe Bytes
initialValues Bytes -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr
    ShaderArgsBuilder -> IO ShaderArgsBuilder
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ShaderArgsBuilder
result'

#if defined(ENABLE_OVERLOADING)
#endif

-- method ShaderArgsBuilder::ref
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "ShaderArgsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just
--               (TInterface
--                  Name { namespace = "Gsk" , name = "ShaderArgsBuilder" })
-- throws : False
-- Skip return : False

foreign import ccall "gsk_shader_args_builder_ref" gsk_shader_args_builder_ref :: 
    Ptr ShaderArgsBuilder ->                -- builder : TInterface (Name {namespace = "Gsk", name = "ShaderArgsBuilder"})
    IO (Ptr ShaderArgsBuilder)

-- | Increases the reference count of a @GskShaderArgsBuilder@ by one.
shaderArgsBuilderRef ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ShaderArgsBuilder
    -- ^ /@builder@/: a @GskShaderArgsBuilder@
    -> m ShaderArgsBuilder
    -- ^ __Returns:__ the passed in @GskShaderArgsBuilder@
shaderArgsBuilderRef :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ShaderArgsBuilder -> m ShaderArgsBuilder
shaderArgsBuilderRef ShaderArgsBuilder
builder = IO ShaderArgsBuilder -> m ShaderArgsBuilder
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ShaderArgsBuilder -> m ShaderArgsBuilder)
-> IO ShaderArgsBuilder -> m ShaderArgsBuilder
forall a b. (a -> b) -> a -> b
$ do
    Ptr ShaderArgsBuilder
builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    Ptr ShaderArgsBuilder
result <- Ptr ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
gsk_shader_args_builder_ref Ptr ShaderArgsBuilder
builder'
    Text -> Ptr ShaderArgsBuilder -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"shaderArgsBuilderRef" Ptr ShaderArgsBuilder
result
    ShaderArgsBuilder
result' <- ((ManagedPtr ShaderArgsBuilder -> ShaderArgsBuilder)
-> Ptr ShaderArgsBuilder -> IO ShaderArgsBuilder
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapBoxed ManagedPtr ShaderArgsBuilder -> ShaderArgsBuilder
ShaderArgsBuilder) Ptr ShaderArgsBuilder
result
    ShaderArgsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ShaderArgsBuilder
builder
    ShaderArgsBuilder -> IO ShaderArgsBuilder
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ShaderArgsBuilder
result'

#if defined(ENABLE_OVERLOADING)
data ShaderArgsBuilderRefMethodInfo
instance (signature ~ (m ShaderArgsBuilder), MonadIO m) => O.OverloadedMethod ShaderArgsBuilderRefMethodInfo ShaderArgsBuilder signature where
    overloadedMethod = shaderArgsBuilderRef

instance O.OverloadedMethodInfo ShaderArgsBuilderRefMethodInfo ShaderArgsBuilder where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Gsk.Structs.ShaderArgsBuilder.shaderArgsBuilderRef",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gsk-4.0.5/docs/GI-Gsk-Structs-ShaderArgsBuilder.html#v:shaderArgsBuilderRef"
        })


#endif

-- method ShaderArgsBuilder::set_bool
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "ShaderArgsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType = TBasicType TBoolean
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform to"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gsk_shader_args_builder_set_bool" gsk_shader_args_builder_set_bool :: 
    Ptr ShaderArgsBuilder ->                -- builder : TInterface (Name {namespace = "Gsk", name = "ShaderArgsBuilder"})
    Int32 ->                                -- idx : TBasicType TInt
    CInt ->                                 -- value : TBasicType TBoolean
    IO ()

-- | Sets the value of the uniform /@idx@/.
-- 
-- The uniform must be of bool type.
shaderArgsBuilderSetBool ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ShaderArgsBuilder
    -- ^ /@builder@/: a @GskShaderArgsBuilder@
    -> Int32
    -- ^ /@idx@/: index of the uniform
    -> Bool
    -- ^ /@value@/: value to set the uniform to
    -> m ()
shaderArgsBuilderSetBool :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ShaderArgsBuilder -> Int32 -> Bool -> m ()
shaderArgsBuilderSetBool ShaderArgsBuilder
builder Int32
idx Bool
value = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr ShaderArgsBuilder
builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    let value' :: CInt
value' = (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> (Bool -> Int) -> Bool -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum) Bool
value
    Ptr ShaderArgsBuilder -> Int32 -> CInt -> IO ()
gsk_shader_args_builder_set_bool Ptr ShaderArgsBuilder
builder' Int32
idx CInt
value'
    ShaderArgsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ShaderArgsBuilder
builder
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ShaderArgsBuilderSetBoolMethodInfo
instance (signature ~ (Int32 -> Bool -> m ()), MonadIO m) => O.OverloadedMethod ShaderArgsBuilderSetBoolMethodInfo ShaderArgsBuilder signature where
    overloadedMethod = shaderArgsBuilderSetBool

instance O.OverloadedMethodInfo ShaderArgsBuilderSetBoolMethodInfo ShaderArgsBuilder where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Gsk.Structs.ShaderArgsBuilder.shaderArgsBuilderSetBool",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gsk-4.0.5/docs/GI-Gsk-Structs-ShaderArgsBuilder.html#v:shaderArgsBuilderSetBool"
        })


#endif

-- method ShaderArgsBuilder::set_float
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "ShaderArgsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType = TBasicType TFloat
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform to"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gsk_shader_args_builder_set_float" gsk_shader_args_builder_set_float :: 
    Ptr ShaderArgsBuilder ->                -- builder : TInterface (Name {namespace = "Gsk", name = "ShaderArgsBuilder"})
    Int32 ->                                -- idx : TBasicType TInt
    CFloat ->                               -- value : TBasicType TFloat
    IO ()

-- | Sets the value of the uniform /@idx@/.
-- 
-- The uniform must be of float type.
shaderArgsBuilderSetFloat ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ShaderArgsBuilder
    -- ^ /@builder@/: a @GskShaderArgsBuilder@
    -> Int32
    -- ^ /@idx@/: index of the uniform
    -> Float
    -- ^ /@value@/: value to set the uniform to
    -> m ()
shaderArgsBuilderSetFloat :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ShaderArgsBuilder -> Int32 -> Float -> m ()
shaderArgsBuilderSetFloat ShaderArgsBuilder
builder Int32
idx Float
value = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr ShaderArgsBuilder
builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    let value' :: CFloat
value' = Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
value
    Ptr ShaderArgsBuilder -> Int32 -> CFloat -> IO ()
gsk_shader_args_builder_set_float Ptr ShaderArgsBuilder
builder' Int32
idx CFloat
value'
    ShaderArgsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ShaderArgsBuilder
builder
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ShaderArgsBuilderSetFloatMethodInfo
instance (signature ~ (Int32 -> Float -> m ()), MonadIO m) => O.OverloadedMethod ShaderArgsBuilderSetFloatMethodInfo ShaderArgsBuilder signature where
    overloadedMethod = shaderArgsBuilderSetFloat

instance O.OverloadedMethodInfo ShaderArgsBuilderSetFloatMethodInfo ShaderArgsBuilder where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Gsk.Structs.ShaderArgsBuilder.shaderArgsBuilderSetFloat",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gsk-4.0.5/docs/GI-Gsk-Structs-ShaderArgsBuilder.html#v:shaderArgsBuilderSetFloat"
        })


#endif

-- method ShaderArgsBuilder::set_int
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "ShaderArgsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType = TBasicType TInt32
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform to"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gsk_shader_args_builder_set_int" gsk_shader_args_builder_set_int :: 
    Ptr ShaderArgsBuilder ->                -- builder : TInterface (Name {namespace = "Gsk", name = "ShaderArgsBuilder"})
    Int32 ->                                -- idx : TBasicType TInt
    Int32 ->                                -- value : TBasicType TInt32
    IO ()

-- | Sets the value of the uniform /@idx@/.
-- 
-- The uniform must be of int type.
shaderArgsBuilderSetInt ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ShaderArgsBuilder
    -- ^ /@builder@/: a @GskShaderArgsBuilder@
    -> Int32
    -- ^ /@idx@/: index of the uniform
    -> Int32
    -- ^ /@value@/: value to set the uniform to
    -> m ()
shaderArgsBuilderSetInt :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ShaderArgsBuilder -> Int32 -> Int32 -> m ()
shaderArgsBuilderSetInt ShaderArgsBuilder
builder Int32
idx Int32
value = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr ShaderArgsBuilder
builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    Ptr ShaderArgsBuilder -> Int32 -> Int32 -> IO ()
gsk_shader_args_builder_set_int Ptr ShaderArgsBuilder
builder' Int32
idx Int32
value
    ShaderArgsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ShaderArgsBuilder
builder
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ShaderArgsBuilderSetIntMethodInfo
instance (signature ~ (Int32 -> Int32 -> m ()), MonadIO m) => O.OverloadedMethod ShaderArgsBuilderSetIntMethodInfo ShaderArgsBuilder signature where
    overloadedMethod = shaderArgsBuilderSetInt

instance O.OverloadedMethodInfo ShaderArgsBuilderSetIntMethodInfo ShaderArgsBuilder where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Gsk.Structs.ShaderArgsBuilder.shaderArgsBuilderSetInt",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gsk-4.0.5/docs/GI-Gsk-Structs-ShaderArgsBuilder.html#v:shaderArgsBuilderSetInt"
        })


#endif

-- method ShaderArgsBuilder::set_uint
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "ShaderArgsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType = TBasicType TUInt32
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform to"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gsk_shader_args_builder_set_uint" gsk_shader_args_builder_set_uint :: 
    Ptr ShaderArgsBuilder ->                -- builder : TInterface (Name {namespace = "Gsk", name = "ShaderArgsBuilder"})
    Int32 ->                                -- idx : TBasicType TInt
    Word32 ->                               -- value : TBasicType TUInt32
    IO ()

-- | Sets the value of the uniform /@idx@/.
-- 
-- The uniform must be of uint type.
shaderArgsBuilderSetUint ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ShaderArgsBuilder
    -- ^ /@builder@/: a @GskShaderArgsBuilder@
    -> Int32
    -- ^ /@idx@/: index of the uniform
    -> Word32
    -- ^ /@value@/: value to set the uniform to
    -> m ()
shaderArgsBuilderSetUint :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ShaderArgsBuilder -> Int32 -> Word32 -> m ()
shaderArgsBuilderSetUint ShaderArgsBuilder
builder Int32
idx Word32
value = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr ShaderArgsBuilder
builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    Ptr ShaderArgsBuilder -> Int32 -> Word32 -> IO ()
gsk_shader_args_builder_set_uint Ptr ShaderArgsBuilder
builder' Int32
idx Word32
value
    ShaderArgsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ShaderArgsBuilder
builder
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ShaderArgsBuilderSetUintMethodInfo
instance (signature ~ (Int32 -> Word32 -> m ()), MonadIO m) => O.OverloadedMethod ShaderArgsBuilderSetUintMethodInfo ShaderArgsBuilder signature where
    overloadedMethod = shaderArgsBuilderSetUint

instance O.OverloadedMethodInfo ShaderArgsBuilderSetUintMethodInfo ShaderArgsBuilder where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Gsk.Structs.ShaderArgsBuilder.shaderArgsBuilderSetUint",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gsk-4.0.5/docs/GI-Gsk-Structs-ShaderArgsBuilder.html#v:shaderArgsBuilderSetUint"
        })


#endif

-- method ShaderArgsBuilder::set_vec2
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "ShaderArgsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "A `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType =
--               TInterface Name { namespace = "Graphene" , name = "Vec2" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform too"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gsk_shader_args_builder_set_vec2" gsk_shader_args_builder_set_vec2 :: 
    Ptr ShaderArgsBuilder ->                -- builder : TInterface (Name {namespace = "Gsk", name = "ShaderArgsBuilder"})
    Int32 ->                                -- idx : TBasicType TInt
    Ptr Graphene.Vec2.Vec2 ->               -- value : TInterface (Name {namespace = "Graphene", name = "Vec2"})
    IO ()

-- | Sets the value of the uniform /@idx@/.
-- 
-- The uniform must be of vec2 type.
shaderArgsBuilderSetVec2 ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ShaderArgsBuilder
    -- ^ /@builder@/: A @GskShaderArgsBuilder@
    -> Int32
    -- ^ /@idx@/: index of the uniform
    -> Graphene.Vec2.Vec2
    -- ^ /@value@/: value to set the uniform too
    -> m ()
shaderArgsBuilderSetVec2 :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ShaderArgsBuilder -> Int32 -> Vec2 -> m ()
shaderArgsBuilderSetVec2 ShaderArgsBuilder
builder Int32
idx Vec2
value = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr ShaderArgsBuilder
builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    Ptr Vec2
value' <- Vec2 -> IO (Ptr Vec2)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Vec2
value
    Ptr ShaderArgsBuilder -> Int32 -> Ptr Vec2 -> IO ()
gsk_shader_args_builder_set_vec2 Ptr ShaderArgsBuilder
builder' Int32
idx Ptr Vec2
value'
    ShaderArgsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ShaderArgsBuilder
builder
    Vec2 -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr Vec2
value
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ShaderArgsBuilderSetVec2MethodInfo
instance (signature ~ (Int32 -> Graphene.Vec2.Vec2 -> m ()), MonadIO m) => O.OverloadedMethod ShaderArgsBuilderSetVec2MethodInfo ShaderArgsBuilder signature where
    overloadedMethod = shaderArgsBuilderSetVec2

instance O.OverloadedMethodInfo ShaderArgsBuilderSetVec2MethodInfo ShaderArgsBuilder where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Gsk.Structs.ShaderArgsBuilder.shaderArgsBuilderSetVec2",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gsk-4.0.5/docs/GI-Gsk-Structs-ShaderArgsBuilder.html#v:shaderArgsBuilderSetVec2"
        })


#endif

-- method ShaderArgsBuilder::set_vec3
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "ShaderArgsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType =
--               TInterface Name { namespace = "Graphene" , name = "Vec3" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform too"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gsk_shader_args_builder_set_vec3" gsk_shader_args_builder_set_vec3 :: 
    Ptr ShaderArgsBuilder ->                -- builder : TInterface (Name {namespace = "Gsk", name = "ShaderArgsBuilder"})
    Int32 ->                                -- idx : TBasicType TInt
    Ptr Graphene.Vec3.Vec3 ->               -- value : TInterface (Name {namespace = "Graphene", name = "Vec3"})
    IO ()

-- | Sets the value of the uniform /@idx@/.
-- 
-- The uniform must be of vec3 type.
shaderArgsBuilderSetVec3 ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ShaderArgsBuilder
    -- ^ /@builder@/: a @GskShaderArgsBuilder@
    -> Int32
    -- ^ /@idx@/: index of the uniform
    -> Graphene.Vec3.Vec3
    -- ^ /@value@/: value to set the uniform too
    -> m ()
shaderArgsBuilderSetVec3 :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ShaderArgsBuilder -> Int32 -> Vec3 -> m ()
shaderArgsBuilderSetVec3 ShaderArgsBuilder
builder Int32
idx Vec3
value = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr ShaderArgsBuilder
builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    Ptr Vec3
value' <- Vec3 -> IO (Ptr Vec3)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Vec3
value
    Ptr ShaderArgsBuilder -> Int32 -> Ptr Vec3 -> IO ()
gsk_shader_args_builder_set_vec3 Ptr ShaderArgsBuilder
builder' Int32
idx Ptr Vec3
value'
    ShaderArgsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ShaderArgsBuilder
builder
    Vec3 -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr Vec3
value
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ShaderArgsBuilderSetVec3MethodInfo
instance (signature ~ (Int32 -> Graphene.Vec3.Vec3 -> m ()), MonadIO m) => O.OverloadedMethod ShaderArgsBuilderSetVec3MethodInfo ShaderArgsBuilder signature where
    overloadedMethod = shaderArgsBuilderSetVec3

instance O.OverloadedMethodInfo ShaderArgsBuilderSetVec3MethodInfo ShaderArgsBuilder where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Gsk.Structs.ShaderArgsBuilder.shaderArgsBuilderSetVec3",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gsk-4.0.5/docs/GI-Gsk-Structs-ShaderArgsBuilder.html#v:shaderArgsBuilderSetVec3"
        })


#endif

-- method ShaderArgsBuilder::set_vec4
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "ShaderArgsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType =
--               TInterface Name { namespace = "Graphene" , name = "Vec4" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform too"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gsk_shader_args_builder_set_vec4" gsk_shader_args_builder_set_vec4 :: 
    Ptr ShaderArgsBuilder ->                -- builder : TInterface (Name {namespace = "Gsk", name = "ShaderArgsBuilder"})
    Int32 ->                                -- idx : TBasicType TInt
    Ptr Graphene.Vec4.Vec4 ->               -- value : TInterface (Name {namespace = "Graphene", name = "Vec4"})
    IO ()

-- | Sets the value of the uniform /@idx@/.
-- 
-- The uniform must be of vec4 type.
shaderArgsBuilderSetVec4 ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ShaderArgsBuilder
    -- ^ /@builder@/: a @GskShaderArgsBuilder@
    -> Int32
    -- ^ /@idx@/: index of the uniform
    -> Graphene.Vec4.Vec4
    -- ^ /@value@/: value to set the uniform too
    -> m ()
shaderArgsBuilderSetVec4 :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ShaderArgsBuilder -> Int32 -> Vec4 -> m ()
shaderArgsBuilderSetVec4 ShaderArgsBuilder
builder Int32
idx Vec4
value = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr ShaderArgsBuilder
builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    Ptr Vec4
value' <- Vec4 -> IO (Ptr Vec4)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Vec4
value
    Ptr ShaderArgsBuilder -> Int32 -> Ptr Vec4 -> IO ()
gsk_shader_args_builder_set_vec4 Ptr ShaderArgsBuilder
builder' Int32
idx Ptr Vec4
value'
    ShaderArgsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ShaderArgsBuilder
builder
    Vec4 -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr Vec4
value
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ShaderArgsBuilderSetVec4MethodInfo
instance (signature ~ (Int32 -> Graphene.Vec4.Vec4 -> m ()), MonadIO m) => O.OverloadedMethod ShaderArgsBuilderSetVec4MethodInfo ShaderArgsBuilder signature where
    overloadedMethod = shaderArgsBuilderSetVec4

instance O.OverloadedMethodInfo ShaderArgsBuilderSetVec4MethodInfo ShaderArgsBuilder where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Gsk.Structs.ShaderArgsBuilder.shaderArgsBuilderSetVec4",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gsk-4.0.5/docs/GI-Gsk-Structs-ShaderArgsBuilder.html#v:shaderArgsBuilderSetVec4"
        })


#endif

-- method ShaderArgsBuilder::to_args
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "ShaderArgsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TInterface Name { namespace = "GLib" , name = "Bytes" })
-- throws : False
-- Skip return : False

foreign import ccall "gsk_shader_args_builder_to_args" gsk_shader_args_builder_to_args :: 
    Ptr ShaderArgsBuilder ->                -- builder : TInterface (Name {namespace = "Gsk", name = "ShaderArgsBuilder"})
    IO (Ptr GLib.Bytes.Bytes)

-- | Creates a new @GBytes@ args from the current state of the
-- given /@builder@/.
-- 
-- Any uniforms of the shader that have not been explicitly set on
-- the /@builder@/ are zero-initialized.
-- 
-- The given @GskShaderArgsBuilder@ is reset once this function returns;
-- you cannot call this function multiple times on the same /@builder@/ instance.
-- 
-- This function is intended primarily for bindings. C code should use
-- t'GI.Gsk.Structs.ShaderArgsBuilder.ShaderArgsBuilder'.@/free_to_args/@().
shaderArgsBuilderToArgs ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ShaderArgsBuilder
    -- ^ /@builder@/: a @GskShaderArgsBuilder@
    -> m GLib.Bytes.Bytes
    -- ^ __Returns:__ the newly allocated buffer with
    --   all the args added to /@builder@/
shaderArgsBuilderToArgs :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ShaderArgsBuilder -> m Bytes
shaderArgsBuilderToArgs ShaderArgsBuilder
builder = IO Bytes -> m Bytes
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bytes -> m Bytes) -> IO Bytes -> m Bytes
forall a b. (a -> b) -> a -> b
$ do
    Ptr ShaderArgsBuilder
builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    Ptr Bytes
result <- Ptr ShaderArgsBuilder -> IO (Ptr Bytes)
gsk_shader_args_builder_to_args Ptr ShaderArgsBuilder
builder'
    Text -> Ptr Bytes -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"shaderArgsBuilderToArgs" Ptr Bytes
result
    Bytes
result' <- ((ManagedPtr Bytes -> Bytes) -> Ptr Bytes -> IO Bytes
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapBoxed ManagedPtr Bytes -> Bytes
GLib.Bytes.Bytes) Ptr Bytes
result
    ShaderArgsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ShaderArgsBuilder
builder
    Bytes -> IO Bytes
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Bytes
result'

#if defined(ENABLE_OVERLOADING)
data ShaderArgsBuilderToArgsMethodInfo
instance (signature ~ (m GLib.Bytes.Bytes), MonadIO m) => O.OverloadedMethod ShaderArgsBuilderToArgsMethodInfo ShaderArgsBuilder signature where
    overloadedMethod = shaderArgsBuilderToArgs

instance O.OverloadedMethodInfo ShaderArgsBuilderToArgsMethodInfo ShaderArgsBuilder where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Gsk.Structs.ShaderArgsBuilder.shaderArgsBuilderToArgs",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gsk-4.0.5/docs/GI-Gsk-Structs-ShaderArgsBuilder.html#v:shaderArgsBuilderToArgs"
        })


#endif

-- method ShaderArgsBuilder::unref
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "ShaderArgsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gsk_shader_args_builder_unref" gsk_shader_args_builder_unref :: 
    Ptr ShaderArgsBuilder ->                -- builder : TInterface (Name {namespace = "Gsk", name = "ShaderArgsBuilder"})
    IO ()

-- | Decreases the reference count of a @GskShaderArgBuilder@ by one.
-- 
-- If the resulting reference count is zero, frees the builder.
shaderArgsBuilderUnref ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ShaderArgsBuilder
    -- ^ /@builder@/: a @GskShaderArgsBuilder@
    -> m ()
shaderArgsBuilderUnref :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ShaderArgsBuilder -> m ()
shaderArgsBuilderUnref ShaderArgsBuilder
builder = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr ShaderArgsBuilder
builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    Ptr ShaderArgsBuilder -> IO ()
gsk_shader_args_builder_unref Ptr ShaderArgsBuilder
builder'
    ShaderArgsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ShaderArgsBuilder
builder
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ShaderArgsBuilderUnrefMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.OverloadedMethod ShaderArgsBuilderUnrefMethodInfo ShaderArgsBuilder signature where
    overloadedMethod = shaderArgsBuilderUnref

instance O.OverloadedMethodInfo ShaderArgsBuilderUnrefMethodInfo ShaderArgsBuilder where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Gsk.Structs.ShaderArgsBuilder.shaderArgsBuilderUnref",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gsk-4.0.5/docs/GI-Gsk-Structs-ShaderArgsBuilder.html#v:shaderArgsBuilderUnref"
        })


#endif

#if defined(ENABLE_OVERLOADING)
type family ResolveShaderArgsBuilderMethod (t :: Symbol) (o :: *) :: * where
    ResolveShaderArgsBuilderMethod "ref" o = ShaderArgsBuilderRefMethodInfo
    ResolveShaderArgsBuilderMethod "toArgs" o = ShaderArgsBuilderToArgsMethodInfo
    ResolveShaderArgsBuilderMethod "unref" o = ShaderArgsBuilderUnrefMethodInfo
    ResolveShaderArgsBuilderMethod "setBool" o = ShaderArgsBuilderSetBoolMethodInfo
    ResolveShaderArgsBuilderMethod "setFloat" o = ShaderArgsBuilderSetFloatMethodInfo
    ResolveShaderArgsBuilderMethod "setInt" o = ShaderArgsBuilderSetIntMethodInfo
    ResolveShaderArgsBuilderMethod "setUint" o = ShaderArgsBuilderSetUintMethodInfo
    ResolveShaderArgsBuilderMethod "setVec2" o = ShaderArgsBuilderSetVec2MethodInfo
    ResolveShaderArgsBuilderMethod "setVec3" o = ShaderArgsBuilderSetVec3MethodInfo
    ResolveShaderArgsBuilderMethod "setVec4" o = ShaderArgsBuilderSetVec4MethodInfo
    ResolveShaderArgsBuilderMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveShaderArgsBuilderMethod t ShaderArgsBuilder, O.OverloadedMethod info ShaderArgsBuilder p) => OL.IsLabel t (ShaderArgsBuilder -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveShaderArgsBuilderMethod t ShaderArgsBuilder, O.OverloadedMethod info ShaderArgsBuilder p, R.HasField t ShaderArgsBuilder p) => R.HasField t ShaderArgsBuilder p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveShaderArgsBuilderMethod t ShaderArgsBuilder, O.OverloadedMethodInfo info ShaderArgsBuilder) => OL.IsLabel t (O.MethodProxy info ShaderArgsBuilder) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif