BsScriptTexture2D.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "BsScriptTexture2D.h"
  2. #include "BsScriptResourceManager.h"
  3. #include "BsScriptMeta.h"
  4. #include "BsMonoField.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoManager.h"
  7. #include "BsTexture.h"
  8. #include "BsPixelUtil.h"
  9. #include "BsException.h"
  10. namespace BansheeEngine
  11. {
  12. ScriptTexture2D::ScriptTexture2D(MonoObject* instance, const HTexture& texture)
  13. :ScriptObject(instance), mTexture(texture)
  14. {
  15. }
  16. void ScriptTexture2D::initRuntimeData()
  17. {
  18. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptTexture2D::internal_createInstance);
  19. }
  20. void ScriptTexture2D::internal_createInstance(MonoObject* instance, UINT32 format, UINT32 width, UINT32 height, bool hasMipmaps, bool gammaCorrection)
  21. {
  22. PixelFormat texFormat = PF_R8G8B8;
  23. switch(format)
  24. {
  25. case 0: // RGB
  26. texFormat = PF_R8G8B8;
  27. break;
  28. case 1: // RGBA
  29. texFormat = PF_R8G8B8A8;
  30. break;
  31. default:
  32. BS_EXCEPT(InvalidParametersException, "Unsupported texture format");
  33. }
  34. int numMips = 0;
  35. if(hasMipmaps)
  36. numMips = PixelUtil::getMaxMipmaps(width, height, 1, texFormat);
  37. HTexture texture = Texture::create(TEX_TYPE_2D, width, height, numMips, texFormat, TU_STATIC, gammaCorrection);
  38. ScriptResourceManager::instance().createScriptTexture(instance, texture);
  39. }
  40. void ScriptTexture2D::_onManagedInstanceDeleted()
  41. {
  42. mManagedInstance = nullptr;
  43. ScriptResourceManager::instance().destroyScriptResource(this);
  44. }
  45. void ScriptTexture2D::setNativeHandle(const HResource& resource)
  46. {
  47. mTexture = static_resource_cast<Resource>(mTexture);
  48. }
  49. }