diff options
Diffstat (limited to 'src/scenegraph/coreapi/geometry.h')
-rw-r--r-- | src/scenegraph/coreapi/geometry.h | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/src/scenegraph/coreapi/geometry.h b/src/scenegraph/coreapi/geometry.h index 8a9e0b3..a6f3028 100644 --- a/src/scenegraph/coreapi/geometry.h +++ b/src/scenegraph/coreapi/geometry.h @@ -55,6 +55,7 @@ class Geometry public: Geometry(); // Creates a null geometry. Geometry(const QVector<QGLAttributeDescription> &description, GLenum indexType = GL_UNSIGNED_SHORT); + ~Geometry(); void *vertexData(); const void *constVertexData() const { return m_vertex_data.constData(); } @@ -103,15 +104,7 @@ public: bool isNull() const { return m_vertex_description.isEmpty(); } - bool isVertexDataDirty() const { return m_isVertexDataDirty; } - void setVertexDataDirty(bool d) { m_isVertexDataDirty = d; } - bool isIndexDataDirty() const { return m_isIndexDataDirty; } - void setIndexDataDirty(bool d) { m_isIndexDataDirty = d; } - protected: - bool m_isVertexDataDirty; - bool m_isIndexDataDirty; - QArray<uchar> m_vertex_data; QArray<uchar> m_index_data; @@ -122,4 +115,45 @@ protected: int m_index_stride; }; +class GeometryDataUploader +{ +public: + static void registerGeometry(const Geometry *); + static void unregisterGeometry(const Geometry *); + + static void bind(); + static void release(); + static void upload(); + + static const void *vertexData(const Geometry *g, int offset = 0); + static const void *indexData(const Geometry *g); + + static void setUseBuffers(bool b) { m_use_buffers = b; } + static bool useBuffers() { return m_use_buffers; } + + static void markVertexDirty() { m_vertex_dirty = true; } + static void markIndexDirty() { m_index_dirty = true; } + +private: + static void addGeometryVertex(const Geometry *); + static void addGeometryIndex(const Geometry *); + + static void clearVertexData() { m_vertex_offsets.clear(); m_vertex_data.clear(); } + static void clearIndexData() { m_index_offsets.clear(); m_index_data.clear(); } + + static bool m_use_buffers; + static QSet<const Geometry *> m_geometries; + static QGLBuffer m_vertex_buffer; + static QGLBuffer m_index_buffer; + static QArray<uchar> m_vertex_data; + static QArray<uchar> m_index_data; + static QHash<const Geometry *, int> m_vertex_offsets; + static QHash<const Geometry *, int> m_index_offsets; + static bool m_vertex_bound; + static bool m_index_bound; + static bool m_vertex_dirty; + static bool m_index_dirty; +}; + + #endif |