BsMaterialProxy.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "BsMaterialProxy.h"
  2. #include "BsFrameAlloc.h"
  3. namespace BansheeEngine
  4. {
  5. MaterialProxy::DirtyParamsInfo* MaterialProxy::DirtyParamsInfo::create(FrameAlloc* alloc, UINT32 numParams)
  6. {
  7. UINT32 sizeRequired = sizeof(DirtyParamsInfo) + numParams * sizeof(ParamsBindInfo);
  8. UINT8* buffer = (UINT8*)alloc->alloc(sizeRequired);
  9. MaterialProxy::DirtyParamsInfo* dirtyParamsInfo = (MaterialProxy::DirtyParamsInfo*)buffer;
  10. dirtyParamsInfo->numEntries = numParams;
  11. dirtyParamsInfo->owner = alloc;
  12. buffer += sizeof(MaterialProxy::DirtyParamsInfo);
  13. MaterialProxy::ParamsBindInfo* paramsInfoArray = (MaterialProxy::ParamsBindInfo*)buffer;
  14. dirtyParamsInfo->entries = paramsInfoArray;
  15. // Construct shared pointers
  16. for (UINT32 i = 0; i < numParams; i++)
  17. {
  18. new (&dirtyParamsInfo->entries[i].params) GpuParamBlockPtr(nullptr);
  19. }
  20. return dirtyParamsInfo;
  21. }
  22. void MaterialProxy::DirtyParamsInfo::destroy(DirtyParamsInfo* paramsInfo)
  23. {
  24. // Destruct shared pointers
  25. for (UINT32 i = 0; i < paramsInfo->numEntries; i++)
  26. {
  27. paramsInfo->entries[i].params.~shared_ptr();
  28. }
  29. paramsInfo->owner->dealloc((UINT8*)paramsInfo);
  30. }
  31. }