aboutsummaryrefslogtreecommitdiff
path: root/tests/glmark2/src/mesh.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/glmark2/src/mesh.h')
-rw-r--r--tests/glmark2/src/mesh.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/tests/glmark2/src/mesh.h b/tests/glmark2/src/mesh.h
new file mode 100644
index 00000000..99630f24
--- /dev/null
+++ b/tests/glmark2/src/mesh.h
@@ -0,0 +1,117 @@
+/*
+ * Copyright © 2008 Ben Smith
+ * Copyright © 2010-2011 Linaro Limited
+ *
+ * This file is part of the glmark2 OpenGL (ES) 2.0 benchmark.
+ *
+ * glmark2 is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * glmark2 is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * glmark2. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Ben Smith (original glmark benchmark)
+ * Alexandros Frantzis (glmark2)
+ * Jesse Barker (glmark2)
+ */
+#ifndef GLMARK2_MESH_H_
+#define GLMARK2_MESH_H_
+
+#include <vector>
+#include "vec.h"
+#include "gl-headers.h"
+
+/**
+ * A mesh of vertices.
+ */
+class Mesh
+{
+public:
+ Mesh();
+ ~Mesh();
+
+ void set_vertex_format(const std::vector<int> &format);
+ void set_attrib_locations(const std::vector<int> &locations);
+
+ void set_attrib(unsigned int pos, const LibMatrix::vec2 &v, std::vector<float> *vertex = 0);
+ void set_attrib(unsigned int pos, const LibMatrix::vec3 &v, std::vector<float> *vertex = 0);
+ void set_attrib(unsigned int pos, const LibMatrix::vec4 &v, std::vector<float> *vertex = 0);
+ void next_vertex();
+ std::vector<std::vector<float> >& vertices();
+
+ enum VBOUpdateMethod {
+ VBOUpdateMethodMap,
+ VBOUpdateMethodSubData,
+ };
+ enum VBOUsage {
+ VBOUsageStatic,
+ VBOUsageStream,
+ VBOUsageDynamic,
+ };
+
+ void vbo_update_method(VBOUpdateMethod method);
+ void vbo_usage(VBOUsage usage);
+ void interleave(bool interleave);
+
+ void reset();
+ void build_array();
+ void build_vbo();
+ void update_array(const std::vector<std::pair<size_t, size_t> >& ranges);
+ void update_vbo(const std::vector<std::pair<size_t, size_t> >& ranges);
+ void delete_array();
+ void delete_vbo();
+
+ void render_array();
+ void render_vbo();
+
+ typedef void (*grid_configuration_func)(Mesh &mesh, int x, int y, int n_x, int n_y,
+ LibMatrix::vec3 &ul,
+ LibMatrix::vec3 &ll,
+ LibMatrix::vec3 &ur,
+ LibMatrix::vec3 &lr);
+
+ void make_grid(int n_x, int n_y, double width, double height,
+ double spacing, grid_configuration_func conf_func = 0);
+
+private:
+ bool check_attrib(unsigned int pos, int dim);
+ std::vector<float> &ensure_vertex();
+ void update_single_array(const std::vector<std::pair<size_t, size_t> >& ranges,
+ size_t n, size_t nfloats, size_t offset);
+ void update_single_vbo(const std::vector<std::pair<size_t, size_t> >& ranges,
+ size_t n, size_t nfloats);
+
+ //
+ // vertex_format_ is a vector of pairs describing the attribute data.
+ // pair.first is the dimension of the attribute (vec2, vec3, vec4) and
+ // pair.second is the number of float values into the vertex data of that
+ // attribute. So, for example, if there are 3 attributes, a vec3 position
+ // a vec3 normal and a vec2 texture coordinate, you would have a
+ // vertex_format_ with 3 elements as follows: {<3, 0>, <3, 3>, <2, 6>} and
+ // the total size of each vertex would be the sum of the dimensions times
+ // the size of a float, or: 8 * sizeof(float) == 32 bytes
+ //
+ std::vector<std::pair<int, int> > vertex_format_;
+ std::vector<int> attrib_locations_;
+ int vertex_size_;
+
+ std::vector<std::vector<float> > vertices_;
+
+ std::vector<float *> vertex_arrays_;
+ std::vector<GLuint> vbos_;
+ std::vector<float *> attrib_data_ptr_;
+ int vertex_stride_;
+ bool interleave_;
+ VBOUpdateMethod vbo_update_method_;
+ VBOUsage vbo_usage_;
+};
+
+#endif