Extract node lifecycle, preview runtime, and Win32 input state

This commit is contained in:
2026-06-16 22:18:30 +02:00
parent 24d9d5b6e2
commit 2a2f0c7dd6
12 changed files with 420 additions and 245 deletions

View File

@@ -1,4 +1,5 @@
#include "pch.h"
#include "legacy_node_stroke_preview_runtime_services.h"
#include "log.h"
#include "node_stroke_preview.h"
#include "texture.h"
@@ -21,6 +22,86 @@
#include <cstdint>
#include <stop_token>
namespace pp::panopainter {
bool execute_legacy_node_stroke_preview_immediate_runtime(
const LegacyNodeStrokePreviewImmediateRuntimeRequest& request)
{
if (!request.brush ||
!request.prepare_render_target ||
!request.finish_render_target ||
!request.set_blend_enabled ||
!request.setup_stroke_shader) {
return false;
}
const glm::vec2 render_target_size = {
static_cast<float>(request.preview_rtt.getWidth()),
static_cast<float>(request.preview_rtt.getHeight()),
};
const auto stroke_setup = plan_legacy_node_stroke_preview_stroke_setup(
LegacyNodeStrokePreviewStrokeSetupRequest {
.preview_size = request.preview_size,
.zoom = request.zoom,
.brush_tip_size = request.brush->m_tip_size,
.stroke_max_size_override = request.stroke_max_size_override,
.pad_override = request.pad_override,
.tip_size_pressure = request.brush->m_tip_size_pressure,
.dual_enabled = request.brush->m_dual_enabled,
.dual_size = request.brush->m_dual_size,
.pattern_scale = request.brush->m_pattern_scale,
.pattern_flipx = request.brush->m_pattern_flipx,
.pattern_flipy = request.brush->m_pattern_flipy,
});
const auto prepared_strokes = prepare_legacy_node_stroke_preview_strokes(
request.brush,
stroke_setup,
request.camera_fov,
request.camera_rot);
const glm::mat4 ortho_proj = glm::ortho<float>(0, render_target_size.x, 0, render_target_size.y, -1, 1);
request.prepare_render_target();
request.set_blend_enabled(false);
const auto pass_orchestration = plan_legacy_node_stroke_preview_pass_orchestration(
make_legacy_node_stroke_preview_pass_orchestration_request(
request.render_device_features,
render_target_size,
*request.brush,
ortho_proj));
request.setup_stroke_shader(pass_orchestration.stroke_shader);
const bool sequence_ok = execute_legacy_node_stroke_preview_live_render_passes(
LegacyNodeStrokePreviewLiveRenderRequest {
.brush = *request.brush,
.pass_orchestration = pass_orchestration,
.prepared_strokes = prepared_strokes,
.stroke_texture = request.preview_stroke_texture,
.mixer_rtt = request.preview_rtt_mixer,
.render_target = request.preview_rtt,
.background_texture = request.preview_background_texture,
.dual_texture = request.preview_dual_texture,
.preview_texture = request.preview_image_texture,
.linear_sampler = request.linear_sampler,
.repeat_sampler = request.repeat_sampler,
.zoom = request.zoom,
.min_flow = request.min_flow,
.copy_stroke_destination = pass_orchestration.copy_stroke_destination,
.size = render_target_size,
.bind_dual_pass_textures = request.bind_dual_pass_textures,
.capture_background = request.capture_background,
.compute_frames = request.compute_frames,
.draw_samples = request.draw_samples,
.draw_mix = request.draw_mix,
.unbind_mixer_texture = request.unbind_mixer_texture,
.bind_pattern_texture = request.bind_pattern_texture,
.draw_composite = request.draw_composite,
});
request.finish_render_target();
return sequence_ok;
}
} // namespace pp::panopainter
std::atomic_int NodeStrokePreview::s_instances{ 0 };
std::atomic_bool NodeStrokePreview::s_running{ false };
std::mutex NodeStrokePreview::s_render_mutex;