BsPixelDataEx.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Extensions/BsPixelDataEx.h"
  4. #include "Wrappers/BsScriptColor.h"
  5. namespace bs
  6. {
  7. SPtr<PixelData> PixelDataEx::create(const PixelVolume& volume, PixelFormat format)
  8. {
  9. SPtr<PixelData> pixelData = bs_shared_ptr_new<PixelData>(volume, format);
  10. pixelData->allocateInternalBuffer();
  11. return pixelData;
  12. }
  13. SPtr<PixelData> PixelDataEx::create(UINT32 width, UINT32 height, UINT32 depth, PixelFormat format)
  14. {
  15. SPtr<PixelData> pixelData = bs_shared_ptr_new<PixelData>(width, height, depth, format);
  16. pixelData->allocateInternalBuffer();
  17. return pixelData;
  18. }
  19. Color PixelDataEx::getPixel(const SPtr<PixelData>& thisPtr, int x, int y, int z)
  20. {
  21. if (!checkIsLocked(thisPtr))
  22. return thisPtr->getColorAt(x, y, z);
  23. else
  24. return Color();
  25. }
  26. void PixelDataEx::setPixel(const SPtr<PixelData>& thisPtr, const Color& value, int x, int y, int z)
  27. {
  28. if (!checkIsLocked(thisPtr))
  29. thisPtr->setColorAt(value, x, y, z);
  30. }
  31. Vector<Color> PixelDataEx::getPixels(const SPtr<PixelData>& thisPtr)
  32. {
  33. if (!checkIsLocked(thisPtr))
  34. return Vector<Color>();
  35. return thisPtr->getColors();
  36. }
  37. void PixelDataEx::setPixels(const SPtr<PixelData>& thisPtr, const Vector<Color>& value)
  38. {
  39. if (!checkIsLocked(thisPtr))
  40. return;
  41. thisPtr->setColors(value);
  42. }
  43. Vector<char> PixelDataEx::getRawPixels(const SPtr<PixelData>& thisPtr)
  44. {
  45. if (!checkIsLocked(thisPtr))
  46. return Vector<char>();
  47. Vector<char> output(thisPtr->getSize());
  48. memcpy(output.data(), thisPtr->getData(), thisPtr->getSize());
  49. return output;
  50. }
  51. void PixelDataEx::setRawPixels(const SPtr<PixelData>& thisPtr, const Vector<char>& value)
  52. {
  53. if (!checkIsLocked(thisPtr))
  54. return;
  55. UINT32 arrayLen = (UINT32)value.size();
  56. if (thisPtr->getSize() != arrayLen)
  57. {
  58. LOGERR("Unable to set colors, invalid array size.")
  59. return;
  60. }
  61. UINT8* data = thisPtr->getData();
  62. memcpy(data, value.data(), thisPtr->getSize());
  63. }
  64. bool PixelDataEx::checkIsLocked(const SPtr<PixelData>& thisPtr)
  65. {
  66. if (thisPtr->isLocked())
  67. {
  68. LOGWRN("Attempting to access a locked pixel data buffer.");
  69. return true;
  70. }
  71. return false;
  72. }
  73. }