|
nux-1.14.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;
}