axmol/extensions/DragonBones/CCTextureAtlasData.cpp

76 lines
2.0 KiB
C++

#include "CCTextureAtlasData.h"
DRAGONBONES_NAMESPACE_BEGIN
void CCTextureAtlasData::_onClear()
{
TextureAtlasData::_onClear();
if (_renderTexture != nullptr)
{
_renderTexture->release();
_renderTexture = nullptr;
}
}
TextureData* CCTextureAtlasData::createTexture() const
{
return BaseObject::borrowObject<CCTextureData>();
}
void CCTextureAtlasData::setRenderTexture(ax::Texture2D* value)
{
if (_renderTexture == value)
{
return;
}
_renderTexture = value;
if (_renderTexture != nullptr)
{
_renderTexture->retain();
for (const auto& pair : textures)
{
const auto textureData = static_cast<CCTextureData*>(pair.second);
if (textureData->spriteFrame == nullptr)
{
ax::Rect rect(textureData->region.x, textureData->region.y,
textureData->rotated ? textureData->region.height : textureData->region.width,
textureData->rotated ? textureData->region.width : textureData->region.height);
ax::Vec2 offset(0.0f, 0.0f);
ax::Size originSize(rect.size.width, rect.size.height);
textureData->spriteFrame = ax::SpriteFrame::createWithTexture(
_renderTexture, rect, textureData->rotated, offset, originSize); // TODO multiply textureAtlas
textureData->spriteFrame->retain();
}
}
}
else
{
for (const auto& pair : textures)
{
const auto textureData = static_cast<CCTextureData*>(pair.second);
if (textureData->spriteFrame != nullptr)
{
textureData->spriteFrame->release();
textureData->spriteFrame = nullptr;
}
}
}
}
void CCTextureData::_onClear()
{
TextureData::_onClear();
if (spriteFrame != nullptr)
{
spriteFrame->release();
spriteFrame = nullptr;
}
}
DRAGONBONES_NAMESPACE_END