Comments (6)
Hello! I just ran into the same issue! I tried the above patch but the issue persists. It only seems to happen for me when using hot-reload. (next.js + latest pixi)
From a little digging, it seems like the order of execution means duplicate uid
's are passed in to the _destroyBuffer
function. Changing _destroyBuffer
to if (gpuBuffer) gpuBuffer.destroy();
was enough to get things working again for me.
Here's a log of destroy()
with the respective buffer & uid.
GPUBuffer {size: 192, usage: 40, mapState: 'unmapped', label: 'attribute-batch-buffer'} - UID: 8
GPUBuffer {size: 24, usage: 24, mapState: 'unmapped', label: 'index-batch-buffer'} - UID: 9
GPUBuffer {size: 262140, usage: 76, mapState: 'unmapped', label: ''} - UID: 6
GPUBuffer {size: 262140, usage: 72, mapState: 'unmapped', label: ''} - UID: 7
null - UID: 9
null - UID: 8
Hope that helps, and congrats on V8! 🚀
from pixijs.
this ones a little tricky to reproduce! is there a minimal example you could share pls?
in the mean time i did tweak how things are destroyed - but not 100% sure it will fix it as have been unable to repro.
thanks @levi
from pixijs.
@GoodBoyDigital I'll try your patch. Getting a sample repo together might take sometime on my end. Happy to screen share my project on discord if that is a helpful alternative path.
from pixijs.
Yes! this is super useful. hope you are well mate!
from pixijs.
I also get this issue.
I have a very minimalist Vue3 app that doesn't much but instanciate a World.ts class that then does everything with PIXI.
When my view is unmounted i destroy things this way (maybe not appropriate):
app.stage.removeAllListeners();
app.renderer.removeAllListeners();
app.destroy({removeView:true}, {children:true});
I also tried this much simpler way that fails the exact same way:
app.destroy();
As long as I don't add more children than the ones added during first render, I can hot reload with no issue.
But as soon as a new child is added anywhere, the destroy() call breaks with the following stack:
chunk-6KKKYF7S.js?v=7732f24d:410 Uncaught (in promise) TypeError: Cannot read properties of null (reading 'destroy')
at GpuBufferSystem._destroyBuffer (chunk-6KKKYF7S.js?v=7732f24d:410:15)
at chunk-6KKKYF7S.js?v=7732f24d:404:51
at Array.forEach (<anonymous>)
at GpuBufferSystem.destroy (chunk-6KKKYF7S.js?v=7732f24d:404:26)
at SystemRunner.emit (chunk-S3Q6LN3I.js?v=7732f24d:172:21)
at WebGPURenderer.destroy (chunk-S3Q6LN3I.js?v=7732f24d:461:26)
at _Application2.destroy (pixi__js.js?v=086abf1e:6472:19)
The "_destroyBuffer" method is the following on GpuBufferSystem
class;
_destroyBuffer(buffer) {
const gpuBuffer = this._gpuBuffers[buffer.uid];
gpuBuffer.destroy(); //<== it fails here
buffer.off("update", this.updateBuffer, this);
buffer.off("change", this.onBufferChange, this);
buffer.off("destroy", this.onBufferDestroy, this);
this._gpuBuffers[buffer.uid] = null;
}
tested with Pixi.js 8.0.5
from pixijs.
Seems fixed with 8.1.0 !
Thank you :)
from pixijs.
Related Issues (20)
- V8 Bug! HOT 2
- Bug: Pixi 7 errors: Argument of type '...' is not assignable to parameter of type 'DisplayObject' HOT 9
- Bug: Remove filter again (container.filters = null) throws error
- Bug: getLocalBounds doesn't return correct values after removing a child
- Bug: Pixi 8 - WebGL: INVALID_ENUM: activeTexture: texture unit out of range
- Bug: GL_INVALID_FRAMEBUFFER_OPERATION: Framebuffer is incomplete: Attachment has zero size HOT 1
- Feature request: Drag events
- Bug: Can't `await` `Application.init` from top level if bundled using vite HOT 2
- Feature Request: Is it possible to split a texture after exceeding the maximum texture size? HOT 1
- Bug: V8 graphics tint applied in a weird way HOT 3
- Bug: V8 MSDF text rendering quality
- Bug: npm run build: error TS2503: Cannot find namespace 'PixiMixins'
- Bug: Error: Unable to auto-detect a suitable renderer.
- Bug: too many active WebGL contexts on this page Safari HOT 1
- Bug: use round cap,blendmode not work
- Bug: CPU100% in OpenGL mode on a big map when computer does not have GPU even the graph is static HOT 2
- Bug: Error occurs when uninstalling a bitmap font with characters containing a space
- Bug: When Application is proxied by Vue 3(ref), an error occurs when rendering graphics
- Bug: about PIXI.Assets:imageResource can not loaded as canvasSource in ios v14.5,perhaps some old ios version
- Feature-Request: V8 support sub-Textures when creating BitmapFont objects HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pixijs.