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() { void IndexedMesh::bindIndexBufferImplementationVAO() {
bindVAO(vao); bindVAO(vao);
if(_indexBuffer) _indexBuffer->bind(Buffer::Target::ElementArray); _indexBuffer->bind(Buffer::Target::ElementArray);
else Buffer::unbind(Buffer::Target::ElementArray);
} }
void IndexedMesh::bindIndexedImplementationDefault() { void IndexedMesh::bindIndexedImplementationDefault() {

19
src/IndexedMesh.h

@ -76,22 +76,17 @@ class MAGNUM_EXPORT IndexedMesh: public Mesh {
* @brief Constructor * @brief Constructor
* @param primitive Primitive type * @param primitive Primitive type
* *
* Creates indexed mesh with no index buffer, zero vertex count and * Creates indexed mesh with zero vertex count, zero index count and
* zero index count. * no vertex or index buffers.
* @see setPrimitive(), setVertexCount(), setIndexBuffer(),
* setIndexCount(), setIndexType()
*/ */
inline explicit IndexedMesh(Primitive primitive = Primitive::Triangles): Mesh(primitive), _indexBuffer(nullptr), _indexCount(0), _indexType(Type::UnsignedShort) {} inline explicit IndexedMesh(Primitive primitive = Primitive::Triangles): Mesh(primitive), _indexBuffer(nullptr), _indexCount(0), _indexType(Type::UnsignedShort) {}
/** /**
* @brief Set index buffer * @brief Set index buffer
* *
* By default there is no index buffer. Parameter @p buffer can be * @see setIndexCount(), setIndexType(), MeshTools::compressIndices(),
* `nullptr`, in that case current index buffer is unbound from the * @fn_gl{BindVertexArray}, @fn_gl{BindBuffer} (if
* mesh. * @extension{APPLE,vertex_array_object} is available)
* @see MeshTools::compressIndices(), @fn_gl{BindVertexArray},
* @fn_gl{BindBuffer} (if @extension{APPLE,vertex_array_object}
* is available)
*/ */
IndexedMesh* setIndexBuffer(Buffer* buffer); IndexedMesh* setIndexBuffer(Buffer* buffer);
@ -103,7 +98,7 @@ class MAGNUM_EXPORT IndexedMesh: public Mesh {
* @return Pointer to self (for method chaining) * @return Pointer to self (for method chaining)
* *
* Default is zero. * Default is zero.
* @see MeshTools::compressIndices() * @see setIndexBuffer(), setIndexType(), MeshTools::compressIndices()
*/ */
inline IndexedMesh* setIndexCount(GLsizei count) { inline IndexedMesh* setIndexCount(GLsizei count) {
_indexCount = count; _indexCount = count;
@ -118,7 +113,7 @@ class MAGNUM_EXPORT IndexedMesh: public Mesh {
* @return Pointer to self (for method chaining) * @return Pointer to self (for method chaining)
* *
* Default is @ref Type "Type::UnsignedShort". * Default is @ref Type "Type::UnsignedShort".
* @see MeshTools::compressIndices() * @see setIndexBuffer(), setIndexCount(), MeshTools::compressIndices()
*/ */
inline IndexedMesh* setIndexType(Type type) { inline IndexedMesh* setIndexType(Type type) {
_indexType = type; _indexType = type;

7
src/Mesh.cpp

@ -77,13 +77,6 @@ Mesh& Mesh::operator=(Mesh&& other) {
Mesh* Mesh::setVertexCount(GLsizei vertexCount) { Mesh* Mesh::setVertexCount(GLsizei vertexCount) {
_vertexCount = vertexCount; _vertexCount = vertexCount;
attributes.clear();
#ifndef MAGNUM_TARGET_GLES2
integerAttributes.clear();
#ifndef MAGNUM_TARGET_GLES
longAttributes.clear();
#endif
#endif
return this; return this;
} }

23
src/Mesh.h

@ -117,8 +117,6 @@ more information.
@see IndexedMesh @see IndexedMesh
@todo Support for indirect draw buffer (OpenGL 4.0, @extension{ARB,draw_indirect}) @todo Support for indirect draw buffer (OpenGL 4.0, @extension{ARB,draw_indirect})
@todo Redo in a way that allows glMultiDrawArrays, glDrawArraysInstanced etc. @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 { class MAGNUM_EXPORT Mesh {
friend class IndexedMesh; friend class IndexedMesh;
@ -394,6 +392,8 @@ class MAGNUM_EXPORT Mesh {
* @return Pointer to self (for method chaining) * @return Pointer to self (for method chaining)
* *
* Default is @ref Primitive "Primitive::Triangles". * Default is @ref Primitive "Primitive::Triangles".
* @see setVertexCount(), addVertexBuffer(),
* addInterleavedVertexBuffer(), addVertexBufferStride()
*/ */
inline Mesh* setPrimitive(Primitive primitive) { inline Mesh* setPrimitive(Primitive primitive) {
_primitive = primitive; _primitive = primitive;
@ -408,11 +408,8 @@ class MAGNUM_EXPORT Mesh {
* @return Pointer to self (for method chaining) * @return Pointer to self (for method chaining)
* *
* Default is zero. * Default is zero.
* @attention All bound attributes are reset after calling this * @see setPrimitive(), addVertexBuffer(), addInterleavedVertexBuffer(),
* function, so if your mesh has any vertex attributes, be sure * addVertexBufferStride(), MeshTools::interleave()
* to call addVertexBuffer()/addInterleavedVertexBuffer()
* afterwards.
* @see MeshTools::interleave()
*/ */
Mesh* setVertexCount(GLsizei vertexCount); Mesh* setVertexCount(GLsizei vertexCount);
@ -457,8 +454,9 @@ class MAGNUM_EXPORT Mesh {
* mesh and delete it afterwards. * mesh and delete it afterwards.
* *
* @see addInterleavedVertexBuffer(), addVertexBufferStride(), * @see addInterleavedVertexBuffer(), addVertexBufferStride(),
* @fn_gl{BindVertexArray}, @fn_gl{EnableVertexAttribArray}, * setPrimitive(), setVertexCount(), @fn_gl{BindVertexArray},
* @fn_gl{BindBuffer}, @fn_gl{VertexAttribPointer} or * @fn_gl{EnableVertexAttribArray}, @fn_gl{BindBuffer},
* @fn_gl{VertexAttribPointer} or
* @fn_gl_extension{EnableVertexArrayAttrib,EXT,direct_state_access}, * @fn_gl_extension{EnableVertexArrayAttrib,EXT,direct_state_access},
* @fn_gl_extension{VertexArrayVertexAttribOffset,EXT,direct_state_access} * @fn_gl_extension{VertexArrayVertexAttribOffset,EXT,direct_state_access}
* if @extension{APPLE,vertex_array_object} is available * 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, you must ensure it will exist for whole lifetime of the
* mesh and delete it afterwards. * mesh and delete it afterwards.
* *
* @see addVertexBufferStride(), addVertexBuffer(), * @see addVertexBufferStride(), addVertexBuffer(), setPrimitive(),
* @fn_gl{BindVertexArray}, @fn_gl{EnableVertexAttribArray}, * setVertexCount(), @fn_gl{BindVertexArray},
* @fn_gl{BindBuffer}, @fn_gl{VertexAttribPointer} or * @fn_gl{EnableVertexAttribArray}, @fn_gl{BindBuffer},
* @fn_gl{VertexAttribPointer} or
* @fn_gl_extension{EnableVertexArrayAttrib,EXT,direct_state_access}, * @fn_gl_extension{EnableVertexArrayAttrib,EXT,direct_state_access},
* @fn_gl_extension{VertexArrayVertexAttribOffset,EXT,direct_state_access} * @fn_gl_extension{VertexArrayVertexAttribOffset,EXT,direct_state_access}
* if @extension{APPLE,vertex_array_object} is available * if @extension{APPLE,vertex_array_object} is available

Loading…
Cancel
Save