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  | 
|
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  | 
|
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  | 
|
func  | 
FunctionPtr  | 
parsed  | 
resource_slot_ecs::ResSlotEcsAnnotationArgs const  | 
args  | 
rtti::AnnotationArgumentList const  |