Harden runtime flags and thin Apple/canvas seams
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "shader.h"
|
||||
|
||||
#include <array>
|
||||
#include <functional>
|
||||
|
||||
namespace pp::panopainter {
|
||||
@@ -238,6 +239,14 @@ struct LegacyCanvasDrawMergePostDrawExecution {
|
||||
std::function<void()> draw_current_modes;
|
||||
};
|
||||
|
||||
struct LegacyCanvasDrawMergeSmaskFacesExecution {
|
||||
std::function<void()> set_active_texture_unit;
|
||||
std::function<void()> enable_blend;
|
||||
std::function<void(int plane_index)> bind_face_texture;
|
||||
std::function<void()> draw_face;
|
||||
std::function<void(int plane_index)> unbind_face_texture;
|
||||
};
|
||||
|
||||
[[nodiscard]] inline LegacyCanvasDrawMergeShaderExecution legacy_shader_manager_draw_merge_execution() noexcept
|
||||
{
|
||||
return {
|
||||
@@ -631,4 +640,29 @@ inline void execute_legacy_canvas_draw_merge_post_draw(
|
||||
execution.draw_current_modes();
|
||||
}
|
||||
|
||||
inline void execute_legacy_canvas_draw_merge_smask_faces(
|
||||
const LegacyCanvasDrawMergeTextureMaskUniforms& uniforms,
|
||||
const glm::mat4& proj,
|
||||
const glm::mat4& camera,
|
||||
float layer_scale,
|
||||
const std::array<glm::mat4, 6>& plane_transform,
|
||||
const LegacyCanvasDrawMergeSmaskFacesExecution& execution)
|
||||
{
|
||||
setup_legacy_canvas_draw_merge_texture_mask_shader(uniforms);
|
||||
execution.set_active_texture_unit();
|
||||
execution.enable_blend();
|
||||
|
||||
for (int plane_index = 0; plane_index < 6; ++plane_index) {
|
||||
auto plane_mvp = proj * camera *
|
||||
glm::scale(glm::vec3(layer_scale)) *
|
||||
plane_transform[plane_index] *
|
||||
glm::translate(glm::vec3(0, 0, -1.f));
|
||||
|
||||
apply_legacy_canvas_draw_merge_mvp(plane_mvp);
|
||||
execution.bind_face_texture(plane_index);
|
||||
execution.draw_face();
|
||||
execution.unbind_face_texture(plane_index);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace pp::panopainter
|
||||
|
||||
Reference in New Issue
Block a user