From aef9b16c623f1b84918d89e5d869dfc0708a3e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 10 Jan 2013 20:06:52 +0100 Subject: [PATCH] Don't allow removing vertex/index buffer from meshes. Would cause weird issues with state, it's better to just not allow it and follow KISS principle than trying to implementing it. Also crosslinked required function calls in documentation. --- src/IndexedMesh.cpp | 3 +-- src/IndexedMesh.h | 19 +++++++------------ src/Mesh.cpp | 7 ------- src/Mesh.h | 23 +++++++++++------------ 4 files changed, 19 insertions(+), 33 deletions(-) diff --git a/src/IndexedMesh.cpp b/src/IndexedMesh.cpp index 2a09a70b6..e6527bf78 100644 --- a/src/IndexedMesh.cpp +++ b/src/IndexedMesh.cpp @@ -67,8 +67,7 @@ void IndexedMesh::bindIndexBufferImplementationDefault() {} void IndexedMesh::bindIndexBufferImplementationVAO() { bindVAO(vao); - if(_indexBuffer) _indexBuffer->bind(Buffer::Target::ElementArray); - else Buffer::unbind(Buffer::Target::ElementArray); + _indexBuffer->bind(Buffer::Target::ElementArray); } void IndexedMesh::bindIndexedImplementationDefault() { diff --git a/src/IndexedMesh.h b/src/IndexedMesh.h index eb051811d..80e390346 100644 --- a/src/IndexedMesh.h +++ b/src/IndexedMesh.h @@ -76,22 +76,17 @@ class MAGNUM_EXPORT IndexedMesh: public Mesh { * @brief Constructor * @param primitive Primitive type * - * Creates indexed mesh with no index buffer, zero vertex count and - * zero index count. - * @see setPrimitive(), setVertexCount(), setIndexBuffer(), - * setIndexCount(), setIndexType() + * Creates indexed mesh with zero vertex count, zero index count and + * no vertex or index buffers. */ inline explicit IndexedMesh(Primitive primitive = Primitive::Triangles): Mesh(primitive), _indexBuffer(nullptr), _indexCount(0), _indexType(Type::UnsignedShort) {} /** * @brief Set index buffer * - * By default there is no index buffer. Parameter @p buffer can be - * `nullptr`, in that case current index buffer is unbound from the - * mesh. - * @see MeshTools::compressIndices(), @fn_gl{BindVertexArray}, - * @fn_gl{BindBuffer} (if @extension{APPLE,vertex_array_object} - * is available) + * @see setIndexCount(), setIndexType(), MeshTools::compressIndices(), + * @fn_gl{BindVertexArray}, @fn_gl{BindBuffer} (if + * @extension{APPLE,vertex_array_object} is available) */ IndexedMesh* setIndexBuffer(Buffer* buffer); @@ -103,7 +98,7 @@ class MAGNUM_EXPORT IndexedMesh: public Mesh { * @return Pointer to self (for method chaining) * * Default is zero. - * @see MeshTools::compressIndices() + * @see setIndexBuffer(), setIndexType(), MeshTools::compressIndices() */ inline IndexedMesh* setIndexCount(GLsizei count) { _indexCount = count; @@ -118,7 +113,7 @@ class MAGNUM_EXPORT IndexedMesh: public Mesh { * @return Pointer to self (for method chaining) * * Default is @ref Type "Type::UnsignedShort". - * @see MeshTools::compressIndices() + * @see setIndexBuffer(), setIndexCount(), MeshTools::compressIndices() */ inline IndexedMesh* setIndexType(Type type) { _indexType = type; diff --git a/src/Mesh.cpp b/src/Mesh.cpp index 32dde612a..d069132cb 100644 --- a/src/Mesh.cpp +++ b/src/Mesh.cpp @@ -77,13 +77,6 @@ Mesh& Mesh::operator=(Mesh&& other) { Mesh* Mesh::setVertexCount(GLsizei vertexCount) { _vertexCount = vertexCount; - attributes.clear(); - #ifndef MAGNUM_TARGET_GLES2 - integerAttributes.clear(); - #ifndef MAGNUM_TARGET_GLES - longAttributes.clear(); - #endif - #endif return this; } diff --git a/src/Mesh.h b/src/Mesh.h index d802e41df..9d88de758 100644 --- a/src/Mesh.h +++ b/src/Mesh.h @@ -117,8 +117,6 @@ more information. @see IndexedMesh @todo Support for indirect draw buffer (OpenGL 4.0, @extension{ARB,draw_indirect}) @todo Redo in a way that allows glMultiDrawArrays, glDrawArraysInstanced etc. -@todo Allow unbinding all vertex buffers with some function (not as side effect), - similarly to unbinding index buffer in IndexedMesh */ class MAGNUM_EXPORT Mesh { friend class IndexedMesh; @@ -394,6 +392,8 @@ class MAGNUM_EXPORT Mesh { * @return Pointer to self (for method chaining) * * Default is @ref Primitive "Primitive::Triangles". + * @see setVertexCount(), addVertexBuffer(), + * addInterleavedVertexBuffer(), addVertexBufferStride() */ inline Mesh* setPrimitive(Primitive primitive) { _primitive = primitive; @@ -408,11 +408,8 @@ class MAGNUM_EXPORT Mesh { * @return Pointer to self (for method chaining) * * Default is zero. - * @attention All bound attributes are reset after calling this - * function, so if your mesh has any vertex attributes, be sure - * to call addVertexBuffer()/addInterleavedVertexBuffer() - * afterwards. - * @see MeshTools::interleave() + * @see setPrimitive(), addVertexBuffer(), addInterleavedVertexBuffer(), + * addVertexBufferStride(), MeshTools::interleave() */ Mesh* setVertexCount(GLsizei vertexCount); @@ -457,8 +454,9 @@ class MAGNUM_EXPORT Mesh { * mesh and delete it afterwards. * * @see addInterleavedVertexBuffer(), addVertexBufferStride(), - * @fn_gl{BindVertexArray}, @fn_gl{EnableVertexAttribArray}, - * @fn_gl{BindBuffer}, @fn_gl{VertexAttribPointer} or + * setPrimitive(), setVertexCount(), @fn_gl{BindVertexArray}, + * @fn_gl{EnableVertexAttribArray}, @fn_gl{BindBuffer}, + * @fn_gl{VertexAttribPointer} or * @fn_gl_extension{EnableVertexArrayAttrib,EXT,direct_state_access}, * @fn_gl_extension{VertexArrayVertexAttribOffset,EXT,direct_state_access} * if @extension{APPLE,vertex_array_object} is available @@ -520,9 +518,10 @@ class MAGNUM_EXPORT Mesh { * mesh, you must ensure it will exist for whole lifetime of the * mesh and delete it afterwards. * - * @see addVertexBufferStride(), addVertexBuffer(), - * @fn_gl{BindVertexArray}, @fn_gl{EnableVertexAttribArray}, - * @fn_gl{BindBuffer}, @fn_gl{VertexAttribPointer} or + * @see addVertexBufferStride(), addVertexBuffer(), setPrimitive(), + * setVertexCount(), @fn_gl{BindVertexArray}, + * @fn_gl{EnableVertexAttribArray}, @fn_gl{BindBuffer}, + * @fn_gl{VertexAttribPointer} or * @fn_gl_extension{EnableVertexArrayAttrib,EXT,direct_state_access}, * @fn_gl_extension{VertexArrayVertexAttribOffset,EXT,direct_state_access} * if @extension{APPLE,vertex_array_object} is available