diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2022-11-13 18:23:22 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2022-11-13 18:23:22 +0300 |
commit | cd64615425248eaf8dc80653626fe5f2dbb084a2 (patch) | |
tree | 36f87add4266767cc5eeea37a32de3acf3a65c22 /source/blender/draw/intern/draw_command.cc | |
parent | 930d14cc6203bf52f7a4f122336994bf47d2765b (diff) |
DRW: Manager: Add `ClearMulti` command
Allows to record `GPU_framebuffer_multi_clear` inside `draw::Pass`.
Diffstat (limited to 'source/blender/draw/intern/draw_command.cc')
-rw-r--r-- | source/blender/draw/intern/draw_command.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/source/blender/draw/intern/draw_command.cc b/source/blender/draw/intern/draw_command.cc index 848d13083d0..3ef33f13c4a 100644 --- a/source/blender/draw/intern/draw_command.cc +++ b/source/blender/draw/intern/draw_command.cc @@ -158,6 +158,12 @@ void Clear::execute() const GPU_framebuffer_clear(fb, (eGPUFrameBufferBits)clear_channels, color, depth, stencil); } +void ClearMulti::execute() const +{ + GPUFrameBuffer *fb = GPU_framebuffer_active_get(); + GPU_framebuffer_multi_clear(fb, (const float(*)[4])colors.data()); +} + void StateSet::execute(RecordingState &recording_state) const { /** @@ -471,6 +477,15 @@ std::string Clear::serialize() const return std::string(".clear(") + ss.str() + ")"; } +std::string ClearMulti::serialize() const +{ + std::stringstream ss; + for (float4 color : colors) { + ss << color << ", "; + } + return std::string(".clear_multi(colors={") + ss.str() + "})"; +} + std::string StateSet::serialize() const { /* TODO(@fclem): Better serialization... */ |