Resource Slot in Daslang + ECS

We can handle in ECS NodeHandleWithSlotsAccess as we handle NodeHandle.

Let’s say we have Daslang code for node:

require daFrameGraph.fg_ecs

[fg_ecs_node(on_appear)]
def register_some_node(var some_node_handle : NodeHandle&)

  some_node_handle <- root() |> registerNode("some_node") <| @(slots_state; var registry : Registry)

    registry |> create("some_node_output_tex", History No) |> texture(...)
    registry |> requestRenderPass |> color([[auto[] "some_node_output_tex"]])

    registry |> read("some_node_input_tex") |> texture |> atStage(Stage POST_RASTER) |> bindToShaderVar("some_shader_var")

    return <- @ <|
      query() <| $ [es] (some_renderer : PostFxRenderer)
        some_renderer |> render

We can convert it to read texture from and write back to resource slot slot_name:

require daFrameGraph.resource_slot_ecs

[resource_slot_ecs(on_appear)]
def register_some_node(var some_node_handle : NodeHandleWithSlotsAccess&)

  some_node_handle <- root() |> registerAccess("some_node", [[SlotActions update <- [{Update slot="slot_name", resource="some_node_output_tex", priority=100}] ]]) <| @(slots_state; var registry : Registry)

    registry |> create(slots_state |> resourceToCreateFor("slot_name"), History No) |> texture(...)
    registry |> requestRenderPass |> color([[auto[] slots_state |> resourceToCreateFor("postfx_input_slot")]])

    registry |> read(slots_state |> resourceToReadFrom("slot_name")) |> texture |> atStage(Stage POST_RASTER) |> bindToShaderVar("some_shader_var")

    return <- @ <|
      query() <| $ [es] (some_renderer : PostFxRenderer)
        some_renderer |> render

Difference with fg_ecs

fg_ecs

resource_slot_ecs

require daFrameGraph.fg_ecs

require daFrameGraph.resource_slot_ecs

[fg_ecs_node(on_appear)]

[resource_slot_ecs(on_appear)]

NodeHandle

NodeHandleWithSlotsAccess

registerNode(“node_name”)

registerAccess(“node_name”, [[SlotActions … ]])

@(var registry : Registry)

@(slots_state; var registry : Registry)

“some_node_input_tex”

`slots_state |> resourceToReadFrom(“slot_name”)`

“some_node_output_tex”

`slots_state |> resourceToCreateFor(“slot_name”)`

SlotActions have 3 possible properties:

See also

For more information, see registerAccess.

Function Annotations

resource_slot_ecs

Classes

ResourceSlotEcsAnnotation : AstFunctionAnnotation
ResourceSlotEcsAnnotation.apply(self: AstFunctionAnnotation; func: FunctionPtr; group: ModuleGroup; args: AnnotationArgumentList const; errors: das_string)

apply returns bool.

Argument

Argument type

self

ast::AstFunctionAnnotation

func

FunctionPtr

group

rtti::ModuleGroup

args

rtti::AnnotationArgumentList const

errors

:builtin::das_string

ResourceSlotEcsAnnotation.parseArgs(self: ResourceSlotEcsAnnotation; func: FunctionPtr; args: AnnotationArgumentList const; errors: das_string)

parseArgs returns resource_slot_ecs::ResSlotEcsAnnotationArgs.

Argument

Argument type

self

resource_slot_ecs::ResourceSlotEcsAnnotation

func

FunctionPtr

args

rtti::AnnotationArgumentList const

errors

builtin::das_string

ResourceSlotEcsAnnotation.declareReloadCallback(self: ResourceSlotEcsAnnotation; func: FunctionPtr; parsed: ResSlotEcsAnnotationArgs const; args: AnnotationArgumentList const)

Argument

Argument type

self

resource_slot_ecs::ResourceSlotEcsAnnotation

func

FunctionPtr

parsed

resource_slot_ecs::ResSlotEcsAnnotationArgs const

args

rtti::AnnotationArgumentList const

ResourceSlotEcsAnnotation.declareES(self: ResourceSlotEcsAnnotation; func: FunctionPtr; parsed: ResSlotEcsAnnotationArgs const; args: AnnotationArgumentList const)

Argument

Argument type

self

resource_slot_ecs::ResourceSlotEcsAnnotation

func

FunctionPtr

parsed

resource_slot_ecs::ResSlotEcsAnnotationArgs const

args

rtti::AnnotationArgumentList const