Share retained stroke preview mix executor
This commit is contained in:
@@ -87,6 +87,24 @@ struct LegacyNodeStrokePreviewMixPassRequest {
|
||||
int blend_mode = 0;
|
||||
};
|
||||
|
||||
struct LegacyNodeStrokePreviewMixExecutionRequest {
|
||||
LegacyNodeStrokePreviewMixPassPlan::ShaderPlan shader {};
|
||||
int mixer_width = 0;
|
||||
int mixer_height = 0;
|
||||
int scissor_x = 0;
|
||||
int scissor_y = 0;
|
||||
int scissor_width = 0;
|
||||
int scissor_height = 0;
|
||||
std::function<void()> save_state;
|
||||
std::function<void(const LegacyNodeStrokePreviewMixPassPlan::ShaderPlan&)> setup_mix_shader;
|
||||
std::function<void()> bind_mixer_framebuffer;
|
||||
std::function<void(int, int, int, int, int, int)> configure_mix_target_state;
|
||||
std::function<void()> bind_mix_inputs;
|
||||
std::function<void()> draw_mix;
|
||||
std::function<void()> unbind_mixer_framebuffer;
|
||||
std::function<void()> restore_state;
|
||||
};
|
||||
|
||||
[[nodiscard]] inline LegacyNodeStrokePreviewMixPassPlan plan_legacy_node_stroke_preview_mix_pass(
|
||||
const LegacyNodeStrokePreviewMixPassRequest& request) noexcept
|
||||
{
|
||||
@@ -130,6 +148,39 @@ struct LegacyNodeStrokePreviewMixPassRequest {
|
||||
return plan;
|
||||
}
|
||||
|
||||
[[nodiscard]] inline bool execute_legacy_node_stroke_preview_mix_pass(
|
||||
const LegacyNodeStrokePreviewMixExecutionRequest& request)
|
||||
{
|
||||
if (request.mixer_width <= 0 ||
|
||||
request.mixer_height <= 0 ||
|
||||
!request.save_state ||
|
||||
!request.setup_mix_shader ||
|
||||
!request.bind_mixer_framebuffer ||
|
||||
!request.configure_mix_target_state ||
|
||||
!request.bind_mix_inputs ||
|
||||
!request.draw_mix ||
|
||||
!request.unbind_mixer_framebuffer ||
|
||||
!request.restore_state) {
|
||||
return false;
|
||||
}
|
||||
|
||||
request.save_state();
|
||||
request.setup_mix_shader(request.shader);
|
||||
request.bind_mixer_framebuffer();
|
||||
request.configure_mix_target_state(
|
||||
request.mixer_width,
|
||||
request.mixer_height,
|
||||
request.scissor_x,
|
||||
request.scissor_y,
|
||||
request.scissor_width,
|
||||
request.scissor_height);
|
||||
request.bind_mix_inputs();
|
||||
request.draw_mix();
|
||||
request.unbind_mixer_framebuffer();
|
||||
request.restore_state();
|
||||
return true;
|
||||
}
|
||||
|
||||
struct LegacyNodeStrokePreviewPassSequenceRequest {
|
||||
bool dual_pass_enabled = false;
|
||||
std::function<void()> prepare_dual_pass;
|
||||
|
||||
Reference in New Issue
Block a user