Extract node lifecycle, preview runtime, and Win32 input state
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user