Merge branch '3.7-beta' into 3.7-beta-cpp

This commit is contained in:
badlogic 2018-07-18 15:20:05 +02:00
commit cb22d5dab9
5 changed files with 15 additions and 16 deletions

View File

@ -34,7 +34,9 @@
USING_NS_CC; USING_NS_CC;
using namespace spine; using namespace spine;
#define NUM_SKELETONS 50 #define NUM_SKELETONS 50
Cocos2dTextureLoader textureLoader;
Scene* BatchingExample::scene () { Scene* BatchingExample::scene () {
Scene *scene = Scene::create(); Scene *scene = Scene::create();
@ -45,8 +47,8 @@ Scene* BatchingExample::scene () {
bool BatchingExample::init () { bool BatchingExample::init () {
if (!LayerColor::initWithColor(Color4B(128, 128, 128, 255))) return false; if (!LayerColor::initWithColor(Color4B(128, 128, 128, 255))) return false;
// Load the texture atlas. // Load the texture atlas. Note that the texture loader has to live
Cocos2dTextureLoader textureLoader; // as long as the Atlas, as the Atlas destructor will call TextureLoader::unload.
_atlas = new (__FILE__, __LINE__) Atlas("spineboy.atlas", &textureLoader); _atlas = new (__FILE__, __LINE__) Atlas("spineboy.atlas", &textureLoader);
CCASSERT(_atlas, "Error reading atlas file."); CCASSERT(_atlas, "Error reading atlas file.");

View File

@ -106,10 +106,6 @@ GLuint filter (TextureFilter filter) {
Cocos2dTextureLoader::Cocos2dTextureLoader() : TextureLoader() { } Cocos2dTextureLoader::Cocos2dTextureLoader() : TextureLoader() { }
Cocos2dTextureLoader::~Cocos2dTextureLoader() { } Cocos2dTextureLoader::~Cocos2dTextureLoader() { }
static void unloadTexture (void* texture) {
((Texture2D*)texture)->release();
}
void Cocos2dTextureLoader::load(AtlasPage& page, const spine::String& path) { void Cocos2dTextureLoader::load(AtlasPage& page, const spine::String& path) {
Texture2D* texture = Director::getInstance()->getTextureCache()->addImage(path.buffer()); Texture2D* texture = Director::getInstance()->getTextureCache()->addImage(path.buffer());
CCASSERT(texture != nullptr, "Invalid image"); CCASSERT(texture != nullptr, "Invalid image");
@ -118,13 +114,13 @@ void Cocos2dTextureLoader::load(AtlasPage& page, const spine::String& path) {
Texture2D::TexParams textureParams = {filter(page.minFilter), filter(page.magFilter), wrap(page.uWrap), wrap(page.vWrap)}; Texture2D::TexParams textureParams = {filter(page.minFilter), filter(page.magFilter), wrap(page.uWrap), wrap(page.vWrap)};
texture->setTexParameters(textureParams); texture->setTexParameters(textureParams);
page.setRendererObject(texture, unloadTexture); page.setRendererObject(texture);
page.width = texture->getPixelsWide(); page.width = texture->getPixelsWide();
page.height = texture->getPixelsHigh(); page.height = texture->getPixelsHigh();
} }
void Cocos2dTextureLoader::unload(void* texture) { void Cocos2dTextureLoader::unload(void* texture) {
unloadTexture(texture); ((Texture2D*)texture)->release();
} }

View File

@ -37,7 +37,7 @@ typedef void (*DisposeRendererObject) (void* rendererObject);
class HasRendererObject { class HasRendererObject {
public: public:
explicit HasRendererObject() : _rendererObject(NULL) {}; explicit HasRendererObject() : _rendererObject(NULL), _dispose(NULL) {};
virtual ~HasRendererObject() { virtual ~HasRendererObject() {
if (_dispose && _rendererObject) if (_dispose && _rendererObject)

View File

@ -71,6 +71,11 @@ Atlas::Atlas(const char *data, int length, const char *dir, TextureLoader *textu
} }
Atlas::~Atlas() { Atlas::~Atlas() {
if (_textureLoader) {
for (size_t i = 0, n = _pages.size(); i < n; ++i) {
_textureLoader->unload(_pages[i]->getRendererObject());
}
}
ContainerUtil::cleanUpVectorOfPointers(_pages); ContainerUtil::cleanUpVectorOfPointers(_pages);
ContainerUtil::cleanUpVectorOfPointers(_regions); ContainerUtil::cleanUpVectorOfPointers(_regions);
} }

View File

@ -281,10 +281,6 @@ void SkeletonDrawable::draw(RenderTarget &target, RenderStates states) const {
if (vertexEffect != 0) vertexEffect->end(); if (vertexEffect != 0) vertexEffect->end();
} }
void deleteTexture(void* texture) {
delete (Texture *) texture;
}
void SFMLTextureLoader::load(AtlasPage &page, const String &path) { void SFMLTextureLoader::load(AtlasPage &page, const String &path) {
Texture *texture = new Texture(); Texture *texture = new Texture();
if (!texture->loadFromFile(path.buffer())) return; if (!texture->loadFromFile(path.buffer())) return;
@ -292,14 +288,14 @@ void SFMLTextureLoader::load(AtlasPage &page, const String &path) {
if (page.magFilter == TextureFilter_Linear) texture->setSmooth(true); if (page.magFilter == TextureFilter_Linear) texture->setSmooth(true);
if (page.uWrap == TextureWrap_Repeat && page.vWrap == TextureWrap_Repeat) texture->setRepeated(true); if (page.uWrap == TextureWrap_Repeat && page.vWrap == TextureWrap_Repeat) texture->setRepeated(true);
page.setRendererObject(texture, deleteTexture); page.setRendererObject(texture);
Vector2u size = texture->getSize(); Vector2u size = texture->getSize();
page.width = size.x; page.width = size.x;
page.height = size.y; page.height = size.y;
} }
void SFMLTextureLoader::unload(void *texture) { void SFMLTextureLoader::unload(void *texture) {
deleteTexture(texture); delete (Texture *) texture;
} }
SpineExtension *getDefaultExtension() { SpineExtension *getDefaultExtension() {