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