Loading...
Searching...
No Matches
CustomMesh.hpp
1#pragma once
2#include <Gfx/Graph/Mesh.hpp>
3
4#include <ossia/dataflow/geometry_port.hpp>
5
6#include <QtGui/private/qrhi_p.h>
7
8namespace score::gfx
9{
10
12{
13 ossia::mesh_list geom;
14
15 using pip = QRhiGraphicsPipeline;
16 pip::Topology topology = pip::Topology::TriangleStrip;
17 pip::CullMode cullMode = pip::CullMode::None;
18 pip::FrontFace frontFace = pip::FrontFace::CW;
19
20 ossia::small_vector<QRhiVertexInputBinding, 2> vertexBindings;
21 ossia::small_vector<QRhiVertexInputAttribute, 2> vertexAttributes;
22 ossia::small_vector<ossia::attribute_semantic, 2> attributeSemantics;
23
24 ossia::small_vector<QRhiBuffer*, 2> buffers;
25 QRhiBuffer* index{};
26
27public:
28 explicit CustomMesh(
29 const ossia::mesh_list& g, const ossia::geometry_filter_list_ptr& f);
30
31 const ossia::mesh_list& meshList() const noexcept { return geom; }
32
33 [[nodiscard]]
34 QRhiBuffer* init_vbo(const ossia::geometry::cpu_buffer& buf, QRhi& rhi) const noexcept;
35
36 [[nodiscard]]
37 QRhiBuffer* init_vbo(const ossia::geometry::gpu_buffer& buf, QRhi& rhi) const noexcept;
38 [[nodiscard]]
39 QRhiBuffer*
40 init_index(const ossia::geometry::cpu_buffer& buf, QRhi& rhi) const noexcept;
41
42 [[nodiscard]]
43 QRhiBuffer*
44 init_index(const ossia::geometry::gpu_buffer& buf, QRhi& rhi) const noexcept;
45
46 [[nodiscard]] MeshBuffers init(QRhi& rhi) const noexcept override;
47
48 void update_vbo(
49 int buffer_index, const ossia::geometry::cpu_buffer& vtx_buf, MeshBuffers& meshbuf,
50 QRhiResourceUpdateBatch& rb) const noexcept;
51
52 void update_vbo(
53 int buffer_index, const ossia::geometry::gpu_buffer& vtx_buf, MeshBuffers& meshbuf,
54 QRhiResourceUpdateBatch& rb) const noexcept;
55
56 void update_index(
57 int buffer_index, const ossia::geometry::cpu_buffer& idx_buf, MeshBuffers& meshbuf,
58 QRhiResourceUpdateBatch& rb) const noexcept;
59
60 void update_index(
61 int buffer_index, const ossia::geometry::gpu_buffer& idx_buf, MeshBuffers& meshbuf,
62 QRhiResourceUpdateBatch& rb) const noexcept;
63 void update(QRhi& rhi, MeshBuffers& output_meshbuf, QRhiResourceUpdateBatch& rb)
64 const noexcept override;
65 Flags flags() const noexcept override;
66
67 void clear();
68
69 void preparePipeline(QRhiGraphicsPipeline& pip) const noexcept override;
70
71 void reload(const ossia::mesh_list& ml, const ossia::geometry_filter_list_ptr& f);
72
73 void draw(const MeshBuffers& bufs, QRhiCommandBuffer& cb) const noexcept override;
74
75 const char* defaultVertexShader() const noexcept override;
76
77 const ossia::geometry* semanticGeometry() const noexcept override
78 {
79 if(!geom.meshes.empty())
80 return &geom.meshes[0];
81 return nullptr;
82 }
83};
84
85}
Definition CustomMesh.hpp:12
const ossia::geometry * semanticGeometry() const noexcept override
Return the underlying semantic geometry if available.
Definition CustomMesh.hpp:77
const char * defaultVertexShader() const noexcept override
A basic vertex shader that is going to work with this mesh.
Definition CustomMesh.cpp:427
Graphics rendering pipeline for ossia score.
Definition Filter/PreviewWidget.hpp:12
Definition Mesh.hpp:33
Data model for meshes.
Definition Mesh.hpp:46