Attributes

The included godot Slang module exposes many useful attributes that effect the behavior of shaders within Godot.


gd::Class

Indicates that a struct is represented by a global Godot class. This will, for example, expose fields of the type as the corresponding Godot class in the property inspector.

Target: Var

Fields:

Name

Type

Description

class_name

String

The Godot class name to associate with this struct. Must be the name of a named class

Example:

[gd::Class("MyGDScriptClass")]
struct MyStruct {
    float some_value;
};

// will appear as an instance of MyGDScriptClass in the inspector
uniform MyStruct my_struct;

gd::Color

Indicates that a variable should be treated as sRGB color, rather than linear color. When applied to a float3 or float4, the value will be converted from sRGB to linear color when binding to the shader. When applied to a texture, a value passed as a Texture2D will be read as sRGB.

Target: Var

Example:

[gd::Color]
uniform float3 my_color;

[gd::Color]
uniform float4 my_color_with_alpha;

[gd::Color]
uniform Texture<float4> albedo;

gd::DefaultBlack

When used within a ComputeShaderTask, will bind a 4x4 black texture if no texture is provided.

Target: Var

Example:

[gd::DefaultBlack]
uniform Texture2D<float4> texture_param;

gd::DefaultWhite

When used within a ComputeShaderTask, will bind a 4x4 white texture if no texture is provided.

Target: Var

Example:

[gd::DefaultWhite]
uniform Texture2D<float4> texture_param;

gd::Export

Indicates that a variable should be exported within Godot. This will expose it within a ComputeShaderTask's property inspector and allow its value to be serialized with that task.

Target: Var

Example:

[gd::Export]
uniform float my_parameter;

gd::ExportParam

Indicates that a variable should be exported within Godot. This is the same as gd::Export except it may be applied to function parameters. Is only valid on parameters of an entry-point function parameter.

Target: Param

Example:

[shader("compute")]
[numthreads(8, 8, 1)]
void compute_main(uint3 threadId: SV_DispatchThreadID, [gd::ExportParam] float my_parameter) {
    // ...
}

gd::FrameID

When used within a ComputeShaderTask, will automatically bind the current frame (fetched via get_frames_drawn).

Target: Var

Example:

[gd::FrameID]
uniform int frame_id;

gd::GlobalParam

When used within a ComputeShaderTask, will bind the value of the corresponding global shader parameter if no value is otherwise provided.

Target: Var

Fields:

Name

Type

Description

name

String

The name of the global shader parameter to bind.

Example:

[gd::GlobalParam("my_noise_texture")]
uniform Texture2D<float4> noise;

gd::KernelGroup

Associates an entry-point with the specified group name. Allows a group of entry-points to be conveniently dispatched together. Currently, an entry-point may be associated with at most one kernel group.

Target: Function

Fields:

Name

Type

Description

group_name

String

The name of the kernel group.

Example:

[shader("compute")]
[numthreads(8, 8, 1)]
[gd::KernelGroup("my_group")]
void first(uint3 threadId: SV_DispatchThreadID) {
    // ...
}

[shader("compute")]
[numthreads(8, 8, 1)]
[gd::KernelGroup("my_group")]
void second(uint3 threadId: SV_DispatchThreadID) {
    // ...
}

gd::MousePosition

When used within a ComputeShaderTask, will automatically bind the mouse position within the root window.

Target: Var

Example:

[gd::MousePosition]
uniform int2 mouse_position;

gd::Name

Indicates that a variable should use the specified name within Godot. The specified name will be emitted in the reflection metadata instead of the name declared in the shader code.

Target: Var

Fields:

Name

Type

Description

name

String

The identifier/name to use for this variable within Godot.

Example:

struct MyStruct {
    [gd::Name("exposed_name")]
    float internal_name;
};

[gd::Name("exposed_parameter")]
uniform MyStruct my_parameter;

gd::PropertyHint

Sets the property hint and hint string for an exported parameter, controlling how Godot displays it in the property inspector.

See the @export_custom documentation for more information.

Target: Var

Fields:

Name

Type

Description

property_hint

gd::PropertyHint

The hint enum value (e.g. PropertyHint.Range, PropertyHint.Enum).

hint_string

String

The hint string passed to Godot (e.g. "0,1,0.01" for a range).

Example:

[gd::PropertyHint(PropertyHint.Range, "0,1,0.01")]
uniform float my_param;

gd::Sampler

When used within a ComputeShaderTask, will bind a cached sampler with the specified filter and repeat mode if no sampler is provided.

Target: Var

Fields:

Name

Type

Description

filter

gd::SamplerFilter

The filter to use for this sampler (linear or nearest).

repeat_mode

gd::SamplerRepeatMode

The repeat mode to use for this sampler.

Example:

[gd::Sampler(gd::SamplerFilter.LINEAR, gd::SamplerRepeatMode.REPEAT)]
uniform SamplerState sampler_state;

gd::Time

When used within a ComputeShaderTask, will automatically bind the current time in seconds (fetched via get_ticks_msec).

Target: Var

Example:

[gd::Time]
uniform float time;