BsScriptTexture2D.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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 "CmTexture.h"
  8. #include "CmPixelUtil.h"
  9. #include "CmException.h"
  10. using namespace CamelotFramework;
  11. namespace BansheeEngine
  12. {
  13. ScriptTexture2D::ScriptTexture2D(const CM::HTexture& texture)
  14. :mTexture(texture)
  15. {
  16. }
  17. void ScriptTexture2D::initMetaData()
  18. {
  19. metaData = ScriptMeta(BansheeEngineAssemblyName, "BansheeEngine", "Texture2D", &ScriptTexture2D::initRuntimeData);
  20. MonoManager::registerScriptType(&metaData);
  21. }
  22. void ScriptTexture2D::initRuntimeData()
  23. {
  24. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptTexture2D::internal_createInstance);
  25. metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptTexture2D::internal_destroyInstance);
  26. }
  27. void ScriptTexture2D::internal_createInstance(MonoObject* instance, CM::UINT32 format, CM::UINT32 width, CM::UINT32 height, bool hasMipmaps, bool gammaCorrection)
  28. {
  29. PixelFormat texFormat = PF_R8G8B8;
  30. switch(format)
  31. {
  32. case 0: // RGB
  33. texFormat = PF_R8G8B8;
  34. break;
  35. case 1: // RGBA
  36. texFormat = PF_R8G8B8A8;
  37. break;
  38. default:
  39. CM_EXCEPT(InvalidParametersException, "Unsupported texture format");
  40. }
  41. int numMips = 0;
  42. if(hasMipmaps)
  43. numMips = PixelUtil::getMaxMipmaps(width, height, 1, texFormat);
  44. HTexture texture = Texture::create(TEX_TYPE_2D, width, height, numMips, texFormat, TU_STATIC, gammaCorrection);
  45. ScriptResourceManager::instance().createScriptTexture(instance, texture);
  46. }
  47. void ScriptTexture2D::internal_destroyInstance(ScriptTexture2D* nativeInstance)
  48. {
  49. ScriptResourceManager::instance().destroyScriptResource(nativeInstance);
  50. }
  51. void ScriptTexture2D::setNativeHandle(const HResource& resource)
  52. {
  53. mTexture = static_resource_cast<Resource>(mTexture);
  54. }
  55. }