nux-1.16.0
|
Public Member Functions | |
CachedVertexBuffer (NResourceSet *ResourceManager, VertexBuffer *resource) | |
bool | UpdateResource (ResourceData *Resource) |
int | GetElementSize () const |
int | GetBufferStride () const |
Public Attributes | |
ObjectPtr< IOpenGLVertexBuffer > | _vertex_buffer |
Definition at line 103 of file GLVertexResourceManager.h.
bool nux::CachedVertexBuffer::UpdateResource | ( | ResourceData * | Resource | ) | [virtual] |
Updates the resource.
Implements nux::CachedResourceData.
Definition at line 282 of file GLVertexResourceManager.cpp.
References nux::ObjectPtr< T >::Release().
{ if(Source == 0) { _Stride = 0; _vertex_buffer.Release(); return true; } VertexBuffer *SourceVtxBuffer = 0; nuxAssert(Source->Type().IsDerivedFromType(VertexBuffer::StaticObjectType)); if(Source->Type().IsDerivedFromType(VertexBuffer::StaticObjectType)) { SourceVtxBuffer = NUX_STATIC_CAST(VertexBuffer *, Source); } else { return false; } if((SourceVtxBuffer->GetSize() == 0) || (SourceVtxBuffer->GetStride() == 0)) { _Stride = 0; _vertex_buffer.Release(); return true; } if(_Size != SourceVtxBuffer->GetSize()) { // The current size of the cached buffer is not the same as the requested one. // Delete the previously allocated buffer and create a new one. _Size = SourceVtxBuffer->GetSize(); _Stride = SourceVtxBuffer->GetStride(); //Release the previous vertex buffer if any. _vertex_buffer.Release(); _vertex_buffer = GetGraphicsDisplay()->GetGpuDevice()->CreateVertexBuffer(_Size, VBO_USAGE_DYNAMIC); LoadVertexData(SourceVtxBuffer); } else { // The buffer size has changed. Delete the previously allocated buffer and create a new one. _Stride = SourceVtxBuffer->GetStride(); LoadVertexData(SourceVtxBuffer); } return true; }