JNIEXPORT void JNICALL Java_com_wiyun_engine_nodes_SpriteEx_nativeInit__Lcom_wiyun_engine_opengl_Texture2D_2 (JNIEnv* env, jobject thiz, jobject tex) { wyTexture2D* texNode = (wyTexture2D*)env->GetIntField(tex, g_fid_BaseObject_mPointer); wySpriteEx* sprite = WYNEW wySpriteEx(texNode); env->SetIntField(thiz, g_fid_BaseObject_mPointer, (jint)sprite); wyObjectLazyRelease(sprite); }
wySpriteEx* wySpriteEx::make(wySpriteBatchNode* pBatchNode, wyRect r, int zOrder) { /* * 这里把autoRelease移到前面,因为autoRelease有可能不在gl线程中执行,导致 * 对象被放入delay release pool, 而后面的addChildLocked可以把它清除出 * delay pool. 如果autorelease放在后面就不会了。也许大部分情况下没什么问题, * 但是如果恰好第三方应用在之后也没有继续retain的话,就导致它一直在delay pool * 里面呆着而无法释放了,在director end之前它将无法被清除。 */ wySpriteEx* sprite = WYNEW wySpriteEx(pBatchNode->getTexture(), r); sprite->autoRelease(); pBatchNode->addChildLocked(sprite, zOrder); return sprite; }
wySpriteEx* wySpriteEx::make(wySpriteBatchNode* pBatchNode, wyZwoptexFrame* f, int zOrder) { wySpriteEx* sprite = WYNEW wySpriteEx(pBatchNode->getTexture(), f); sprite->autoRelease(); pBatchNode->addChildLocked(sprite, zOrder); return sprite; }
wySpriteEx* wySpriteEx::make(wyTexture2D* pTex, wyZwoptexFrame* f) { wySpriteEx* sprite = WYNEW wySpriteEx(pTex, f); sprite->autoRelease(); return sprite; }
wySpriteEx* wySpriteEx::make(wyTexture2D* pTex, wyRect r) { wySpriteEx* sprite = WYNEW wySpriteEx(pTex, r); sprite->autoRelease(); return sprite; }