Thin brush panel, preview, and node utility shells

This commit is contained in:
2026-06-16 23:57:39 +02:00
parent cb9751dcc7
commit acee4db356
14 changed files with 402 additions and 302 deletions

View File

@@ -136,6 +136,96 @@ void copy_legacy_node_stroke_preview_destination_texture_region(
copy_framebuffer_to_texture_2d(src_x, src_y, dst_x, dst_y, width, height);
}
bool execute_legacy_node_stroke_preview_immediate_draw(
const LegacyNodeStrokePreviewImmediateDrawRequest& request)
{
if (!request.brush ||
!request.prepare_render_target ||
!request.finish_render_target ||
!request.compute_frames ||
!request.draw_samples ||
!request.draw_mix ||
!request.draw_checkerboard ||
!request.draw_composite) {
return false;
}
if (!ensure_legacy_node_stroke_preview_render_targets(
LegacyNodeStrokePreviewRenderTargetSetup {
.preview_rtt = request.preview_rtt,
.preview_rtt_mixer = request.preview_rtt_mixer,
.preview_stroke_texture = request.preview_stroke_texture,
.preview_dual_texture = request.preview_dual_texture,
.preview_background_texture = request.preview_background_texture,
.preview_image_texture = request.preview_image_texture,
.size = request.preview_size,
})) {
return false;
}
const auto vp = query_legacy_node_stroke_preview_viewport();
const auto cc = query_legacy_node_stroke_preview_clear_color();
const glm::vec2 size = {
static_cast<float>(request.preview_rtt.getWidth()),
static_cast<float>(request.preview_rtt.getHeight()),
};
const bool sequence_ok = execute_legacy_node_stroke_preview_immediate_runtime(
LegacyNodeStrokePreviewImmediateRuntimeRequest {
.brush = request.brush,
.preview_size = request.preview_size,
.zoom = request.zoom,
.min_flow = request.min_flow,
.stroke_max_size_override = request.stroke_max_size_override,
.pad_override = request.pad_override,
.camera_fov = request.camera_fov,
.camera_rot = request.camera_rot,
.render_device_features = request.render_device_features,
.preview_rtt = request.preview_rtt,
.preview_rtt_mixer = request.preview_rtt_mixer,
.preview_stroke_texture = request.preview_stroke_texture,
.preview_dual_texture = request.preview_dual_texture,
.preview_background_texture = request.preview_background_texture,
.preview_image_texture = request.preview_image_texture,
.linear_sampler = request.linear_sampler,
.repeat_sampler = request.repeat_sampler,
.prepare_render_target = request.prepare_render_target,
.finish_render_target = request.finish_render_target,
.set_blend_enabled = [](bool enabled) {
apply_legacy_node_stroke_preview_capability(pp::renderer::gl::blend_state(), enabled);
},
.setup_stroke_shader = [](const LegacyStrokeShaderSetupUniforms& uniforms) {
setup_legacy_stroke_shader(uniforms);
},
.bind_dual_pass_textures = [](const Brush& dual_brush) {
bind_legacy_node_stroke_preview_dual_pass_textures(dual_brush);
},
.capture_background = [&](bool colorize) {
execute_legacy_node_stroke_preview_background_capture_pass(
LegacyNodeStrokePreviewBackgroundCaptureRequest {
.size = size,
.colorize = colorize,
.background_texture = request.preview_background_texture,
.draw_checkerboard = [&] {
request.draw_checkerboard();
},
});
},
.compute_frames = request.compute_frames,
.draw_samples = request.draw_samples,
.draw_mix = request.draw_mix,
.unbind_mixer_texture = [&] {
unbind_legacy_node_stroke_preview_mixer_texture(request.preview_rtt_mixer);
},
.bind_pattern_texture = [&] {
bind_legacy_node_stroke_preview_pattern_texture(*request.brush);
},
.draw_composite = request.draw_composite,
});
apply_legacy_node_stroke_preview_viewport(vp.x, vp.y, vp.width, vp.height);
apply_legacy_node_stroke_preview_clear_color(cc);
return sequence_ok;
}
void execute_legacy_node_stroke_preview_background_capture_pass(
const LegacyNodeStrokePreviewBackgroundCaptureRequest& request)
{