1$#include "Graphics/VertexBuffer.h" 2 3class VertexBuffer : public Object 4{ 5 VertexBuffer(); 6 ~VertexBuffer(); 7 8 void SetShadowed(bool enable); 9 bool SetSize(unsigned vertexCount, const PODVector<VertexElement>& elements, bool dynamic = false); 10 bool SetSize(unsigned vertexCount, unsigned elementMask, bool dynamic = false); 11 tolua_outside bool VertexBufferSetData @ SetData(VectorBuffer& data); 12 tolua_outside bool VertexBufferSetDataRange @ SetDataRange(VectorBuffer& data, unsigned start, unsigned count, bool discard = false); 13 tolua_outside VectorBuffer VertexBufferGetData @ GetData(); 14 15 bool IsShadowed() const; 16 bool IsDynamic() const; 17 unsigned GetVertexCount() const; 18 unsigned GetVertexSize() const; 19 tolua_outside const PODVector<VertexElement>& VertexBufferGetElements @ GetElements() const; 20 bool HasElement(VertexElementSemantic semantic, unsigned char index = 0) const; 21 bool HasElement(VertexElementType type, VertexElementSemantic semantic, unsigned char index = 0) const; 22 unsigned GetElementOffset(VertexElementSemantic semantic, unsigned char index = 0) const; 23 unsigned GetElementOffset(VertexElementType type, VertexElementSemantic semantic, unsigned char index = 0) const; 24 unsigned GetElementMask() const; 25 26 tolua_property__is_set bool shadowed; 27 tolua_readonly tolua_property__is_set bool dynamic; 28 tolua_readonly tolua_property__get_set unsigned vertexCount; 29 tolua_readonly tolua_property__get_set unsigned vertexSize; 30 tolua_readonly tolua_property__get_set unsigned elementMask; 31}; 32 33${ 34#define TOLUA_DISABLE_tolua_GraphicsLuaAPI_VertexBuffer_new00 35static int tolua_GraphicsLuaAPI_VertexBuffer_new00(lua_State* tolua_S) 36{ 37 return ToluaNewObject<VertexBuffer>(tolua_S); 38} 39 40#define TOLUA_DISABLE_tolua_GraphicsLuaAPI_VertexBuffer_new00_local 41static int tolua_GraphicsLuaAPI_VertexBuffer_new00_local(lua_State* tolua_S) 42{ 43 return ToluaNewObjectGC<VertexBuffer>(tolua_S); 44} 45 46static bool VertexBufferSetData(VertexBuffer* dest, VectorBuffer& src) 47{ 48 // Make sure there is enough data 49 if (dest->GetVertexCount() && src.GetSize() >= dest->GetVertexCount() * dest->GetVertexSize()) 50 return dest->SetData(&src.GetBuffer()[0]); 51 else 52 return false; 53} 54 55static bool VertexBufferSetDataRange(VertexBuffer* dest, VectorBuffer& src, unsigned start, unsigned count, bool discard) 56{ 57 // Make sure there is enough data 58 if (dest->GetVertexCount() && src.GetSize() >= count * dest->GetVertexSize()) 59 return dest->SetDataRange(&src.GetBuffer()[0], start, count, discard); 60 else 61 return false; 62} 63 64static VectorBuffer VertexBufferGetData(VertexBuffer* src) 65{ 66 VectorBuffer ret; 67 void* data = src->Lock(0, src->GetVertexCount(), false); 68 69 if (data) 70 { 71 ret.Write(data, src->GetVertexCount() * src->GetVertexSize()); 72 ret.Seek(0); 73 src->Unlock(); 74 } 75 76 return ret; 77} 78 79static const PODVector<VertexElement>& VertexBufferGetElements(const VertexBuffer* buffer) 80{ 81 static PODVector<VertexElement> vector = buffer->GetElements(); 82 return vector; 83} 84$} 85