Thin canvas state, tools menu, and node canvas draw
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <array>
|
||||
#include <functional>
|
||||
#include <utility>
|
||||
|
||||
namespace pp::panopainter {
|
||||
|
||||
@@ -114,6 +115,21 @@ struct LegacyCanvasDrawMergeLayerPlaneExecution {
|
||||
std::function<void()> draw_blend;
|
||||
};
|
||||
|
||||
struct LegacyCanvasDrawMergeLayerPathExecution {
|
||||
std::function<void()> bind_blender_framebuffer;
|
||||
std::function<void()> clear_blender_framebuffer;
|
||||
std::function<void()> unbind_blender_framebuffer;
|
||||
std::function<void()> prepare_temporary_erase;
|
||||
std::function<void()> cleanup_temporary_erase;
|
||||
std::function<void()> prepare_temporary_paint;
|
||||
std::function<void()> cleanup_temporary_paint;
|
||||
std::function<void()> prepare_layer_texture;
|
||||
std::function<void()> cleanup_layer_texture;
|
||||
std::function<void()> draw_blend;
|
||||
std::function<void()> draw_debug_outline;
|
||||
std::function<void(int, float)> draw_frame;
|
||||
};
|
||||
|
||||
struct LegacyCanvasDrawMergeTemporaryCompositeExecution {
|
||||
std::function<void()> setup;
|
||||
std::function<void()> bind_samplers;
|
||||
@@ -613,6 +629,48 @@ inline void execute_legacy_canvas_draw_merge_layer_plane(
|
||||
}
|
||||
}
|
||||
|
||||
inline void execute_legacy_canvas_draw_merge_layer_path(
|
||||
bool is_temporary_erase,
|
||||
bool is_temporary_paint,
|
||||
bool use_blend,
|
||||
int first_frame,
|
||||
int last_frame,
|
||||
const std::function<float(int)>& frame_alpha,
|
||||
const LegacyCanvasDrawMergeLayerPathExecution& execution)
|
||||
{
|
||||
if (use_blend) {
|
||||
execution.bind_blender_framebuffer();
|
||||
execution.clear_blender_framebuffer();
|
||||
}
|
||||
|
||||
if (is_temporary_erase) {
|
||||
execution.prepare_temporary_erase();
|
||||
for (int frame = first_frame; frame <= last_frame; frame++) {
|
||||
execution.draw_frame(frame, frame_alpha(frame));
|
||||
}
|
||||
execution.cleanup_temporary_erase();
|
||||
} else if (is_temporary_paint) {
|
||||
execution.prepare_temporary_paint();
|
||||
for (int frame = first_frame; frame <= last_frame; frame++) {
|
||||
execution.draw_frame(frame, frame_alpha(frame));
|
||||
}
|
||||
execution.cleanup_temporary_paint();
|
||||
} else {
|
||||
execution.prepare_layer_texture();
|
||||
for (int frame = first_frame; frame <= last_frame; frame++) {
|
||||
execution.draw_frame(frame, frame_alpha(frame));
|
||||
}
|
||||
execution.cleanup_layer_texture();
|
||||
}
|
||||
|
||||
if (use_blend) {
|
||||
execution.unbind_blender_framebuffer();
|
||||
execution.draw_blend();
|
||||
}
|
||||
|
||||
execution.draw_debug_outline();
|
||||
}
|
||||
|
||||
inline void execute_legacy_canvas_draw_merge_temporary_composite(
|
||||
const LegacyCanvasDrawMergeTemporaryCompositeExecution& execution)
|
||||
{
|
||||
@@ -759,6 +817,40 @@ inline void execute_legacy_canvas_draw_merge_post_draw(
|
||||
execution.draw_current_modes();
|
||||
}
|
||||
|
||||
template <
|
||||
typename DrawMaskFree,
|
||||
typename DrawMaskLine,
|
||||
typename DrawSmaskFaces,
|
||||
typename DrawGridModes,
|
||||
typename DrawHeightmap,
|
||||
typename DrawCurrentModes>
|
||||
inline void execute_legacy_canvas_draw_merge_post_draw_callbacks(
|
||||
bool smask_active,
|
||||
bool draw_mask_overlay,
|
||||
int smask_mode,
|
||||
bool draw_grid_modes_enabled,
|
||||
DrawMaskFree&& draw_mask_free,
|
||||
DrawMaskLine&& draw_mask_line,
|
||||
DrawSmaskFaces&& draw_smask_faces,
|
||||
DrawGridModes&& draw_grid_modes_callback,
|
||||
DrawHeightmap&& draw_heightmap,
|
||||
DrawCurrentModes&& draw_current_modes)
|
||||
{
|
||||
execute_legacy_canvas_draw_merge_post_draw(
|
||||
smask_active,
|
||||
draw_mask_overlay,
|
||||
smask_mode,
|
||||
draw_grid_modes_enabled,
|
||||
LegacyCanvasDrawMergePostDrawExecution {
|
||||
.draw_mask_free = std::forward<DrawMaskFree>(draw_mask_free),
|
||||
.draw_mask_line = std::forward<DrawMaskLine>(draw_mask_line),
|
||||
.draw_smask_faces = std::forward<DrawSmaskFaces>(draw_smask_faces),
|
||||
.draw_grid_modes = std::forward<DrawGridModes>(draw_grid_modes_callback),
|
||||
.draw_heightmap = std::forward<DrawHeightmap>(draw_heightmap),
|
||||
.draw_current_modes = std::forward<DrawCurrentModes>(draw_current_modes),
|
||||
});
|
||||
}
|
||||
|
||||
inline void execute_legacy_canvas_draw_merge_smask_faces(
|
||||
const LegacyCanvasDrawMergeTextureMaskUniforms& uniforms,
|
||||
const glm::mat4& proj,
|
||||
|
||||
Reference in New Issue
Block a user