Gamedev Framework (gf)  0.7.0
A C++14 framework for 2D games
VertexArray.h
1 /*
2  * Gamedev Framework (gf)
3  * Copyright (C) 2016-2018 Julien Bernard
4  *
5  * This software is provided 'as-is', without any express or implied
6  * warranty. In no event will the authors be held liable for any damages
7  * arising from the use of this software.
8  *
9  * Permission is granted to anyone to use this software for any purpose,
10  * including commercial applications, and to alter it and redistribute it
11  * freely, subject to the following restrictions:
12  *
13  * 1. The origin of this software must not be misrepresented; you must not
14  * claim that you wrote the original software. If you use this software
15  * in a product, an acknowledgment in the product documentation would be
16  * appreciated but is not required.
17  * 2. Altered source versions must be plainly marked as such, and must not be
18  * misrepresented as being the original software.
19  * 3. This notice may not be removed or altered from any source distribution.
20  *
21  * Part of this file comes from SFML, with the same license:
22  * Copyright (C) 2007-2015 Laurent Gomila (laurent@sfml-dev.org)
23  */
24 #ifndef GF_VERTEX_ARRAY_H
25 #define GF_VERTEX_ARRAY_H
26 
27 #include <cstddef>
28 #include <vector>
29 
30 #include "Drawable.h"
31 #include "Portability.h"
32 #include "PrimitiveType.h"
33 #include "Rect.h"
34 #include "Vertex.h"
35 
36 namespace gf {
37 #ifndef DOXYGEN_SHOULD_SKIP_THIS
38 inline namespace v1 {
39 #endif
40 
65  class GF_API VertexArray : public Drawable {
66  public:
74  : m_type(PrimitiveType::Points)
75  {
76 
77  }
78 
86  VertexArray(PrimitiveType type, std::size_t count = 0)
87  : m_type(type)
88  , m_vertices(count)
89  {
90 
91  }
92 
98  std::size_t getVertexCount() const {
99  return m_vertices.size();
100  }
101 
107  const Vertex *getVertexData() const {
108  return m_vertices.data();
109  }
110 
124  Vertex& operator[](std::size_t index) {
125  return m_vertices[index];
126  }
127 
141  const Vertex& operator[](std::size_t index) const {
142  return m_vertices[index];
143  }
144 
150  bool isEmpty() const {
151  return m_vertices.empty();
152  }
153 
162  void clear() {
163  m_vertices.clear();
164  }
165 
178  void resize(std::size_t count) {
179  m_vertices.resize(count);
180  }
181 
187  void reserve(std::size_t capacity) {
188  m_vertices.reserve(capacity);
189  }
190 
196  void append(const Vertex& vertex) {
197  m_vertices.push_back(vertex);
198  }
199 
215  m_type = type;
216  }
217 
224  return m_type;
225  }
226 
235  RectF getBounds() const;
236 
237  virtual void draw(RenderTarget& target, RenderStates states) override;
238 
239  private:
240  PrimitiveType m_type;
241  std::vector<Vertex> m_vertices;
242  };
243 
244 #ifndef DOXYGEN_SHOULD_SKIP_THIS
245 }
246 #endif
247 }
248 
249 #endif // GF_VERTEX_ARRAY_H
VertexArray(PrimitiveType type, std::size_t count=0)
Construct the vertex array with a type and an initial number of vertices.
Definition: VertexArray.h:86
A set of primitives.
Definition: VertexArray.h:65
std::size_t getVertexCount() const
Return the vertex count.
Definition: VertexArray.h:98
Base class for all render targets (window, texture, ...)
Definition: RenderTarget.h:66
Define the states used for drawing to a RenderTarget.
Definition: RenderStates.h:82
const Vertex * getVertexData() const
Return the vertex data.
Definition: VertexArray.h:107
bool isEmpty() const
Check if the vertex array is empty.
Definition: VertexArray.h:150
A point associated with a color and a texture coordinate.
Definition: Vertex.h:75
PrimitiveType
Kind of primitives to render.
Definition: PrimitiveType.h:43
void reserve(std::size_t capacity)
Increase the capacity of the vertex array.
Definition: VertexArray.h:187
List of individual points.
Abstract base class for objects that can be drawn to a render window.
Definition: Drawable.h:79
const Vertex & operator[](std::size_t index) const
Get a read-only access to a vertex by its index.
Definition: VertexArray.h:141
The namespace for gf classes.
Definition: Action.h:34
void resize(std::size_t count)
Resize the vertex array.
Definition: VertexArray.h:178
void append(const Vertex &vertex)
Add a vertex to the array.
Definition: VertexArray.h:196
void setPrimitiveType(PrimitiveType type)
Set the type of primitives to draw.
Definition: VertexArray.h:214
Vertex & operator[](std::size_t index)
Get a read-write access to a vertex by its index.
Definition: VertexArray.h:124
void clear()
Clear the vertex array.
Definition: VertexArray.h:162
PrimitiveType getPrimitiveType() const
Get the type of primitives drawn by the vertex array.
Definition: VertexArray.h:223
VertexArray()
Default constructor.
Definition: VertexArray.h:73