Browse Source

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.
pull/7/head
Vladimír Vondruš 14 years ago
parent
commit
aef9b16c62
  1. 3
      src/IndexedMesh.cpp
  2. 19
      src/IndexedMesh.h
  3. 7
      src/Mesh.cpp
  4. 23
      src/Mesh.h

3
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() {

19
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;

7
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;
}

23
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

Loading…
Cancel
Save