| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #include "BsScriptTexture2D.h"
- #include "BsScriptMeta.h"
- #include "BsMonoField.h"
- #include "BsMonoClass.h"
- #include "BsMonoManager.h"
- #include "CmTexture.h"
- #include "CmPixelUtil.h"
- #include "CmException.h"
- using namespace CamelotFramework;
- namespace BansheeEngine
- {
- ScriptTexture2D::ScriptTexture2D(const CM::HTexture& texture)
- :mTexture(texture)
- {
- }
- void ScriptTexture2D::initMetaData()
- {
- metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "Texture2D", &ScriptTexture2D::initRuntimeData);
- MonoManager::registerScriptType(&metaData);
- }
- void ScriptTexture2D::initRuntimeData()
- {
- metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptTexture2D::internal_createInstance);
- metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptTexture2D::internal_destroyInstance);
- }
- void ScriptTexture2D::internal_createInstance(MonoObject* instance, CM::UINT32 format, CM::UINT32 width, CM::UINT32 height, bool hasMipmaps, bool gammaCorrection)
- {
- PixelFormat texFormat = PF_R8G8B8;
- switch(format)
- {
- case 0: // RGB
- texFormat = PF_R8G8B8;
- break;
- case 1: // RGBA
- texFormat = PF_R8G8B8A8;
- break;
- default:
- CM_EXCEPT(InvalidParametersException, "Unsupported texture format");
- }
- int numMips = 0;
- if(hasMipmaps)
- numMips = PixelUtil::getMaxMipmaps(width, height, 1, texFormat);
- HTexture texture = Texture::create(TEX_TYPE_2D, width, height, numMips, texFormat, TU_STATIC, gammaCorrection);
- ScriptTexture2D* nativeInstance = new (cm_alloc<ScriptTexture2D>()) ScriptTexture2D(texture);
- nativeInstance->createInstance(instance);
- metaData.thisPtrField->setValue(instance, nativeInstance);
- }
- void ScriptTexture2D::internal_destroyInstance(ScriptTexture2D* nativeInstance)
- {
- nativeInstance->destroyInstance();
- cm_delete(nativeInstance);
- }
- }
|