#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 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