Files
panopainter/src/legacy_canvas_stroke_preview_services.h

114 lines
3.3 KiB
C++

#pragma once
#include "shader.h"
#include "util.h"
namespace pp::panopainter {
struct LegacyStrokePreviewCopySize {
int width = 0;
int height = 0;
};
struct LegacyVrColorUniforms {
glm::vec4 color { 1.0f };
glm::mat4 mvp { 1.0f };
};
struct LegacyVrStrokePreviewUniforms {
int texture_slot = 0;
float alpha = 1.0f;
bool draw_outline = false;
glm::vec4 color { 1.0f };
glm::mat4 mvp { 1.0f };
};
inline void setup_legacy_vr_color_shader(const LegacyVrColorUniforms& uniforms) noexcept
{
ShaderManager::use(kShader::Color);
ShaderManager::u_vec4(kShaderUniform::Col, uniforms.color);
ShaderManager::u_mat4(kShaderUniform::MVP, uniforms.mvp);
}
inline void setup_legacy_vr_stroke_preview_shader(const LegacyVrStrokePreviewUniforms& uniforms) noexcept
{
ShaderManager::use(kShader::StrokePreview);
ShaderManager::u_int(kShaderUniform::Tex, uniforms.texture_slot);
ShaderManager::u_float(kShaderUniform::Alpha, uniforms.alpha);
ShaderManager::u_int(kShaderUniform::DrawOutline, uniforms.draw_outline);
ShaderManager::u_vec4(kShaderUniform::Col, uniforms.color);
ShaderManager::u_mat4(kShaderUniform::MVP, uniforms.mvp);
}
template <
typename SetupCheckerboard,
typename DrawPlane,
typename BindBackgroundTexture,
typename CopyFramebufferToTexture>
void execute_legacy_stroke_preview_background_capture(
SetupCheckerboard&& setup_checkerboard,
DrawPlane&& draw_plane,
BindBackgroundTexture&& bind_background_texture,
CopyFramebufferToTexture&& copy_framebuffer_to_texture,
LegacyStrokePreviewCopySize copy_size)
{
setup_checkerboard();
draw_plane();
bind_background_texture();
copy_framebuffer_to_texture(0, 0, 0, 0, copy_size.width, copy_size.height);
}
template <
typename SetupCompositeShader,
typename BindCompositeSamplers,
typename BindCompositeInputs,
typename DrawPlane>
void execute_legacy_stroke_preview_final_composite(
SetupCompositeShader&& setup_composite_shader,
BindCompositeSamplers&& bind_composite_samplers,
BindCompositeInputs&& bind_composite_inputs,
DrawPlane&& draw_plane)
{
setup_composite_shader();
bind_composite_samplers();
bind_composite_inputs();
draw_plane();
}
template <
typename ClearTarget,
typename ComputeFrames,
typename BeforeFrame,
typename SetupSampleShader,
typename DrawSample,
typename CopyPreviewResult>
void execute_legacy_stroke_preview_live_pass(
ClearTarget&& clear_target,
ComputeFrames&& compute_frames,
BeforeFrame&& before_frame,
SetupSampleShader&& setup_sample_shader,
DrawSample&& draw_sample,
CopyPreviewResult&& copy_preview_result)
{
auto frames = compute_frames();
clear_target();
for (auto& frame : frames) {
before_frame(frame);
setup_sample_shader(frame);
draw_sample(frame);
}
copy_preview_result();
}
template <typename BindPreviewTexture, typename CopyFramebufferToTexture>
void copy_legacy_stroke_preview_texture(
BindPreviewTexture&& bind_preview_texture,
CopyFramebufferToTexture&& copy_framebuffer_to_texture,
LegacyStrokePreviewCopySize copy_size)
{
bind_preview_texture();
copy_framebuffer_to_texture(0, 0, 0, 0, copy_size.width, copy_size.height);
}
} // namespace pp::panopainter