114 lines
3.3 KiB
C++
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
|