static bool cmp(const spNativeTexture& t2, const spNativeTexture& t1)
 {
     if (t1->getFormat() > t2->getFormat())
         return true;
     if (t1->getWidth() > t2->getWidth())
         return true;
     return t1->getHeight() > t2->getHeight();
 }
 bool operator()(const spNativeTexture& t1, const spNativeTexture& t2) const
 {
     if (t1->getFormat() < _tf)
         return true;
     if (t1->getWidth() < _w)
         return true;
     return t1->getHeight() < _h;
 }
    bool RenderTargetsManager::isGood(const spNativeTexture& t, int w, int h, TextureFormat tf) const
    {
        if (!t)
            return false;

        if (!t->getHandle())
            return false;

        if (t->getFormat() == tf &&
                t->getWidth() >= w && t->getHeight() >= h &&
                t->getWidth() <= (w + ALIGN_SIZE) && t->getHeight() <= (h + ALIGN_SIZE))
            return true;
        return false;
    }
        TextureLine(spNativeTexture t)
        {
            setVerticalMode(Box9Sprite::TILING_FULL);
            setHorizontalMode(Box9Sprite::TILING_FULL);
            Sprite::setResAnim(DebugActor::resSystem->getResAnim("checker"));

            AnimationFrame f;
            Vector2 s = fitSize(itemSize, Vector2((float)t->getWidth(), (float)t->getHeight()));

            setSize(s);

            Diffuse df;
            df.base = t;

            f.init(0, df, RectF(0, 0, 1.0f, 1.0f), RectF(0, 0, s.x, s.y), s);
            spSprite image = initActor(new Sprite,
                                       arg_blend = blend_disabled,
                                       arg_resAnim = f);
            addChild(image);

            spColorRectSprite rect = initActor(new ColorRectSprite,
                                               arg_color = Color(Color::White, 255),
                                               arg_attachTo = this);

            rect->addTween(Sprite::TweenColor(Color(Color::White, 0)), 4000, -1, true);

            char path[255];
            path::normalize(t->getName().c_str(), path);

            char txt[255];
            safe_sprintf(txt, "%s\n<div c=\"FF0000\">%s</div>-<div c=\"0000ff\">%dx%d</div>\nid: %d",
                         path,
                         textureFormat2String(t->getFormat()),
                         t->getWidth(), t->getHeight(), t->getObjectID());

            spTextField text = initActor(new TextField,
                                         arg_color = Color::Black,
                                         arg_w = (float)itemSize.x,
                                         arg_vAlign = TextStyle::VALIGN_TOP,
                                         arg_hAlign = TextStyle::HALIGN_LEFT,
                                         arg_multiline = true,
                                         arg_attachTo = rect,
                                         arg_htmlText = txt
                                        );

            text->setBreakLongWords(true);

            rect->setSize(text->getTextRect().size.cast<Vector2>() + Vector2(2, 2));
            rect->setY((itemSize.y - rect->getHeight()) / 2.0f);
        }
	void load_texture_internal(const std::string &file, spNativeTexture nt, LoadResourcesContext *load_context)
	{
		ImageData im;
		spMemoryTexture mt = new MemoryTexture;

		LOGD("loading atlas: %s", file.c_str());
		file::buffer bf;
		file::read(file.c_str(), bf);
		LOGD("atlas file loaded: %s", file.c_str());
		mt->init(bf, Renderer::getPremultipliedAlphaRender(), nt->getFormat());
		//mt->init(2048, 2048, TF_R8G8B8A8);
		im = mt->lock();
		LOGD("atlas size: %d %d", im.w, im.h);

		//Object::dumpCreatedObjects();
		load_context->createTexture(mt, nt);
	}
    void load_texture_internal(const std::string& file, spNativeTexture nt, bool linearFilter, bool clamp2edge, LoadResourcesContext* load_context)
    {
        ImageData im;
        spMemoryTexture mt = new MemoryTexture;

        LOGD("loading atlas: %s", file.c_str());
        file::buffer bf;
        file::read(file.c_str(), bf);
        LOGD("atlas file loaded: %s", file.c_str());
        mt->init(bf, true, nt->getFormat());
        im = mt->lock();
        LOGD("atlas size: %d %d", im.w, im.h);

        CreateTextureTask opt;
        opt.src = mt;
        opt.dest = nt;
        opt.linearFilter = linearFilter;
        opt.clamp2edge = clamp2edge;
        load_context->createTexture(opt);
    }