    {-# 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 !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