add pos to compositor layers

This commit is contained in:
2025-12-24 14:19:52 -06:00
parent 3beb5f7091
commit 03159c66d7

View File

@@ -107,6 +107,10 @@ function compile_node(node, ctx, parent_target, parent_size) {
owns_target = true
target_size = parent_size || ctx.screen_size
target = allocate_target(ctx, target_size, node.name || 'effect_island')
} else if (node.pos) {
owns_target = true
target_size = parent_size || ctx.screen_size
target = allocate_target(ctx, target_size, node.name || 'translated_target')
}
// Handle clear for target owners
@@ -189,7 +193,8 @@ function compile_group(node, ctx, target, target_size, parent_target, parent_siz
source: target,
source_size: target_size,
dest_size: parent_size,
presentation: presentation
presentation: presentation,
pos: node.pos
})
} else {
ctx.passes.push({
@@ -199,7 +204,8 @@ function compile_group(node, ctx, target, target_size, parent_target, parent_siz
source_size: target_size,
dest_size: parent_size,
presentation: presentation,
blend: blend
blend: blend,
pos: node.pos
})
}
}
@@ -261,7 +267,8 @@ function compile_renderer_layer(node, ctx, target, target_size, parent_target, p
source_size: layer_size,
dest_size: parent_size,
presentation: presentation,
blend: blend
blend: blend,
pos: node.pos
})
}
@@ -606,6 +613,10 @@ function execute_pass(pass, renderers, backend, resolve_target) {
var source = resolve_target(pass.source)
var dest = resolve_target(pass.dest)
var rect = compositor.calculate_presentation_rect(pass.source_size, pass.dest_size, pass.presentation)
if (pass.pos) {
rect.x += (pass.pos.x || 0)
rect.y += (pass.pos.y || 0)
}
var filter = pass.presentation == 'integer_scale' ? 'nearest' : 'linear'
commands.push({
cmd: 'blit',
@@ -619,6 +630,10 @@ function execute_pass(pass, renderers, backend, resolve_target) {
case 'blit_to_screen':
var source = resolve_target(pass.source)
var rect = compositor.calculate_presentation_rect(pass.source_size, pass.dest_size, pass.presentation)
if (pass.pos) {
rect.x += (pass.pos.x || 0)
rect.y += (pass.pos.y || 0)
}
var filter = pass.presentation == 'integer_scale' ? 'nearest' : 'linear'
commands.push({
cmd: 'blit',