11 #ifndef hifi_model_Geometry_h
12 #define hifi_model_Geometry_h
14 #include <glm/glm.hpp>
18 #include <gpu/Forward.h>
19 #include <gpu/Resource.h>
20 #include <gpu/Stream.h>
23 typedef gpu::BufferView::Index Index;
24 typedef gpu::BufferView BufferView;
26 typedef std::vector< Box > Boxes;
27 typedef glm::vec3
Vec3;
30 using MeshPointer = std::shared_ptr< Mesh >;
34 const static Index PRIMITIVE_RESTART_INDEX = -1;
36 typedef gpu::BufferView BufferView;
37 typedef std::vector< BufferView > BufferViews;
39 typedef gpu::Stream::Slot Slot;
40 typedef gpu::Stream::Format VertexFormat;
41 typedef std::map< Slot, BufferView > BufferViewMap;
43 typedef graphics::Vec3
Vec3;
46 Mesh(
const Mesh& mesh);
47 Mesh& operator= (
const Mesh& mesh) =
default;
51 void setVertexBuffer(
const BufferView& buffer);
52 const BufferView& getVertexBuffer()
const {
return _vertexBuffer; }
53 size_t getNumVertices()
const {
return _vertexBuffer.getNumElements(); }
54 bool hasVertexData()
const {
return _vertexBuffer._buffer.get() !=
nullptr; }
57 size_t getNumAttributes()
const {
return _attributeBuffers.size(); }
58 void addAttribute(Slot slot,
const BufferView& buffer);
59 void removeAttribute(Slot slot);
60 const BufferView getAttributeBuffer(
int attrib)
const;
63 void setVertexFormatAndStream(
const gpu::Stream::FormatPointer& vf,
const gpu::BufferStreamPointer& vbs);
66 const gpu::Stream::FormatPointer getVertexFormat()
const {
return _vertexFormat; }
69 const gpu::BufferStream& getVertexStream()
const {
return _vertexStream; }
72 using Indices16 = std::vector<int16_t>;
73 using Indices32 = std::vector<int32_t>;
75 void setIndexBuffer(
const BufferView& buffer);
76 const BufferView& getIndexBuffer()
const {
return _indexBuffer; }
77 size_t getNumIndices()
const {
return _indexBuffer.getNumElements(); }
80 const Vec3& getPos(Index index)
const {
return _vertexBuffer.get<
Vec3>(index); }
108 Part(Index startIndex, Index numIndices, Index baseVertex, Topology topology) :
109 _startIndex(startIndex),
110 _numIndices(numIndices),
111 _baseVertex(baseVertex),
116 void setPartBuffer(
const BufferView& buffer);
117 const BufferView& getPartBuffer()
const {
return _partBuffer; }
118 size_t getNumParts()
const {
return _partBuffer.getNumElements(); }
121 Box evalPartBound(
int partNum)
const;
124 Box evalPartsBound(
int partStart,
int partEnd)
const;
126 static gpu::Primitive topologyToPrimitive(Topology topo) {
return static_cast<gpu::Primitive
>(topo); }
129 MeshPointer map(std::function<glm::vec3(glm::vec3)> vertexFunc,
130 std::function<glm::vec3(glm::vec3)> colorFunc,
131 std::function<glm::vec3(glm::vec3)> normalFunc,
132 std::function<uint32_t(uint32_t)> indexFunc)
const;
134 void forEach(std::function<
void(glm::vec3)> vertexFunc,
135 std::function<
void(glm::vec3)> colorFunc,
136 std::function<
void(glm::vec3)> normalFunc,
137 std::function<
void(uint32_t)> indexFunc);
140 static MeshPointer createIndexedTriangles_P3F(uint32_t numVertices, uint32_t numTriangles,
const glm::vec3* vertices =
nullptr,
const uint32_t* indices =
nullptr);
142 std::string modelName;
143 std::string displayName;
145 gpu::BufferPointer getColorBuffer()
const {
return _colorBuffer; }
149 gpu::Stream::FormatPointer _vertexFormat;
150 gpu::BufferStream _vertexStream;
152 BufferView _vertexBuffer;
153 BufferViewMap _attributeBuffers;
155 BufferView _indexBuffer;
157 BufferView _partBuffer;
159 gpu::BufferPointer _colorBuffer { std::make_shared<gpu::Buffer>() };
161 void evalVertexFormat();
162 void evalVertexStream();
171 Geometry(
const Geometry& geometry);
174 void setMesh(
const MeshPointer& mesh);
175 const MeshPointer& getMesh()
const {
return _mesh; }
Provides the Vec3 scripting interface.
Definition: Vec3.h:80