Skip to content

Commit

Permalink
fix small issues (#6688)
Browse files Browse the repository at this point in the history
* export releaseUnusedAssets

* improve readability

* can't check texture when release asset

* refine

* refine tsd

* fix preloading error in preview

* fix typo

* refine check createImageBitmap

* refine

* dont release destroyed asset

* fix asyncLoadAsset

* refine

* refine
  • Loading branch information
SantyWang committed May 21, 2020
1 parent 3170c04 commit 53e95ea
Show file tree
Hide file tree
Showing 12 changed files with 107 additions and 116 deletions.
2 changes: 1 addition & 1 deletion cocos2d/core/CCDirector.js
Original file line number Diff line number Diff line change
Expand Up @@ -580,7 +580,7 @@ cc.Director.prototype = {
return bundle.getSceneInfo(sceneName);
});
if (bundle) {
return bundle.preloadScene(sceneName, null, onProgress, onLoaded);
bundle.preloadScene(sceneName, null, onProgress, onLoaded);
}
else {
cc.errorID(1209, sceneName);
Expand Down
10 changes: 5 additions & 5 deletions cocos2d/core/asset-manager/CCAssetManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -416,8 +416,8 @@ AssetManager.prototype = {
* Every custom parameter in `requests` will be tranfered to handler of `downloader` and `parser` as `options`.
* You can register you own handler downloader or parser to collect these custom parameters for some effect.
*
* Reserved Keyword: [`uuid`, `url`, `path`, `dir`, `scene`, `type`, `priority`, `preset`, `audioLoadMode`, `ext`, `bundle`, `onFileProgress`, `maxConcurrency`, `maxRequestsPerFrame`
* `maxRetryCount`, `version`, `responseType`, `withCredentials`, `mimeType`, `timeout`, `header`, `reload`, `cacheAsset`, `cacheEnabled`],
* Reserved Keyword: `uuid`, `url`, `path`, `dir`, `scene`, `type`, `priority`, `preset`, `audioLoadMode`, `ext`, `bundle`, `onFileProgress`, `maxConcurrency`, `maxRequestsPerFrame`
* `maxRetryCount`, `version`, `responseType`, `withCredentials`, `mimeType`, `timeout`, `header`, `reload`, `cacheAsset`, `cacheEnabled`,
* Please DO NOT use these words as custom options!
*
* !#zh
Expand All @@ -426,8 +426,8 @@ AssetManager.prototype = {
* 依赖资源,则 `options` 中的参数会继续向依赖项中分发。request中的自定义参数都会以 `options` 形式传入加载流程中的 `downloader`, `parser` 的方法中, 你可以
* 扩展 `downloader`, `parser` 收集参数完成想实现的效果。
*
* 保留关键字: [`uuid`, `url`, `path`, `dir`, `scene`, `type`, `priority`, `preset`, `audioLoadMode`, `ext`, `bundle`, `onFileProgress`, `maxConcurrency`, `maxRequestsPerFrame`
* `maxRetryCount`, `version`, `responseType`, `withCredentials`, `mimeType`, `timeout`, `header`, `reload`, `cacheAsset`, `cacheEnabled`],
* 保留关键字: `uuid`, `url`, `path`, `dir`, `scene`, `type`, `priority`, `preset`, `audioLoadMode`, `ext`, `bundle`, `onFileProgress`, `maxConcurrency`, `maxRequestsPerFrame`
* `maxRetryCount`, `version`, `responseType`, `withCredentials`, `mimeType`, `timeout`, `header`, `reload`, `cacheAsset`, `cacheEnabled`,
* 请不要使用这些字段为自定义参数!
*
* @method loadAny
Expand Down Expand Up @@ -534,7 +534,7 @@ AssetManager.prototype = {
if (!(asset instanceof cc.Asset)) throw new Error('input is not asset');
var { options, onComplete } = parseParameters(options, undefined, onComplete);

if (asset.loaded || !asset._native || asset._nativeAsset) {
if (!asset._native || asset._nativeAsset) {
return asyncify(onComplete)(null);
}

Expand Down
2 changes: 1 addition & 1 deletion cocos2d/core/asset-manager/bundle.js
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ Bundle.prototype = {

options.preset = options.preset || 'scene';
options.bundle = this.name;
return cc.assetManager.loadAny({ 'scene': sceneName }, options, onProgress, function (err, sceneAsset) {
cc.assetManager.loadAny({ 'scene': sceneName }, options, onProgress, function (err, sceneAsset) {
if (err) {
cc.error(err.message, err.stack);
onComplete && onComplete(err);
Expand Down
38 changes: 22 additions & 16 deletions cocos2d/core/asset-manager/depend-util.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,31 +151,37 @@ var dependUtil = {
* parse(uuid: string, json: any): { deps?: string[], nativeDep?: any }
*/
parse (uuid, json) {
if (!CC_EDITOR && this._depends.has(uuid)) return this._depends.get(uuid);

var out = Object.create(null);
var type = json.__type__;

var out = null;
// scene or prefab
if (Array.isArray(json)) {
out.deps = cc.Asset._parseDepsFromJson(json);
out.asyncLoadAssets = json[0].asyncLoadAssets;

if (this._depends.has(uuid)) return this._depends.get(uuid)
out = {
deps: cc.Asset._parseDepsFromJson(json),
asyncLoadAssets: json[0].asyncLoadAssets
};
}
// get deps from json
else if (type) {
var ctor = js._getClassById(type);
out.preventPreloadNativeObject = ctor.preventPreloadNativeObject;
out.preventDeferredLoadDependents = ctor.preventDeferredLoadDependents;
out.deps = ctor._parseDepsFromJson(json);
out.nativeDep = ctor._parseNativeDepFromJson(json);
else if (json.__type__) {

if (this._depends.has(uuid)) return this._depends.get(uuid);
var ctor = js._getClassById(json.__type__);
out = {
preventPreloadNativeObject: ctor.preventPreloadNativeObject,
preventDeferredLoadDependents: ctor.preventDeferredLoadDependents,
deps: ctor._parseDepsFromJson(json),
nativeDep: ctor._parseNativeDepFromJson(json)
};
out.nativeDep && (out.nativeDep.uuid = uuid);
}
// get deps from an existing asset
else {
var asset = json;
out.deps = [];
out.preventPreloadNativeObject = asset.constructor.preventPreloadNativeObject;
out.preventDeferredLoadDependents = asset.constructor.preventDeferredLoadDependents;
out = {
deps: [],
preventPreloadNativeObject: asset.constructor.preventPreloadNativeObject,
preventDeferredLoadDependents: asset.constructor.preventDeferredLoadDependents
};
let deps = asset.__depends__;
for (var i = 0, l = deps.length; i < l; i++) {
var dep = deps[i].uuid;
Expand Down
12 changes: 5 additions & 7 deletions cocos2d/core/asset-manager/downloader.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,28 +102,26 @@ var downloadBundle = function (url, options, onComplete) {
var version = options.version || downloader.bundleVers[bundleName];
var count = 0;
var config = version ? `${url}/config.${version}.json` : `${url}/config.json`;
let out = null;
let out = null, error = null;
downloadJson(config, options, function (err, response) {
if (err) {
onComplete(err);
return;
error = err;
}
out = response;
count++;
if (count === 2) {
onComplete(null, out);
onComplete(error, out);
}
});

var js = version ? `${url}/index.${version}.js` : `${url}/index.js`;
downloadScript(js, options, function (err) {
if (err) {
onComplete(err);
return;
error = err;
}
count++;
if (count === 2) {
onComplete(null, out);
onComplete(error, out);
}
});
};
Expand Down
1 change: 1 addition & 0 deletions cocos2d/core/asset-manager/load.js
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ function loadDepends (task, asset, done, init) {
var { __asyncLoadAssets__, cacheAsset } = options;

var depends = [];
// add reference avoid being released during loading dependencies
asset.addRef && asset.addRef();
getDepends(uuid, asset, Object.create(null), depends, false, __asyncLoadAssets__, config);
task.dispatch('progress', ++progress.finish, progress.total += depends.length, item);
Expand Down
102 changes: 48 additions & 54 deletions cocos2d/core/asset-manager/pack-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ const { files } = require('./shared');

var _loading = new Cache();

function isLoading (val) {
return _loading.has(val.uuid);
}


/**
* @module cc.AssetManager
*/
Expand Down Expand Up @@ -196,64 +201,53 @@ var packManager = {
*/
load (item, options, onComplete) {
// if not in any package, download as uausl
if (item.isNative || !item.info || !item.info.packs) {
downloader.download(item.id, item.url, item.ext, item.options, onComplete);
}
else {
if (files.has(item.id)) {
onComplete(null, files.get(item.id));
if (item.isNative || !item.info || !item.info.packs) return downloader.download(item.id, item.url, item.ext, item.options, onComplete);

if (files.has(item.id)) return onComplete(null, files.get(item.id));

var packs = item.info.packs;

// find a loading package
var pack = packs.find(isLoading);

if (pack) return _loading.get(pack.uuid).push({ onComplete, id: item.id });

// download a new package
pack = packs[0];
_loading.add(pack.uuid, [{ onComplete, id: item.id }]);

let url = cc.assetManager._transform(pack.uuid, {ext: pack.ext, bundle: item.config.name});

downloader.download(pack.uuid, url, pack.ext, item.options, function (err, data) {
files.remove(pack.uuid);
if (err) {
cc.error(err.message, err.stack);
}
else {
var packs = item.info.packs;
// find a loading package
var pack = packs.find(function (val) {
return _loading.has(val.uuid);
});

if (pack) {
_loading.get(pack.uuid).push({ onComplete, id: item.id });
// unpack package
packManager.unpack(pack.packs, data, pack.ext, item.options, function (err, result) {
if (!err) {
for (var id in result) {
files.add(id, result[id]);
}
}
else {
// download a new package
pack = packs[0];
_loading.add(pack.uuid, [{ onComplete, id: item.id }]);

var url = cc.assetManager._transform(pack.uuid, {ext: pack.ext, bundle: item.config.name});
var callbacks = _loading.remove(pack.uuid);
for (var i = 0, l = callbacks.length; i < l; i++) {
var cb = callbacks[i];
if (err) {
cb.onComplete(err);
continue;
}

downloader.download(pack.uuid, url, pack.ext, item.options, function (err, data) {
files.remove(pack.uuid);
if (err) {
cc.error(err.message, err.stack);
}
// unpack package
packManager.unpack(pack.packs, data, pack.ext, item.options, function (err, result) {
if (!err) {
for (var id in result) {
files.add(id, result[id]);
}
}
var callbacks = _loading.remove(pack.uuid);
for (var i = 0, l = callbacks.length; i < l; i++) {
var cb = callbacks[i];
if (err) {
cb.onComplete(err);
}
else {
var data = result[cb.id];
if (!data) {
cb.onComplete(new Error('can not retrieve data from package'));
}
else {
cb.onComplete(null, data);
}
}
}
});
});
var data = result[cb.id];
if (!data) {
cb.onComplete(new Error('can not retrieve data from package'));
}
else {
cb.onComplete(null, data);
}
}
}
}

});
});
}
};

Expand Down
20 changes: 2 additions & 18 deletions cocos2d/core/asset-manager/releaseManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -198,25 +198,9 @@ var releaseManager = {
_free (asset, force) {
_toDelete.remove(asset._uuid);

if (!force) {

if (!CC_NATIVERENDERER) {
var glTexture = null;
if (asset instanceof cc.Texture2D) {
glTexture = asset._texture;
}

if (glTexture && glTexture._glID != -1) {
var textureUnits = cc.renderer.device._current.textureUnits;
for (var i = 0; i < textureUnits.length; i++) {
if (glTexture === textureUnits[i]) {
console.error(`this texture ${asset._uuid} is being used`);
return;
}
}
}
}
if (!cc.isValid(asset, true)) return;

if (!force) {
if (asset.refCount > 0) {
if (checkCircularReference(asset) > 0) return;
}
Expand Down
2 changes: 1 addition & 1 deletion cocos2d/core/asset-manager/utilities.js
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ var utils = {
let dep = info.deps[i];
if (!(dep in exclude)) {
exclude[dep] = true;
depends.push({uuid: dep, asyncLoadAssets, bundle: config && config.name});
depends.push({uuid: dep, __asyncLoadAssets__: asyncLoadAssets, bundle: config && config.name});
}
}

Expand Down
18 changes: 9 additions & 9 deletions cocos2d/core/components/CCSprite.js
Original file line number Diff line number Diff line change
Expand Up @@ -415,9 +415,15 @@ var Sprite = cc.Class({
*/
getState () {},

onEnable () {
__preload () {
this._super();
CC_EDITOR && this.node.on(NodeEvent.SIZE_CHANGED, this._resizedInEditor, this);
this._applySpriteFrame();
},

onEnable () {
this._super();
this._spriteFrame && this._spriteFrame.ensureLoadTexture();

this.node.on(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this);
this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this);
Expand Down Expand Up @@ -492,12 +498,12 @@ var Sprite = cc.Class({
if (spriteFrame) {
this._updateMaterial();
let newTexture = spriteFrame.getTexture();
if (oldTexture === newTexture && (newTexture && newTexture.loaded)) {
if (newTexture && newTexture.loaded) {
this._applySpriteSize();
}
else {
this.disableRender();
spriteFrame.onTextureLoaded(this._applySpriteSize, this);
spriteFrame.once('load', this._applySpriteSize, this);
}
}
else {
Expand Down Expand Up @@ -534,12 +540,6 @@ if (CC_EDITOR) {
}
};

// override __preload
Sprite.prototype.__superPreload = cc.RenderComponent.prototype.__preload;
Sprite.prototype.__preload = function () {
if (this.__superPreload) this.__superPreload();
this.node.on(NodeEvent.SIZE_CHANGED, this._resizedInEditor, this);
};
// override onDestroy
Sprite.prototype.__superOnDestroy = cc.Component.prototype.onDestroy;
Sprite.prototype.onDestroy = function () {
Expand Down
14 changes: 11 additions & 3 deletions cocos2d/core/platform/CCSys.js
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,7 @@ function initSys () {
height: 0
};
sys.capabilities = {
'imageBitmap': typeof createImageBitmap !== 'undefined' && typeof Blob !== 'undefined'
'imageBitmap': false
};
sys.__audioSupport = {};
}
Expand Down Expand Up @@ -766,7 +766,7 @@ function initSys () {
capabilities["touches"] = false;
}

capabilities['imageBitmap'] = typeof createImageBitmap !== 'undefined' && typeof Blob !== 'undefined';
capabilities['imageBitmap'] = false;

sys.__audioSupport = {
ONLY_ONE: false,
Expand Down Expand Up @@ -992,8 +992,16 @@ function initSys () {
"canvas": _supportCanvas,
"opengl": _supportWebGL,
"webp": _supportWebp,
'imageBitmap': typeof createImageBitmap !== 'undefined' && typeof Blob !== 'undefined',
'imageBitmap': false,
};

if (typeof createImageBitmap !== 'undefined' && typeof Blob !== 'undefined') {
_tmpCanvas1.width = _tmpCanvas1.height = 2;
createImageBitmap(_tmpCanvas1, {}).then(imageBitmap => {
capabilities.imageBitmap = true;
imageBitmap.close && imageBitmap.close();
}).catch(err => {});
}
if (docEle['ontouchstart'] !== undefined || doc['ontouchstart'] !== undefined || nav.msPointerEnabled)
capabilities["touches"] = true;
if (docEle['onmouseup'] !== undefined)
Expand Down
2 changes: 1 addition & 1 deletion cocos2d/core/platform/CCView.js
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,7 @@ cc.js.mixin(View.prototype, {
if(cc.game.renderType === cc.game.RENDER_TYPE_WEBGL) {
var cache = cc.assetManager.assets;
cache.forEach(function (asset) {
if (asset instanceof cc.Texture2Dx) {
if (asset instanceof cc.Texture2D) {
var Filter = cc.Texture2D.Filter;
if (enabled) {
asset.setFilters(Filter.LINEAR, Filter.LINEAR);
Expand Down

0 comments on commit 53e95ea

Please sign in to comment.