{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Builds 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.Kind as DK
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 Data.Word as DW
import qualified Data.Int as DI
import qualified System.Posix.Types as SPT
import qualified Foreign.C.Types as FCT

-- Workaround for https://gitlab.haskell.org/ghc/ghc/-/issues/23392
#if MIN_VERSION_base(4,18,0)
import qualified GI.Cairo.Structs.Context as Cairo.Context
import qualified GI.Cairo.Structs.Region as Cairo.Region
import qualified GI.GLib.Structs.Bytes as GLib.Bytes
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gdk.Objects.Display as Gdk.Display
import qualified GI.Gdk.Objects.Surface as Gdk.Surface
import qualified GI.Gdk.Objects.Texture as Gdk.Texture
import qualified GI.Graphene.Structs.Rect as Graphene.Rect
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 qualified GI.Gsk.Callbacks as Gsk.Callbacks
import {-# SOURCE #-} qualified GI.Gsk.Enums as Gsk.Enums
import {-# SOURCE #-} qualified GI.Gsk.Objects.GLShader as Gsk.GLShader
import {-# SOURCE #-} qualified GI.Gsk.Objects.RenderNode as Gsk.RenderNode
import {-# SOURCE #-} qualified GI.Gsk.Objects.Renderer as Gsk.Renderer

#else
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

#endif

-- | 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 t'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 <- Ptr GValue -> IO (Ptr ShaderArgsBuilder)
forall b. Ptr GValue -> IO (Ptr b)
B.GValue.get_boxed Ptr GValue
gv :: IO (Ptr ShaderArgsBuilder)
        if ptr /= FP.nullPtr
        then P.Just <$> B.ManagedPtr.newBoxed ShaderArgsBuilder ptr
        else return P.Nothing
        
    


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

-- method ShaderArgsBuilder::new
-- method type : Constructor
-- Args: [ Arg
--           { argCName = "shader"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "GLShader" }
--           , argCType = Just "GskGLShader*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskGLShader`" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "initial_values"
--           , argType = TInterface Name { namespace = "GLib" , name = "Bytes" }
--           , argCType = Just "GBytes*"
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "optional `GBytes` with initial values"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = 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)

{-# DEPRECATED shaderArgsBuilderNew ["(Since version 4.16)","GTK\\'s new Vulkan-focused rendering","  does not support this feature. Use <http://developer.gnome.org/gsk/stable/../gtk4/class.GLArea.html GtkGLArea>","  for OpenGL rendering."] #-}
-- | 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
    shader' <- a -> IO (Ptr GLShader)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
shader
    maybeInitialValues <- case 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
FP.nullPtr
        Just Bytes
jInitialValues -> do
            jInitialValues' <- Bytes -> IO (Ptr Bytes)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Bytes
jInitialValues
            return jInitialValues'
    result <- gsk_shader_args_builder_new shader' maybeInitialValues
    checkUnexpectedReturnNULL "shaderArgsBuilderNew" result
    result' <- (wrapBoxed ShaderArgsBuilder) result
    touchManagedPtr shader
    whenJust initialValues touchManagedPtr
    return result'

#if defined(ENABLE_OVERLOADING)
#endif

-- method ShaderArgsBuilder::ref
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface Name { namespace = "Gsk" , name = "ShaderArgsBuilder" }
--           , argCType = Just "GskShaderArgsBuilder*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = 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)

{-# DEPRECATED shaderArgsBuilderRef ["(Since version 4.16)","GTK\\'s new Vulkan-focused rendering","  does not support this feature. Use <http://developer.gnome.org/gsk/stable/../gtk4/class.GLArea.html GtkGLArea>","  for OpenGL rendering."] #-}
-- | 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
    builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    result <- gsk_shader_args_builder_ref builder'
    checkUnexpectedReturnNULL "shaderArgsBuilderRef" result
    result' <- (wrapBoxed ShaderArgsBuilder) result
    touchManagedPtr builder
    return 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.9/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" }
--           , argCType = Just "GskShaderArgsBuilder*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , argCType = Just "int"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType = TBasicType TBoolean
--           , argCType = Just "gboolean"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform to"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = 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 ()

{-# DEPRECATED shaderArgsBuilderSetBool ["(Since version 4.16)","GTK\\'s new Vulkan-focused rendering","  does not support this feature. Use <http://developer.gnome.org/gsk/stable/../gtk4/class.GLArea.html GtkGLArea>","  for OpenGL rendering."] #-}
-- | 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
    builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    let value' = (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
P.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
P.fromEnum) Bool
value
    gsk_shader_args_builder_set_bool builder' idx value'
    touchManagedPtr builder
    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.9/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" }
--           , argCType = Just "GskShaderArgsBuilder*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , argCType = Just "int"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType = TBasicType TFloat
--           , argCType = Just "float"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform to"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = 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
    builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    let value' = Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
value
    gsk_shader_args_builder_set_float builder' idx value'
    touchManagedPtr builder
    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.9/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" }
--           , argCType = Just "GskShaderArgsBuilder*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , argCType = Just "int"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType = TBasicType TInt32
--           , argCType = Just "gint32"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform to"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = 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 ()

{-# DEPRECATED shaderArgsBuilderSetInt ["(Since version 4.16)","GTK\\'s new Vulkan-focused rendering","  does not support this feature. Use <http://developer.gnome.org/gsk/stable/../gtk4/class.GLArea.html GtkGLArea>","  for OpenGL rendering."] #-}
-- | 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
    builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    gsk_shader_args_builder_set_int builder' idx value
    touchManagedPtr builder
    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.9/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" }
--           , argCType = Just "GskShaderArgsBuilder*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , argCType = Just "int"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType = TBasicType TUInt32
--           , argCType = Just "guint32"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform to"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = 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 ()

{-# DEPRECATED shaderArgsBuilderSetUint ["(Since version 4.16)","GTK\\'s new Vulkan-focused rendering","  does not support this feature. Use <http://developer.gnome.org/gsk/stable/../gtk4/class.GLArea.html GtkGLArea>","  for OpenGL rendering."] #-}
-- | 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
    builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    gsk_shader_args_builder_set_uint builder' idx value
    touchManagedPtr builder
    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.9/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" }
--           , argCType = Just "GskShaderArgsBuilder*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "A `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , argCType = Just "int"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType =
--               TInterface Name { namespace = "Graphene" , name = "Vec2" }
--           , argCType = Just "const graphene_vec2_t*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform too"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = 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 ()

{-# DEPRECATED shaderArgsBuilderSetVec2 ["(Since version 4.16)","GTK\\'s new Vulkan-focused rendering","  does not support this feature. Use <http://developer.gnome.org/gsk/stable/../gtk4/class.GLArea.html GtkGLArea>","  for OpenGL rendering."] #-}
-- | 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
    builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    value' <- unsafeManagedPtrGetPtr value
    gsk_shader_args_builder_set_vec2 builder' idx value'
    touchManagedPtr builder
    touchManagedPtr value
    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.9/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" }
--           , argCType = Just "GskShaderArgsBuilder*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , argCType = Just "int"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType =
--               TInterface Name { namespace = "Graphene" , name = "Vec3" }
--           , argCType = Just "const graphene_vec3_t*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform too"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = 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 ()

{-# DEPRECATED shaderArgsBuilderSetVec3 ["(Since version 4.16)","GTK\\'s new Vulkan-focused rendering","  does not support this feature. Use <http://developer.gnome.org/gsk/stable/../gtk4/class.GLArea.html GtkGLArea>","  for OpenGL rendering."] #-}
-- | 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
    builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    value' <- unsafeManagedPtrGetPtr value
    gsk_shader_args_builder_set_vec3 builder' idx value'
    touchManagedPtr builder
    touchManagedPtr value
    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.9/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" }
--           , argCType = Just "GskShaderArgsBuilder*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "idx"
--           , argType = TBasicType TInt
--           , argCType = Just "int"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "index of the uniform"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "value"
--           , argType =
--               TInterface Name { namespace = "Graphene" , name = "Vec4" }
--           , argCType = Just "const graphene_vec4_t*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "value to set the uniform too"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = 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 ()

{-# DEPRECATED shaderArgsBuilderSetVec4 ["(Since version 4.16)","GTK\\'s new Vulkan-focused rendering","  does not support this feature. Use <http://developer.gnome.org/gsk/stable/../gtk4/class.GLArea.html GtkGLArea>","  for OpenGL rendering."] #-}
-- | 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
    builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    value' <- unsafeManagedPtrGetPtr value
    gsk_shader_args_builder_set_vec4 builder' idx value'
    touchManagedPtr builder
    touchManagedPtr value
    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.9/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" }
--           , argCType = Just "GskShaderArgsBuilder*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = 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)

{-# DEPRECATED shaderArgsBuilderToArgs ["(Since version 4.16)","GTK\\'s new Vulkan-focused rendering","  does not support this feature. Use <http://developer.gnome.org/gsk/stable/../gtk4/class.GLArea.html GtkGLArea>","  for OpenGL rendering."] #-}
-- | 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
    builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    result <- gsk_shader_args_builder_to_args builder'
    checkUnexpectedReturnNULL "shaderArgsBuilderToArgs" result
    result' <- (wrapBoxed GLib.Bytes.Bytes) result
    touchManagedPtr builder
    return 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.9/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" }
--           , argCType = Just "GskShaderArgsBuilder*"
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a `GskShaderArgsBuilder`"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = 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 ()

{-# DEPRECATED shaderArgsBuilderUnref ["(Since version 4.16)","GTK\\'s new Vulkan-focused rendering","  does not support this feature. Use <http://developer.gnome.org/gsk/stable/../gtk4/class.GLArea.html GtkGLArea>","  for OpenGL rendering."] #-}
-- | 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
    builder' <- ShaderArgsBuilder -> IO (Ptr ShaderArgsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ShaderArgsBuilder
builder
    gsk_shader_args_builder_unref builder'
    touchManagedPtr builder
    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.9/docs/GI-Gsk-Structs-ShaderArgsBuilder.html#v:shaderArgsBuilderUnref"
        })


#endif

#if defined(ENABLE_OVERLOADING)
type family ResolveShaderArgsBuilderMethod (t :: Symbol) (o :: DK.Type) :: DK.Type 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