预览一致性修复
This commit is contained in:
1 parent
11b1c95d98
commit
f0c7e27552
7 files changed
+189
-36
No files matched your search
@@ -12,6 +12,7 @@ const frames=versions.map(version=>{
|
||||
html+=script(fs.readFileSync(path.join(root,'lib',version,'spine-canvas.js'),'utf8'));
|
||||
html+=script(`(async()=>{try{
|
||||
const image=new Image();image.src='data:image/png;base64,${fs.readFileSync(path.join(dir,'spineboy.png')).toString('base64')}';await image.decode();
|
||||
await modules['./spine-webgl-rasterizer.js'].prepareTexture(image,await (await fetch(image.src)).blob());
|
||||
const text=${JSON.stringify(fs.readFileSync(path.join(dir,'spineboy.atlas'),'utf8'))};
|
||||
const texture=new (spine.CanvasTexture||spine.canvas.CanvasTexture)(image);let atlas;
|
||||
if(spine.TextureAtlas.length<=1){atlas=new spine.TextureAtlas(text);for(const page of atlas.pages){if(page.setTexture)page.setTexture(texture);else page.texture=texture}}
|
||||
@@ -33,6 +34,18 @@ const frames=versions.map(version=>{
|
||||
renderer.draw(skeleton);const pixels=ctx.getImageData(0,0,400,400).data;
|
||||
if(mode===0)normal=pixels;else{let changed=0;for(let i=0;i<pixels.length;i+=4)if(Math.abs(pixels[i]-normal[i])>3)changed++;if(changed<100)throw Error('Slot multiply did not change image');}
|
||||
}
|
||||
let black;
|
||||
for(const tint of [[0,0,0],[0.25,0.5,0.75]]){
|
||||
ctx.setTransform(1,0,0,1,0,0);ctx.fillStyle='#1e1e1e';ctx.fillRect(0,0,400,400);
|
||||
const scale=320/Math.max(size.x,size.y);ctx.translate(200,200);ctx.scale(scale,-scale);ctx.translate(-offset.x-size.x/2,-offset.y-size.y/2);
|
||||
modules['./spine-background.js'].drawCheckerboard(ctx,400,400);
|
||||
for(const slot of skeleton.slots)slot.data.blendMode=0;
|
||||
[skeleton.color.r,skeleton.color.g,skeleton.color.b]=tint;
|
||||
renderer.draw(skeleton);const pixels=ctx.getImageData(0,0,400,400).data;
|
||||
if(tint[0]===0)black=pixels;
|
||||
else{let checked=0,wrong=0;for(let i=0;i<pixels.length;i+=4)for(let c=0;c<3;c++)if(normal[i+c]-black[i+c]>30){checked++;const expected=black[i+c]+(normal[i+c]-black[i+c])*tint[c];if(Math.abs(pixels[i+c]-expected)>5)wrong++;}
|
||||
if(checked<100||wrong>checked*0.01)throw Error('Vertex tint mismatch: '+wrong+'/'+checked);}
|
||||
}
|
||||
renderer.premultipliedAlpha=true;renderer.draw(skeleton);renderer.dispose();
|
||||
parent.postMessage({version,result:'PASS'},'*');
|
||||
}catch(error){parent.postMessage({version,error:error.stack},'*')}})();`);
|
||||
|
||||
Reference in new issue
Block a user