Cogs.Core
BufferManager.cpp
1#include "BufferManager.h"
2
3#include "Rendering/IBuffers.h"
4
5#include "ResourceLoadInfo.h"
6
7Cogs::Core::ResourceBufferHandle Cogs::Core::BufferManager::loadBuffer(int size, const uint8_t * data, ResourceId id, ResourceLoadFlags flags)
8{
9 BufferLoadInfo & r = *createLoadInfo();
10 r.loadFlags = flags;
11 r.resourceId = id;
12
13 auto buffer = loadResource(&r);
14
15 if (data) {
16 buffer->resize(size);
17 buffer->set(0, size, data);
18 } else {
19 buffer->resize(size);
20 }
21
22 return buffer;
23}
24
25void Cogs::Core::BufferManager::resourceChanged(ResourceBase * /*r*/)
26{
27 // No internal update handling for now.
28}
29
30void Cogs::Core::BufferManager::resourceDeleted(ResourceBase * r)
31{
32 if (r->isResident()) {
33 auto device = context->renderer->getDevice();
34 auto buffers = device->getBuffers();
35 auto handle = BufferHandle((intptr_t)r->getAttachedResource());
36
37 if (handle) {
38 buffers->releaseBuffer(handle);
39 }
40
41 r->unsetFlag(ResourceFlags::Resident);
42 r->attachResource(nullptr);
43 }
44
45 ResourceManager::safeDestroy(r);
46}
@ Resident
The resource is loaded onto the GPU.