BsScriptTexture2D.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "BsScriptTexture2D.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "CmTexture.h"
  7. #include "CmPixelUtil.h"
  8. #include "CmException.h"
  9. using namespace CamelotFramework;
  10. namespace BansheeEngine
  11. {
  12. ScriptTexture2D::ScriptTexture2D(const CM::HTexture& texture)
  13. :mTexture(texture)
  14. {
  15. }
  16. void ScriptTexture2D::initMetaData()
  17. {
  18. metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "Texture2D", &ScriptTexture2D::initRuntimeData);
  19. MonoManager::registerScriptType(&metaData);
  20. }
  21. void ScriptTexture2D::initRuntimeData()
  22. {
  23. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptTexture2D::internal_createInstance);
  24. metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptTexture2D::internal_destroyInstance);
  25. }
  26. void ScriptTexture2D::internal_createInstance(MonoObject* instance, CM::UINT32 format, CM::UINT32 width, CM::UINT32 height, bool hasMipmaps, bool gammaCorrection)
  27. {
  28. PixelFormat texFormat = PF_R8G8B8;
  29. switch(format)
  30. {
  31. case 0: // RGB
  32. texFormat = PF_R8G8B8;
  33. break;
  34. case 1: // RGBA
  35. texFormat = PF_R8G8B8A8;
  36. break;
  37. default:
  38. CM_EXCEPT(InvalidParametersException, "Unsupported texture format");
  39. }
  40. int numMips = 0;
  41. if(hasMipmaps)
  42. numMips = PixelUtil::getMaxMipmaps(width, height, 1, texFormat);
  43. HTexture texture = Texture::create(TEX_TYPE_2D, width, height, numMips, texFormat, TU_STATIC, gammaCorrection);
  44. ScriptTexture2D* nativeInstance = new (cm_alloc<ScriptTexture2D>()) ScriptTexture2D(texture);
  45. nativeInstance->createInstance(instance);
  46. metaData.thisPtrField->setValue(instance, nativeInstance);
  47. }
  48. void ScriptTexture2D::internal_destroyInstance(ScriptTexture2D* nativeInstance)
  49. {
  50. nativeInstance->destroyInstance();
  51. cm_delete(nativeInstance);
  52. }
  53. }