2 #include <Process/ProcessFlags.hpp>
4 #include <ossia/detail/small_vector.hpp>
5 #include <ossia/detail/span.hpp>
7 #include <private/qrhi_p.h>
9 #include <score_plugin_gfx_export.h>
21 struct SCORE_PLUGIN_GFX_EXPORT
Mesh
29 HasPosition = SCORE_FLAG(1),
30 HasTexCoord = SCORE_FLAG(2),
31 HasColor = SCORE_FLAG(3),
32 HasNormals = SCORE_FLAG(4),
33 HasTangents = SCORE_FLAG(5),
35 using Flags = QFlags<Flag>;
37 [[nodiscard]]
virtual Flags flags()
const noexcept = 0;
39 [[nodiscard]]
virtual MeshBuffers init(QRhi& rhi)
const noexcept = 0;
41 virtual void update(
MeshBuffers& bufs, QRhiResourceUpdateBatch& cb)
const noexcept = 0;
42 virtual void preparePipeline(QRhiGraphicsPipeline& pip)
const noexcept = 0;
43 virtual void draw(
const MeshBuffers& bufs, QRhiCommandBuffer& cb)
const noexcept = 0;
54 Mesh& operator=(const
Mesh&) = delete;
58 Q_DECLARE_OPERATORS_FOR_FLAGS(
Mesh::Flags);
63 [[nodiscard]]
virtual MeshBuffers init(QRhi& rhi)
const noexcept
override;
64 void update(
MeshBuffers& bufs, QRhiResourceUpdateBatch& cb)
const noexcept
override;
65 void preparePipeline(QRhiGraphicsPipeline& pip)
const noexcept
override;
66 void draw(
const MeshBuffers& bufs, QRhiCommandBuffer& cb)
const noexcept
override;
68 setupBindings(
const MeshBuffers& bufs, QRhiCommandBuffer& cb)
const noexcept = 0;
70 using pip = QRhiGraphicsPipeline;
71 pip::Topology topology = pip::Topology::TriangleStrip;
72 pip::CullMode cullMode = pip::CullMode::None;
73 pip::FrontFace frontFace = pip::FrontFace::CW;
75 ossia::small_vector<QRhiVertexInputBinding, 2> vertexBindings;
76 ossia::small_vector<QRhiVertexInputAttribute, 2> vertexAttributes;
78 tcb::span<const float> vertexArray;
87 explicit PlainMesh(tcb::span<const float> vtx,
int count);
88 [[nodiscard]] Flags flags()
const noexcept
override {
return HasPosition; }
89 const char* defaultVertexShader()
const noexcept
override;
91 setupBindings(
const MeshBuffers& bufs, QRhiCommandBuffer& cb)
const noexcept
override;
99 explicit TexturedMesh(tcb::span<const float> vtx,
int count);
100 [[nodiscard]] Flags flags()
const noexcept
override
102 return HasPosition | HasTexCoord;
105 const char* defaultVertexShader()
const noexcept
override;
113 static const constexpr
float data[] = {-1, -1, 3, -1, -1, 3};
126 static const constexpr
float data[] = {
127 -1, -1, 3, -1, -1, 3,
130 static const constexpr
float flipped_y_data[] = {
131 -1, -1, 3, -1, -1, 3,
138 setupBindings(
const MeshBuffers& bufs, QRhiCommandBuffer& cb)
const noexcept
override;
147 static const constexpr
float data[] = {
148 -1, -1, +1, -1, -1, +1, +1, +1,
150 0, 0, 1, 0, 0, 1, 1, 1};
152 static const constexpr
float flipped_y_data[] = {
153 -1, -1, +1, -1, -1, +1, +1, +1,
155 0, 1, 1, 1, 0, 0, 1, 0};
160 setupBindings(
const MeshBuffers& bufs, QRhiCommandBuffer& cb)
const noexcept
override;
Graphics rendering pipeline for ossia score.
Definition: PreviewWidget.hpp:12
Data model for meshes.
Definition: Mesh.hpp:22
virtual const char * defaultVertexShader() const noexcept=0
A basic vertex shader that is going to work with this mesh.
A mesh with only position attributes.
Definition: Mesh.hpp:86
A triangle mesh with only positions.
Definition: Mesh.hpp:112
A mesh with positions and texture coordinates.
Definition: Mesh.hpp:98
A quad mesh with positions and texture coordinates.
Definition: Mesh.hpp:146
A triangle mesh with positions and texture coordinates.
Definition: Mesh.hpp:125