I found a tedious bug for Safari (which by 10 July 2018 is still not fixed) when preloading svgs for a game I was developing. Issue was that all svgs that were loaded, were drawn over last one, like the canvas wasn't cleared. I debugged pixi.js and tried to create some workaround but no solution. The solution I found was that we had to load the svgs by ourselves and just feed pixi the texture.
The solution:
const pixelRatio = window.devicePixelRatio || 1
const svgLoader = (resource, next) => {
if (resource.extension !== 'svg') return next()
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
const image = new Image()
const onImageLoad = () => {
canvas.width = image.width *= pixelRatio
canvas.height = image.height *= pixelRatio
ctx.drawImage(image, 0, 0, image.width, image.height)
resource.texture = PIXI.Texture.fromCanvas(canvas)
resource.complete()
next()
}
image.addEventListener('load', onImageLoad)
image.crossOrigin = 'anonymous'
image.src = resource.url
}
Add it to PIXI.loader as pre middleware before loading anything.
PIXI.loader.pre(svgLoader)
It's simple as that!
I posted the original solution at https://github.com/pixijs/pixijs/issues/3949#issuecomment-392732546.