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 |