diff --git a/include/CVertexBuffer.h b/include/CVertexBuffer.h index f48b07bd..40a4d037 100644 --- a/include/CVertexBuffer.h +++ b/include/CVertexBuffer.h @@ -25,6 +25,7 @@ namespace scene virtual u32 size() const =0; virtual void push_back (const video::S3DVertex &element) =0; + virtual void setValue(u32 index, const video::S3DVertex &value) =0; virtual video::S3DVertex& operator [](const u32 index) const =0; virtual video::S3DVertex& getLast() =0; virtual void set_used(u32 usedNow) =0; @@ -47,6 +48,9 @@ namespace scene virtual void push_back (const video::S3DVertex &element) IRR_OVERRIDE {Vertices.push_back((T&)element);} + virtual void setValue(u32 index, const video::S3DVertex &value) IRR_OVERRIDE + {Vertices[index] = (T&)value;} + virtual video::S3DVertex& operator [](const u32 index) const IRR_OVERRIDE {return (video::S3DVertex&)Vertices[index];} @@ -149,6 +153,11 @@ namespace scene Vertices->push_back(element); } + virtual void setValue(u32 index, const video::S3DVertex &value) IRR_OVERRIDE + { + Vertices->setValue(index, value); + } + virtual video::S3DVertex& operator [](const u32 index) const IRR_OVERRIDE { return (*Vertices)[index]; diff --git a/include/IIndexBuffer.h b/include/IIndexBuffer.h index b6fb8a12..59749af0 100644 --- a/include/IIndexBuffer.h +++ b/include/IIndexBuffer.h @@ -20,24 +20,33 @@ namespace scene { public: + //! Pointer to first element virtual void* getData() =0; + //! Same as getData() + virtual void* pointer() =0; + virtual video::E_INDEX_TYPE getType() const =0; virtual void setType(video::E_INDEX_TYPE IndexType) =0; + //! Number of bytes per element virtual u32 stride() const =0; + //! Number of elements virtual u32 size() const =0; + virtual void push_back (const u32 &element) =0; + + //! Set value at index. + /** Buffer must be already large enough. This is basically the non const version of operator [] */ + virtual void setValue(u32 index, u32 value) =0; + virtual u32 operator [](u32 index) const =0; virtual u32 getLast() =0; - virtual void setValue(u32 index, u32 value) =0; virtual void set_used(u32 usedNow) =0; virtual void reallocate(u32 new_size, bool canShrink=true) =0; virtual u32 allocated_size() const=0; - virtual void* pointer() =0; - //! get the current hardware mapping hint virtual E_HARDWARE_MAPPING getHardwareMappingHint() const =0; diff --git a/include/IVertexBuffer.h b/include/IVertexBuffer.h index 89767df8..0fc3b237 100644 --- a/include/IVertexBuffer.h +++ b/include/IVertexBuffer.h @@ -21,6 +21,9 @@ namespace scene //! Pointer to first element of vertex data virtual void* getData() =0; + //! Same as getData() and real type returned is not always video::S3DVertex* but depends on type + virtual video::S3DVertex* pointer() =0; + virtual video::E_VERTEX_TYPE getType() const =0; virtual void setType(video::E_VERTEX_TYPE vertexType) =0; @@ -30,17 +33,23 @@ namespace scene //! Number of elements virtual u32 size() const =0; - //! Add vertex to end. Note that depending on vertex type this will be one of the types derived from video::S3DVertex. + //! Add vertex to end. + //* Note that depending on vertex type reference has to be one of the types derived from video::S3DVertex. */ virtual void push_back(const video::S3DVertex &element) =0; + + //! Set value at index. + /** Depending on vertex type reference has to be one of the types derived from video::S3DVertex. + Buffer must be already large enough. This is basically the non const version of operator [] */ + virtual void setValue(u32 index, const video::S3DVertex &value) =0; + + // Note that the reference can also be to one of the derived types virtual video::S3DVertex& operator [](const u32 index) const =0; virtual video::S3DVertex& getLast() =0; + virtual void set_used(u32 usedNow) =0; virtual void reallocate(u32 new_size, bool canShrink=true) =0; virtual u32 allocated_size() const =0; - //! Same as getData() - not sure why we got 2, should probably deprecate (and we don't always have video::S3DVertex*, so just confusing) - virtual video::S3DVertex* pointer() =0; - //! get the current hardware mapping hint virtual E_HARDWARE_MAPPING getHardwareMappingHint() const =0;