mirror of
https://github.com/smallmain/cocos-enhance-kit.git
synced 2024-12-26 03:38:29 +00:00
[engine] 修复 Effect 被修改后其变体的 hash 错误问题
This commit is contained in:
parent
e4e59b0305
commit
f31cb598e3
@ -75,7 +75,7 @@ export default class EffectVariant extends EffectBase {
|
|||||||
|
|
||||||
let effect = this._effect;
|
let effect = this._effect;
|
||||||
if (effect) {
|
if (effect) {
|
||||||
hash += utils.serializePasses(effect.passes);
|
hash += effect._id;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._hash = murmurhash2(hash, 666);
|
this._hash = murmurhash2(hash, 666);
|
||||||
|
@ -7,6 +7,8 @@ export default class Effect extends EffectBase {
|
|||||||
|
|
||||||
_techniques: Technique[] = [];
|
_techniques: Technique[] = [];
|
||||||
_asset = null;
|
_asset = null;
|
||||||
|
static id = 0;
|
||||||
|
_id = '';
|
||||||
|
|
||||||
get technique () {
|
get technique () {
|
||||||
return this._technique;
|
return this._technique;
|
||||||
@ -22,6 +24,7 @@ export default class Effect extends EffectBase {
|
|||||||
constructor (name, techniques, techniqueIndex, asset) {
|
constructor (name, techniques, techniqueIndex, asset) {
|
||||||
super();
|
super();
|
||||||
this.init(name, techniques, techniqueIndex, asset, true);
|
this.init(name, techniques, techniqueIndex, asset, true);
|
||||||
|
this._id = '|' + Effect.id++;
|
||||||
}
|
}
|
||||||
|
|
||||||
init (name, techniques, techniqueIndex, asset, createNative) {
|
init (name, techniques, techniqueIndex, asset, createNative) {
|
||||||
|
@ -18,12 +18,14 @@ import enums from '../../../renderer/enums';
|
|||||||
const hashArray = [];
|
const hashArray = [];
|
||||||
|
|
||||||
function serializeDefines (defines, names) {
|
function serializeDefines (defines, names) {
|
||||||
const len = names.length;
|
let i = 0;
|
||||||
for (let i = 0; i < len; i++) {
|
for (const name in defines) {
|
||||||
const name = names[i];
|
if (Object.hasOwnProperty.call(defines, name)) {
|
||||||
hashArray[i] = name + defines[name];
|
hashArray[i] = name + defines[name];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
hashArray.length = len;
|
hashArray.length = i;
|
||||||
return hashArray.join('');
|
return hashArray.join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,21 +65,23 @@ function serializePasses (passes) {
|
|||||||
|
|
||||||
function serializeUniforms (uniforms, names) {
|
function serializeUniforms (uniforms, names) {
|
||||||
let index = 0;
|
let index = 0;
|
||||||
for (let i = 0, len = names.length; i < len; i++) {
|
for (const name in uniforms) {
|
||||||
let param = uniforms[names[i]];
|
if (Object.hasOwnProperty.call(uniforms, name)) {
|
||||||
let prop = param.value;
|
const param = uniforms[name];
|
||||||
|
let prop = param.value;
|
||||||
|
|
||||||
if (!prop) {
|
if (!prop) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (param.type === enums.PARAM_TEXTURE_2D || param.type === enums.PARAM_TEXTURE_CUBE) {
|
if (param.type === enums.PARAM_TEXTURE_2D || param.type === enums.PARAM_TEXTURE_CUBE) {
|
||||||
hashArray[index] = prop._id;
|
hashArray[index] = prop._id;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hashArray[index] = prop.toString();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
hashArray[index] = prop.toString();
|
|
||||||
}
|
|
||||||
index++
|
|
||||||
}
|
}
|
||||||
hashArray.length = index;
|
hashArray.length = index;
|
||||||
return hashArray.join(';');
|
return hashArray.join(';');
|
||||||
|
Loading…
Reference in New Issue
Block a user