50 float scaleFactor{1.0f};
51 bool enableSorting{
true};
55 ossia::vec3f modelPosition{0.f, 0.f, 0.f};
56 ossia::vec3f modelRotation{0.f, 0.f, 0.f};
57 ossia::vec3f modelScale{1.f, 1.f, 1.f};
60 ossia::vec3f position{-1.f, -1.f, -1.f};
61 ossia::vec3f center{0.f, 0.f, 0.f};
80 void init(
RenderList& renderer, QRhiResourceUpdateBatch& res)
override;
81 void update(
RenderList& renderer, QRhiResourceUpdateBatch& res,
Edge* edge)
override;
82 void runInitialPasses(
83 RenderList&, QRhiCommandBuffer& commands, QRhiResourceUpdateBatch*& res,
85 void runRenderPass(
RenderList&, QRhiCommandBuffer& cb,
Edge& edge)
override;
89 void createPreprocessPipeline(
RenderList& renderer);
90 void createRenderPipeline(
RenderList& renderer);
91 void createSortPipelines(
RenderList& renderer);
96 QRhiBuffer* m_uniformBuffer{};
97 QRhiBuffer* m_dummyStorageBuffer{};
98 QRhiGraphicsPipeline* m_pipeline{};
99 QRhiShaderResourceBindings* m_bindings{};
103 QRhiBuffer* m_rawSplatBuffer{};
104 QRhiBuffer* m_renderSplatBuffer{};
105 QRhiBuffer* m_preprocessUniformBuffer{};
106 QRhiComputePipeline* m_preprocessPipeline{};
107 QRhiShaderResourceBindings* m_preprocessSrb{};
110 QRhiBuffer* m_sortKeysBuffer{};
111 QRhiBuffer* m_sortKeysAltBuffer{};
112 QRhiBuffer* m_sortIndicesBuffer{};
113 QRhiBuffer* m_sortIndicesAltBuffer{};
114 QRhiBuffer* m_histogramBuffer{};
115 QRhiBuffer* m_sortUniformBuffer{};
116 QRhiBuffer* m_sortPassUniformBuffer{};
117 QRhiBuffer* m_prefixSumUniformBuffer{};
119 QRhiComputePipeline* m_depthKeyPipeline{};
120 QRhiComputePipeline* m_histogramPipeline{};
121 QRhiComputePipeline* m_prefixSumPipeline{};
122 QRhiComputePipeline* m_sortPipeline{};
124 QRhiShaderResourceBindings* m_depthKeySrb{};
125 QRhiShaderResourceBindings* m_histogramSrb{};
126 QRhiShaderResourceBindings* m_histogramSrbAlt{};
127 QRhiShaderResourceBindings* m_prefixSumSrb{};
128 QRhiShaderResourceBindings* m_sortSrb{};
129 QRhiShaderResourceBindings* m_sortSrbAlt{};
131 ossia::small_vector<Sampler, 8> m_samplers;
133 int64_t m_lastSplatCount{0};
134 bool m_preprocessResourcesCreated{
false};
135 bool m_sortResourcesCreated{
false};
137 static constexpr int64_t MAX_SPLATS = 50000000;
138 static constexpr int SORT_WORKGROUP_SIZE = 256;
139 static constexpr int RADIX_BITS = 8;
140 static constexpr int NUM_BUCKETS = 256;