From ce9fcb15a33663527e3fc1a533de356428d3445f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Sun, 13 Nov 2022 18:02:17 +0100 Subject: DRW: Manager: Fix `ClearMulti` breaking compilation on Mac The error was: `draw_pass.hh:1055:16: error: call to implicitly-deleted default constructor of 'blender::draw::command::Undetermined [3]' --- source/blender/draw/intern/draw_command.cc | 4 ++-- source/blender/draw/intern/draw_command.hh | 4 +++- source/blender/draw/intern/draw_pass.hh | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/source/blender/draw/intern/draw_command.cc b/source/blender/draw/intern/draw_command.cc index 7a053933cc1..69e1c069ff8 100644 --- a/source/blender/draw/intern/draw_command.cc +++ b/source/blender/draw/intern/draw_command.cc @@ -164,7 +164,7 @@ void Clear::execute() const void ClearMulti::execute() const { GPUFrameBuffer *fb = GPU_framebuffer_active_get(); - GPU_framebuffer_multi_clear(fb, (const float(*)[4])colors.data()); + GPU_framebuffer_multi_clear(fb, (const float(*)[4])colors); } void StateSet::execute(RecordingState &recording_state) const @@ -486,7 +486,7 @@ std::string Clear::serialize() const std::string ClearMulti::serialize() const { std::stringstream ss; - for (float4 color : colors) { + for (float4 color : Span(colors, colors_len)) { ss << color << ", "; } return std::string(".clear_multi(colors={") + ss.str() + "})"; diff --git a/source/blender/draw/intern/draw_command.hh b/source/blender/draw/intern/draw_command.hh index bbbc63e4c9c..607f0b36583 100644 --- a/source/blender/draw/intern/draw_command.hh +++ b/source/blender/draw/intern/draw_command.hh @@ -332,7 +332,9 @@ struct Clear { }; struct ClearMulti { - Span colors; + /** \note This should be a Span but we need have to only have trivial types here. */ + const float4 *colors; + int colors_len; void execute() const; std::string serialize() const; diff --git a/source/blender/draw/intern/draw_pass.hh b/source/blender/draw/intern/draw_pass.hh index 10cc03bdf11..51b30674359 100644 --- a/source/blender/draw/intern/draw_pass.hh +++ b/source/blender/draw/intern/draw_pass.hh @@ -480,7 +480,7 @@ inline void PassBase::clear(eGPUFrameBufferBits planes, template inline void PassBase::clear_multi(Span colors) { - create_command(command::Type::ClearMulti).clear_multi = {colors}; + create_command(command::Type::ClearMulti).clear_multi = {colors.data(), colors.size()}; } template inline GPUBatch *PassBase::procedural_batch_get(GPUPrimType primitive) -- cgit v1.2.3