Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
waveform_headless_render_backend.hpp
Go to the documentation of this file.
1#pragma once
2
12
15
16#include <cstddef>
17#include <cstdint>
18#include <span>
19#include <vector>
20
21namespace pulp::view {
22
24 std::size_t cache_capacity = 8;
25 std::size_t max_staging_vertices = 4096;
26};
27
38
42 // Non-owning view into backend-owned staging or cached static-layer
43 // vertices. Valid until the next non-const backend call, clear(), prepare(),
44 // resource eviction/replacement, or backend destruction.
45 std::span<const WaveformPeakVertex> static_vertices{};
47 std::uint64_t resource_id = 0;
49
50 [[nodiscard]] bool has_static_vertices() const noexcept {
51 return !static_vertices.empty();
52 }
53};
54
65 public:
68
71 const WaveformGpuLayerPlan& plan,
72 const WaveformGpuRenderContext& context = {});
73
74 void clear();
75
76 [[nodiscard]] WaveformGpuResourceCacheStats stats() const noexcept;
77 [[nodiscard]] std::size_t resource_count() const noexcept {
78 return resources_.size();
79 }
80 [[nodiscard]] std::size_t released_resource_count() const noexcept {
81 return released_resource_count_;
82 }
83 [[nodiscard]] std::uint64_t last_released_resource_id() const noexcept {
84 return last_released_resource_id_;
85 }
86 [[nodiscard]] std::size_t staging_vertex_capacity() const noexcept {
87 return staging_vertices_.size();
88 }
89
90 private:
91 struct ResourcePayload {
93 std::uint64_t resource_id = 0;
94 std::uint64_t backend_generation = 0;
95 std::vector<WaveformPeakVertex> vertices;
96 };
97
98 [[nodiscard]] WaveformHeadlessRenderFrame
99 make_noop_frame(const WaveformGpuRenderDecision& decision) const noexcept;
100 [[nodiscard]] WaveformHeadlessRenderFrame
101 make_cached_frame(const WaveformGpuRenderDecision& decision,
102 WaveformHeadlessRenderStatus status) const noexcept;
103 [[nodiscard]] WaveformHeadlessRenderFrame
104 upload_static_layer(const WaveformGpuRenderDecision& decision);
105
106 const ResourcePayload* find_resource(const WaveformGpuResourceRecord& record) const noexcept;
107 ResourcePayload* find_resource_by_id(std::uint64_t resource_id) noexcept;
108 bool release_record(const WaveformGpuResourceRecord& record) noexcept;
109 bool release_resource_by_id(std::uint64_t resource_id) noexcept;
110 void release_all_resources() noexcept;
111 void release_commit_records(const WaveformGpuResourcePutResult& result) noexcept;
112
113 WaveformGpuRenderController controller_;
114 std::vector<WaveformPeakVertex> staging_vertices_;
115 std::vector<ResourcePayload> resources_;
116 std::uint64_t next_resource_id_ = 1;
117 std::size_t released_resource_count_ = 0;
118 std::uint64_t last_released_resource_id_ = 0;
119};
120
121} // namespace pulp::view
Definition waveform_overview.hpp:89
std::size_t released_resource_count() const noexcept
Definition waveform_headless_render_backend.hpp:80
std::size_t staging_vertex_capacity() const noexcept
Definition waveform_headless_render_backend.hpp:86
std::size_t resource_count() const noexcept
Definition waveform_headless_render_backend.hpp:77
WaveformHeadlessRenderFrame render(const pulp::audio::WaveformOverview &thumbnail, const WaveformGpuLayerPlan &plan, const WaveformGpuRenderContext &context={})
std::uint64_t last_released_resource_id() const noexcept
Definition waveform_headless_render_backend.hpp:83
WaveformGpuResourceCacheStats stats() const noexcept
bool prepare(WaveformHeadlessRenderConfig config)
WaveformHeadlessRenderBackend(WaveformHeadlessRenderConfig config={})
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
@ DrawCachedStaticLayer
Definition waveform_gpu_render_controller.hpp:38
@ PlayheadOnlyRedraw
Definition waveform_gpu_render_controller.hpp:39
@ CpuFallbackReady
Definition waveform_gpu_render_controller.hpp:36
WaveformHeadlessRenderStatus
Definition waveform_headless_render_backend.hpp:28
@ UploadedStaticLayer
Definition waveform_headless_render_backend.hpp:31
@ MissingCachedResource
Definition waveform_headless_render_backend.hpp:34
@ NoOp
Definition waveform_headless_render_backend.hpp:29
@ ResourceCommitRejected
Definition waveform_headless_render_backend.hpp:36
@ ResourceAllocationFailed
Definition waveform_headless_render_backend.hpp:35
STL namespace.
Definition waveform_gpu_primitives.hpp:72
Definition waveform_gpu_render_controller.hpp:23
Definition waveform_gpu_render_controller.hpp:42
Definition waveform_gpu_primitives.hpp:107
Definition waveform_gpu_primitives.hpp:29
Definition waveform_headless_render_backend.hpp:23
std::size_t cache_capacity
Definition waveform_headless_render_backend.hpp:24
std::size_t max_staging_vertices
Definition waveform_headless_render_backend.hpp:25
Definition waveform_headless_render_backend.hpp:39
std::span< const WaveformPeakVertex > static_vertices
Definition waveform_headless_render_backend.hpp:45
std::uint64_t resource_id
Definition waveform_headless_render_backend.hpp:47
bool used_cached_resource
Definition waveform_headless_render_backend.hpp:48
WaveformHeadlessRenderStatus status
Definition waveform_headless_render_backend.hpp:40
WaveformGpuRenderDecision decision
Definition waveform_headless_render_backend.hpp:41
bool has_static_vertices() const noexcept
Definition waveform_headless_render_backend.hpp:50
WaveformPlayheadOverlay playhead
Definition waveform_headless_render_backend.hpp:46
Definition waveform_editor_primitives.hpp:214
Backend-neutral render orchestration for waveform GPU plans.