<?xml version="1.0"?>
<rss version="2.0"><channel><title>Pixi.js Latest Topics</title><link>https://www.html5gamedevs.com/forum/15-pixijs/</link><description>Pixi.js Latest Topics</description><language>en</language><item><title><![CDATA[Assets cached via Spine.from() are not removed by Assets.unloadBundle() (Pixi.js v8.17.1 & @esotericsoftware/spine-pixi-v8 v4.2.107)]]></title><link>https://www.html5gamedevs.com/topic/73394-assets-cached-via-spinefrom-are-not-removed-by-assetsunloadbundle-pixijs-v8171-esotericsoftwarespine-pixi-v8-v42107/</link><description><![CDATA[<p>
	Hello,
</p>

<p>
	I'm running into some unexpected caching behavior with Spine in PixiJS.<br />
	Package versions:<br />
	"pixi.js": "8.17.1"<br />
	"@esotericsoftware/spine-pixi-v8": "4.2.107"
</p>

<p>
	Code example:
</p>

<pre style="background-color:#f8f8f8;border:1px solid #dddddd;font-size:12px;padding:8px 12px;">// STEP 1 — Load bundle

await Assets.loadBundle('preloader');

// Assets are now available
console.log([...Cache.keys()]); 
// = ['logoSkeleton', 'logoAtlas']

Assets.cache.has('logoSkeleton'); // = true
Assets.cache.has('logoAtlas');    // = true


// STEP 2 — Create first Spine instance
const spine = Spine.from({
  skeleton: 'logoSkeleton',
  atlas: 'logoAtlas'
});


// Cache AFTER creating Spine 
// record 'logoSkeleton-logoAtlas-1' added by Spine.from()
console.log([...Cache.keys()]); 
// = ['logoSkeleton', 'logoAtlas', 'logoSkeleton-logoAtlas-1']

Assets.cache.has('logoSkeleton') ;              // = true
Assets.cache.has('logoAtlas');                  // = true
Assets.cache.has('logoSkeleton-logoAtlas-1');   // = true


// STEP 3 — Unload bundle
await Assets.unloadBundle('preloader');


// Verify Assets cache is cleared
Assets.cache.has('logoSkeleton');               // = false
Assets.cache.has('logoAtlas');                  // = false
Assets.cache.has('logoSkeleton-logoAtlas-1');   // = true !!!


// Check Cache after unload
console.log([...Cache.keys()]); 
// = ['logoSkeleton-logoAtlas-1']
// ! Unload did not remove 'logoSkeleton-logoAtlas-1' from Cache


// STEP 4 — Create second Spine instance,
// still works because 'logoSkeleton-logoAtlas-1' is in Cache,
// even though original assets were unloaded
spine2 = Spine.from({
  skeleton: 'logoSkeleton',
  atlas: 'logoAtlas'
});</pre>

<p>
	Expected behavior:<br />
	Spine.from() should throw because assets were unloaded.
</p>

<p>
	I would expect that unloading a bundle remove all related assets =&gt; proper memory management.<br />
	I’ve confirmed that this works, but it doesn’t seem maintainable or flexible for future extensions:<br />
	<code style="background-color:#f8f8f8;border:1px solid #dddddd;font-size:12px;padding:2px 4px;">Cache.remove('logoSkeleton-logoAtlas-1');</code>
</p>

<p>
	Any guidance?
</p>
]]></description><guid isPermaLink="false">73394</guid><pubDate>Thu, 02 Apr 2026 14:28:20 +0000</pubDate></item><item><title><![CDATA[Spine.from() still works after Assets.unloadBundle — cached data not cleared (Pixi.js 8.17.1 & @esotericsoftware/spine-pixi-v8 4.2.107)]]></title><link>https://www.html5gamedevs.com/topic/73393-spinefrom-still-works-after-assetsunloadbundle-%E2%80%94-cached-data-not-cleared-pixijs-8171-esotericsoftwarespine-pixi-v8-42107/</link><description><![CDATA[<pre>Hello,
I'm running into some unexpected caching behavior with Spine in PixiJS v8.

<span>Package versions:</span>
<span>"pixi.js": "8.17.1"</span>
<span>"@esotericsoftware/spine-pixi-v8": "4.2.107"</span>

<span>Example:</span>
</pre>

<pre style="background-color:#f8f8f8;border:1px solid #dddddd;padding:8px 12px;font-family:Monaco, Menlo, Consolas, 'Courier New', monospace;font-size:12px;white-space:pre-wrap;margin:8px 0;">// STEP 1 — Load bundle

await Assets.loadBundle('preloader');

// Assets are now available
console.log([...Cache.keys()]); 
// = ['logoSkeleton', 'logoAtlas']

Assets.cache.has('logoSkeleton'); // = true
Assets.cache.has('logoAtlas');    // = true


// STEP 2 — Create first Spine instance
const spine = Spine.from({
  skeleton: 'logoSkeleton',
  atlas: 'logoAtlas'
});


// Cache AFTER creating Spine 
// record 'logoSkeleton-logoAtlas-1' added by Spine.from()
console.log([...Cache.keys()]); 
// = ['logoSkeleton', 'logoAtlas', 'logoSkeleton-logoAtlas-1']

Assets.cache.has('logoSkeleton') ;              // = true
Assets.cache.has('logoAtlas');                  // = true
Assets.cache.has('logoSkeleton-logoAtlas-1');   // = true


// STEP 3 — Unload bundle
await Assets.unloadBundle('preloader');


// Verify Assets cache is cleared
Assets.cache.has('logoSkeleton');               // = false
Assets.cache.has('logoAtlas');                  // = false
Assets.cache.has('logoSkeleton-logoAtlas-1');   // = true !!!


// Check Cache after unload
console.log([...Cache.keys()]); 
// = ['logoSkeleton-logoAtlas-1']
// ! Unload did not remove 'logoSkeleton-logoAtlas-1' from Cache


// STEP 4 — Create second Spine instance,
// still works because 'logoSkeleton-logoAtlas-1' is in Cache,
// even though original assets were unloaded
spine2 = Spine.from({
  skeleton: 'logoSkeleton',
  atlas: 'logoAtlas'
});</pre>

<p>
	I would expect that unloading a bundle remove all related assets.<br />
	Why is this not the case? Do I need to implement a workaround?<br />
	I’ve confirmed that this works, but it doesn’t seem maintainable or flexible for a larger codebase:
</p>

<pre style="background-color:#f8f8f8;border:1px solid #dddddd;padding:8px 12px;font-family:Monaco, Menlo, Consolas, 'Courier New', monospace;font-size:12px;white-space:pre-wrap;margin:8px 0;">Cache.remove('logoSkeleton-logoAtlas-1');</pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">73393</guid><pubDate>Thu, 02 Apr 2026 14:18:01 +0000</pubDate></item><item><title>PixiJS Warning:  [Assets] Asset id ./Assets/dragon-skeleton.atlas was not found in the Cache</title><link>https://www.html5gamedevs.com/topic/56178-pixijs-warning-assets-asset-id-assetsdragon-skeletonatlas-was-not-found-in-the-cache/</link><description><![CDATA[<p>
	This is my code copied from pixi/opengames.
</p>

<div style="background-color:#1f1f1f;color:#cccccc;font-size:14px;">
	<div>
		<span style="color:#569cd6;">private</span><span style="color:#cccccc;"> </span><span style="color:#9cdcfe;">spine</span><span style="color:#d4d4d4;">:</span><span style="color:#cccccc;"> </span><span style="color:#4ec9b0;">Spine</span><span style="color:#cccccc;">;</span>
	</div>

	<div>
		<span style="color:#cccccc;">    </span><span style="color:#6a9955;">/** Inner container for internal animations */</span>
	</div>

	<div>
		<span style="color:#cccccc;">    </span><span style="color:#569cd6;">private</span><span style="color:#cccccc;"> </span><span style="color:#9cdcfe;">container</span><span style="color:#d4d4d4;">:</span><span style="color:#cccccc;"> </span><span style="color:#4ec9b0;">Container</span><span style="color:#cccccc;">;</span>
	</div>
	 

	<div>
		<span style="color:#cccccc;">    </span><span style="color:#569cd6;">constructor</span><span style="color:#cccccc;">() {</span>
	</div>

	<div>
		<span style="color:#cccccc;">        </span><span style="color:#569cd6;">super</span><span style="color:#cccccc;">();</span>
	</div>
	 

	<div>
		<span style="color:#cccccc;">        </span><span style="color:#569cd6;">this</span><span style="color:#cccccc;">.</span><span style="color:#9cdcfe;">container</span><span style="color:#cccccc;"> </span><span style="color:#d4d4d4;">=</span><span style="color:#cccccc;"> </span><span style="color:#569cd6;">new</span><span style="color:#cccccc;"> </span><span style="color:#4ec9b0;">Container</span><span style="color:#cccccc;">();</span>
	</div>

	<div>
		<span style="color:#cccccc;">        </span><span style="color:#569cd6;">this</span><span style="color:#cccccc;">.</span><span style="color:#dcdcaa;">addChild</span><span style="color:#cccccc;">(</span><span style="color:#569cd6;">this</span><span style="color:#cccccc;">.</span><span style="color:#9cdcfe;">container</span><span style="color:#cccccc;">);</span>
	</div>
	 

	<div>
		<span style="color:#cccccc;">        </span><span style="color:#569cd6;">this</span><span style="color:#cccccc;">.</span><span style="color:#9cdcfe;">spine</span><span style="color:#cccccc;"> </span><span style="color:#d4d4d4;">=</span><span style="color:#cccccc;"> </span><span style="color:#4ec9b0;">Spine</span><span style="color:#cccccc;">.</span><span style="color:#dcdcaa;">from</span><span style="color:#cccccc;">({</span>
	</div>

	<div>
		<span style="color:#cccccc;">            </span><span style="color:#9cdcfe;">skeleton</span><span style="color:#9cdcfe;">:</span><span style="color:#cccccc;"> </span><span style="color:#ce9178;">'./Assets/dragon-skeleton.json'</span><span style="color:#cccccc;">,</span>
	</div>

	<div>
		<span style="color:#cccccc;">            </span><span style="color:#9cdcfe;">atlas</span><span style="color:#9cdcfe;">:</span><span style="color:#cccccc;"> </span><span style="color:#ce9178;">'./Assets/dragon-skeleton.atlas'</span><span style="color:#cccccc;">,</span>
	</div>
	 

	<div>
		<span style="color:#cccccc;">        });</span>
	</div>

	<div>
		<span style="color:#cccccc;">        </span><span style="color:#6a9955;">// this.spine.autoUpdate = true;</span>
	</div>

	<div>
		<span style="color:#cccccc;">        </span><span style="color:#569cd6;">this</span><span style="color:#cccccc;">.</span><span style="color:#9cdcfe;">spine</span><span style="color:#cccccc;">.</span><span style="color:#9cdcfe;">scale</span><span style="color:#cccccc;">.</span><span style="color:#dcdcaa;">set</span><span style="color:#cccccc;">(</span><span style="color:#b5cea8;">0.3</span><span style="color:#cccccc;">);</span>
	</div>

	<div>
		<span style="color:#cccccc;">        </span><span style="color:#569cd6;">this</span><span style="color:#cccccc;">.</span><span style="color:#9cdcfe;">spine</span><span style="color:#cccccc;">.</span><span style="color:#9cdcfe;">x</span><span style="color:#cccccc;"> </span><span style="color:#d4d4d4;">=</span><span style="color:#cccccc;"> </span><span style="color:#d4d4d4;">-</span><span style="color:#b5cea8;">30</span><span style="color:#cccccc;">;</span>
	</div>

	<div>
		<span style="color:#cccccc;">        </span><span style="color:#569cd6;">this</span><span style="color:#cccccc;">.</span><span style="color:#9cdcfe;">spine</span><span style="color:#cccccc;">.</span><span style="color:#9cdcfe;">y</span><span style="color:#cccccc;"> </span><span style="color:#d4d4d4;">=</span><span style="color:#cccccc;"> </span><span style="color:#b5cea8;">130</span><span style="color:#cccccc;">;</span>
	</div>

	<div>
		<span style="color:#cccccc;">        </span><span style="color:#569cd6;">this</span><span style="color:#cccccc;">.</span><span style="color:#9cdcfe;">container</span><span style="color:#cccccc;">.</span><span style="color:#dcdcaa;">addChild</span><span style="color:#cccccc;">(</span><span style="color:#569cd6;">this</span><span style="color:#cccccc;">.</span><span style="color:#9cdcfe;">spine</span><span style="color:#cccccc;">);</span>
	</div>

	<div>
		<span style="color:#cccccc;">        </span><span style="color:#569cd6;">this</span><span style="color:#cccccc;">.</span><span style="color:#dcdcaa;">playIdle</span><span style="color:#cccccc;">();</span>
	</div>

	<div>
		<span style="color:#cccccc;">    }</span>
	</div>
</div>

<p>
	and this one happened.<br />
	Asset id ./Assets/dragon-skeleton.atlas was not found in the Cache.<br />
	Cannot read properties of undefined (reading 'skeleton').
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="26552" href="https://www.html5gamedevs.com/uploads/monthly_2024_06/image.png.159fa1103326c2abc0171f81686121b9.png" rel=""><img alt="image.thumb.png.44a640c67480b6fa7c31f5e487569a40.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26552" data-ratio="20.00" width="1000" src="https://www.html5gamedevs.com/uploads/monthly_2024_06/image.thumb.png.44a640c67480b6fa7c31f5e487569a40.png" /></a><br />
	I got a pixijs v8.1.15<br />
	Is there any help for me?
</p>
]]></description><guid isPermaLink="false">56178</guid><pubDate>Mon, 03 Jun 2024 12:31:18 +0000</pubDate></item><item><title>RenderTexture performance issues</title><link>https://www.html5gamedevs.com/topic/55606-rendertexture-performance-issues/</link><description><![CDATA[<p>
	Hi there, I'm working on creating a casino slot game which has a lot of reels. The reels themselves are very heavy so I'm using a renderTexture for each reel to optimize. It helps a lot, but up to a point - when the renderTextures are more than 25ish fps goes from ~55 to ~25. I've only seen discussions that include culling as a method for optimizing but thats not an option for me as all renderTextures are visible at all times, so there's nothing to cull. The textures themselves are not too small, but it's the smallest they can be - exactly the size of the thing they are rendering.
</p>

<p>
	Issues occur on an Iphone13 so I can't imagine what would happen on a lower-end device.
</p>

<p>
	<br />
	Here's how I'm using it:<br />
	The reel is passed as a source and a renderTexture is created from it, the reel itself is then not rendered anymore.
</p>

<p>
	 
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted"><span class="kwd">const</span><span class="pln"> createRt </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">source</span><span class="pun">,</span><span class="pln"> width </span><span class="pun">=</span><span class="pln"> source</span><span class="pun">.</span><span class="pln">width</span><span class="pun">,</span><span class="pln"> height </span><span class="pun">=</span><span class="pln"> source</span><span class="pun">.</span><span class="pln">height</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">const</span><span class="pln"> texture </span><span class="pun">=</span><span class="pln"> </span><span class="typ">RenderTexture</span><span class="pun">.</span><span class="pln">create</span><span class="pun">({</span><span class="pln"> width</span><span class="pun">,</span><span class="pln"> height </span><span class="pun">});</span><span class="pln">

  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">RENDERER</span><span class="pun">.</span><span class="pln">mask</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    RENDERER</span><span class="pun">.</span><span class="pln">mask</span><span class="pun">.</span><span class="pln">enableScissor </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">const</span><span class="pln"> updater </span><span class="pun">=</span><span class="pln"> </span><span class="pun">()</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> RENDERER</span><span class="pun">.</span><span class="pln">render</span><span class="pun">(</span><span class="pln">source</span><span class="pun">,</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> renderTexture</span><span class="pun">:</span><span class="pln"> texture </span><span class="pun">});</span><span class="pln">

  </span><span class="typ">CombinedTicker</span><span class="pun">.</span><span class="typ">Ticker</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="pln">updater</span><span class="pun">);</span><span class="pln">

  </span><span class="kwd">const</span><span class="pln"> sprite </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Sprite</span><span class="pun">(</span><span class="pln">texture</span><span class="pun">);</span><span class="pln">

  </span><span class="kwd">return</span><span class="pln"> sprite</span><span class="pun">;</span><span class="pln">
</span><span class="pun">};</span></pre>
]]></description><guid isPermaLink="false">55606</guid><pubDate>Fri, 23 Feb 2024 09:04:01 +0000</pubDate></item><item><title>possible to tell pixi to render children which are not in Container.children array?</title><link>https://www.html5gamedevs.com/topic/43637-possible-to-tell-pixi-to-render-children-which-are-not-in-containerchildren-array/</link><description><![CDATA[<p>
	Is it possible to tell pixi to render children which are not in Container.children array? They are in separate  Content.array  Thanks!
</p>]]></description><guid isPermaLink="false">43637</guid><pubDate>Thu, 29 Aug 2019 08:28:01 +0000</pubDate></item><item><title>PIXI Sound Filters</title><link>https://www.html5gamedevs.com/topic/47719-pixi-sound-filters/</link><description><![CDATA[<p>
	Does anyone have some example code on how to implement PIXI sound filters? Tried parsing the code on the example page but it's pretty obtuse.
</p>]]></description><guid isPermaLink="false">47719</guid><pubDate>Tue, 07 Sep 2021 01:30:20 +0000</pubDate></item><item><title>Dynamic naming of graphics and inspecting the canvas</title><link>https://www.html5gamedevs.com/topic/46123-dynamic-naming-of-graphics-and-inspecting-the-canvas/</link><description><![CDATA[<p>
	I believe I have used name = to assign a dynamic name to each of my icons. However I am unsure and wanted to inspect the DOM but I couldn’t see a way to do this. I found a chrome browser extension but I don’t really want to have to install chrome. Is there no way to inspect the pixi canvas built in?
</p>]]></description><guid isPermaLink="false">46123</guid><pubDate>Thu, 03 Sep 2020 17:42:46 +0000</pubDate></item><item><title>Text and resolution</title><link>https://www.html5gamedevs.com/topic/46418-text-and-resolution/</link><description><![CDATA[
<p>
	Hi everyboby,
</p>

<p>
	I have a surely a trivial question for some of you, but What is the good rule to have always  crispy texts in pixi.js.
</p>

<p>
	Something like ?
</p>

<p>
	 this.text = new PIXI.Text(this.model.text, this.model.style);
</p>

<p>
	this.text.resolution = <span style="background-color:#ffffff;color:#666666;font-size:13px;text-align:left;">window.devicePixelRatio</span>;
</p>
]]></description><guid isPermaLink="false">46418</guid><pubDate>Fri, 30 Oct 2020 08:12:13 +0000</pubDate></item><item><title>Portrait and landscape design switch</title><link>https://www.html5gamedevs.com/topic/50205-portrait-and-landscape-design-switch/</link><description><![CDATA[<p>
	So I'm trying to provide a portrait and landscape design for my game.
</p>

<p>
	Currently I'm able to resizing the canvas keeping 16:9 aspect ratio for landscape and 9:16 for portrait, everything works fine in landscape because I firstly designed it this way. But when i rotate to portrait everything's off screen.<br />
	To fix this I think I should provide a resize method for every component and call them all together on resize event.
</p>

<p>
	Does anybody know if there is a better way to achieve this?<br />
	I really found few topics talking about this so I think it could be interesting for everyone.
</p>
]]></description><guid isPermaLink="false">50205</guid><pubDate>Wed, 30 Nov 2022 11:04:49 +0000</pubDate></item><item><title>pixi 7 global pointer up/down events?</title><link>https://www.html5gamedevs.com/topic/54762-pixi-7-global-pointer-updown-events/</link><description><![CDATA[<p>
	Hey, how would I get a pointer up or down event anywhere on the stage?<br />
	I was able to do it with the interaction manager by using the default interaction on the render,<br />
	ie:<br />
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">renderer.plugins.interaction.on('pointerdown'</span></pre>

<p>
	However there doesn't seem to be anything similar for the event system.
</p>
]]></description><guid isPermaLink="false">54762</guid><pubDate>Mon, 01 Jan 2024 08:16:49 +0000</pubDate></item><item><title>PIXI game as mobile app these days</title><link>https://www.html5gamedevs.com/topic/47083-pixi-game-as-mobile-app-these-days/</link><description><![CDATA[
<p>
	Hello, everyone. <br /><br /><strong>We want to make a game for mobile native app on pixi.</strong>
</p>

<p>
	Everything on internet is so old.<strong> What is the modern way to build pixi for native ?</strong><br /><br />
	Before years there was cocoonjs for games against cordova and phonegap. As I see cocoonjs is abandoned.<br /><br /><strong>We want to make very simple, non-physics game </strong>at early. So <strong>we don't need phaser </strong>or some game engines. <strong>Just pure PIXI</strong>.<br /><br />
	As details <strong>we prefer</strong> <strong>PIXI v.5 and typescript</strong>.
</p>
]]></description><guid isPermaLink="false">47083</guid><pubDate>Sat, 27 Mar 2021 10:44:54 +0000</pubDate></item><item><title>Internet Explorer support - July 2020</title><link>https://www.html5gamedevs.com/topic/45879-internet-explorer-support-july-2020/</link><description><![CDATA[
<p>
	Does any still bother with IE?
</p>

<p>
	Using Pixi v5 and have it setup so that it detects support for WebGL and displays a 'browser not supported' message when not supported.  It should work fine on IE but for some other reason my project doesn't work and it doesn't even display an error in the console.  Really don't want to debug and figure out what's not working, so I'm tempted to just reject any IE browser. 
</p>

<p>
	Does anyone else do this?
</p>

<p>
	Looking at the stats, IE 11 is 1.5% of my visitors.
</p>

<p>
	Also, if you don't bother with IE 11, do you go full ES6?
</p>
]]></description><guid isPermaLink="false">45879</guid><pubDate>Sat, 25 Jul 2020 01:09:07 +0000</pubDate></item><item><title>How to change background color?</title><link>https://www.html5gamedevs.com/topic/52181-how-to-change-background-color/</link><description><![CDATA[<p>
	I can only set background during initialization like this: new Application({ background: 0x000000 }).
</p>

<p>
	I can't figure out how to dynamically update the background color after that.
</p>

<p>
	renderer.backgroundColor property seems to be deprecated in v7.
</p>
]]></description><guid isPermaLink="false">52181</guid><pubDate>Fri, 10 Mar 2023 09:51:19 +0000</pubDate></item><item><title>Technologies stack to run pixi on tvOS</title><link>https://www.html5gamedevs.com/topic/58526-technologies-stack-to-run-pixi-on-tvos/</link><description><![CDATA[<p>
	Hello! I thought about making a game for Apple's tvOS. And i did some research, but wanted to ask other people about what they think about this topic.
</p>

<p>
	To start, I understand that Unity currently is the best choice for anyone who want to develop games for tvOS. But I've got some codebase in JS and I wanted to continue using it.
</p>

<p>
	Then, I found that react native allows to develop for tvOS. But in this case I would need to use Skia as a rendering backend. Recently they added WebGPU support to react native, with Google's Dawn as backend (<a href="https://github.com/wcandillon/react-native-webgpu" rel="external nofollow">https://github.com/wcandillon/react-native-webgpu</a>), but Dawn says that it doesn't support tvOS yet.
</p>

<p>
	If Dawn supported tvOS, that would be amazing, because (if I understood it correctly) it would allow me to use pixi.js v8 on tv without even changing any codebase (because it supports WebGPU; Three.js supports it too and it can run on Dawn without code changes).
</p>

<p>
	So until Dawn support for tvOS is available, what can I use instead? Is it true that I can use Skia, get it's rendering context and give it to pixi (not WebGPU, but WebGL or canvas, idk)? What do you think about the performance - would it be super slow or OK for some game with 20 spines on screen and +-200 sprites? Are there any alternative ways to develop with pixi for tvOS? How do you think - would it be hard and worth it to dig into Dawn's source code and implement tvOS support for them?
</p>

<p>
	Thanks in advance for any of your thoughts.<br />
	Yurii.
</p>
]]></description><guid isPermaLink="false">58526</guid><pubDate>Fri, 31 Oct 2025 09:38:47 +0000</pubDate></item><item><title>Blurry text in Pixi.js</title><link>https://www.html5gamedevs.com/topic/26880-blurry-text-in-pixijs/</link><description><![CDATA[
<p>
	First of all I would like to say that I've read all topics and issues on github, related to this problem and it didn't help me. I've checked PIXI.RESOLUTION, antialiasing, different fonts (google web fonts, system fonts), colors, etc and anyway I am still getting blurry text. And when I apply a little scaling to canvas It gets even worse.
</p>

<p>
	Examples how it looks without scaling and with scaling I attached.
</p>

<p>
	Would like to hear any advice on subject.
</p>

<p>
	Thanks in advance!
</p>

<p>
	 
</p>

<p>
	 
</p>

<p><a href="https://www.html5gamedevs.com/uploads/monthly_2016_12/withoutscale.png.5e17d3af942067f5caacba99a5a3534a.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="10589" src="https://www.html5gamedevs.com/uploads/monthly_2016_12/withoutscale.png.5e17d3af942067f5caacba99a5a3534a.png" class="ipsImage ipsImage_thumbnailed" alt="withoutscale.png"></a></p>
<p><a href="https://www.html5gamedevs.com/uploads/monthly_2016_12/withscale.png.731aa32138e01946fa7971ddd75f8833.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="10590" src="https://www.html5gamedevs.com/uploads/monthly_2016_12/withscale.png.731aa32138e01946fa7971ddd75f8833.png" class="ipsImage ipsImage_thumbnailed" alt="withscale.png"></a></p>]]></description><guid isPermaLink="false">26880</guid><pubDate>Wed, 07 Dec 2016 16:22:47 +0000</pubDate></item><item><title>Blurry sprite image depending on device resolution?</title><link>https://www.html5gamedevs.com/topic/50707-blurry-sprite-image-depending-on-device-resolution/</link><description><![CDATA[<p>
	Hiya, I have a resolution problem and I'm trying to understand what's going on. Basically I have a simple Pixi app that renders an image as a sprite (on a grey canvas). But I find the quality of that image changes drastically depending on what screen resolution the app is viewed on. I understand the basics of resolution, scaling, pixels etc but can't wrap my head around the issue or the proper fix.
</p>

<p>
	When viewed on a 4k screen, the image renders nicely and the text is clear (see picture 1), but when I view the canvas on a 1080p screen, it gets blurry and aliased (see picture 2). It will also blur of I set the scale of the 4k screen high (like 200%) in windows.
</p>

<p>
	I am using pixi-viewport to zoom in and out, so these comparisons were taken with the image at a similar zoom level.
</p>

<p>
	I am rendering the sprite at a fixed width and height of 1191x842 (basically a3 aspect ratio). It is also the res of the core image file. This is still high enough to be clear when viewed on the 1080p screen with a normal photo viewer.
</p>

<p>
	I have tried playing with the canvas resolution, setting it more or less than window.devicePixelRatio, changing the size of the sprite to higher and lower, changing the size of the canvas itself, but nothing seems to fix the blur on lower res screens reliably.
</p>

<p>
	Should also mention that when I zoom in, the blur/aliasing goes away, and the text clears up. It's only when zoomed out that it appears.
</p>

<p>
	Any help is appreciated, I feel like there is a gap in my understanding of how resolution/scale is handled with Pixi.<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="25771" href="https://www.html5gamedevs.com/uploads/monthly_2022_12/1.png.2c5124d6589b48a996c5339518c7382a.png" rel=""><img alt="1.thumb.png.33026fa056d2ae0f0b8aabfe34bb1527.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25771" data-ratio="53.40" width="1000" src="https://www.html5gamedevs.com/uploads/monthly_2022_12/1.thumb.png.33026fa056d2ae0f0b8aabfe34bb1527.png" /></a><a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="25772" href="https://www.html5gamedevs.com/uploads/monthly_2022_12/2.png.ce17435198765e26dd72b22aeb4ed91b.png" rel=""><img alt="2.thumb.png.89cd434a4c6e0631e28d959910c8d6e2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25772" data-ratio="51.80" width="1000" src="https://www.html5gamedevs.com/uploads/monthly_2022_12/2.thumb.png.89cd434a4c6e0631e28d959910c8d6e2.png" /></a>
</p>
]]></description><guid isPermaLink="false">50707</guid><pubDate>Thu, 15 Dec 2022 16:38:57 +0000</pubDate></item><item><title>Graphics rectangle filter shader conversion from v7 to v8 not working</title><link>https://www.html5gamedevs.com/topic/58006-graphics-rectangle-filter-shader-conversion-from-v7-to-v8-not-working/</link><description><![CDATA[<p>
	I recently upgrade my shader code from pixi v7 to pixi v8 and after some issues with shader not compiling I manged to get it where there are no errors thrown. But I don't see it working either. My code should create a black screen with alpha 0.8 and somewhere on that rect I should see a cut out circle with faded edges:<br />
	<a class="ipsAttachLink ipsAttachLink_image" href="https://www.html5gamedevs.com/uploads/monthly_2025_05/447042738-cc2ecf7c-0ead-4c47-b598-30899c64a64a.png.ef1d11f4342c6cf8ed2ce04938fe4fa4.png" data-fileid="26991" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="26991" data-ratio="65.50" width="1000" alt="447042738-cc2ecf7c-0ead-4c47-b598-30899c64a64a.thumb.png.73dbc9019d17dc4f1993e12307882cc5.png" src="https://www.html5gamedevs.com/uploads/monthly_2025_05/447042738-cc2ecf7c-0ead-4c47-b598-30899c64a64a.thumb.png.73dbc9019d17dc4f1993e12307882cc5.png" /></a>
</p>

<p>
	But instead I don't get anything, not even an error. But I see my uniforms filled in correctly (I think):
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://www.html5gamedevs.com/uploads/monthly_2025_05/447043059-00854168-7d77-4584-a10b-26cee798a644.png.92cc7cebc3716d670446398f19ace28f.png" data-fileid="26992" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="26992" data-ratio="68.20" width="1000" alt="447043059-00854168-7d77-4584-a10b-26cee798a644.thumb.png.73289f907487b69277f585d6bf431f8c.png" src="https://www.html5gamedevs.com/uploads/monthly_2025_05/447043059-00854168-7d77-4584-a10b-26cee798a644.thumb.png.73289f907487b69277f585d6bf431f8c.png" /></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://www.html5gamedevs.com/uploads/monthly_2025_05/447043178-d654f220-9f0e-4479-a5d6-c841200e308e.png.65f061546a6c83f3472e4ae4f544bd41.png" data-fileid="26993" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="26993" data-ratio="43.60" width="1000" alt="447043178-d654f220-9f0e-4479-a5d6-c841200e308e.thumb.png.0436f6dd95ed6ca4961eb1c81683abc2.png" src="https://www.html5gamedevs.com/uploads/monthly_2025_05/447043178-d654f220-9f0e-4479-a5d6-c841200e308e.thumb.png.0436f6dd95ed6ca4961eb1c81683abc2.png" /></a>
</p>

<p>
	 
</p>

<p>
	v7 code:<br />
	<a class="ipsAttachLink" data-fileid="26994" href="https://www.html5gamedevs.com/applications/core/interface/file/attachment.php?id=26994&amp;key=377321285bee47d12ab6ef3a07daa410" data-fileext="txt" rel="">tutorialShaderFrag.txt</a>
</p>

<p>
	<a class="ipsAttachLink" data-fileid="26995" href="https://www.html5gamedevs.com/applications/core/interface/file/attachment.php?id=26995&amp;key=bb4727ff842f3b73baf8709bde264ac8" data-fileext="txt" rel="">shaders.ts.txt</a>
</p>

<p>
	In my view I do following (uses pixi default vertex shader):
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted"><span class="kwd">private</span><span class="pln"> filterShader</span><span class="pun">:</span><span class="pln"> </span><span class="typ">TutorialFilter</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">TutorialFilter</span><span class="pun">();</span><span class="pln">

</span><span class="com">//... Apply</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">backgroundGraphic </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Pixi</span><span class="pun">.</span><span class="typ">Graphics</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">backgroundGraphic</span><span class="pun">.</span><span class="pln">pivot</span><span class="pun">.</span><span class="kwd">set</span><span class="pun">(</span><span class="lit">0.5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.5</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">backgroundGraphic</span><span class="pun">.</span><span class="pln">beginFill</span><span class="pun">(</span><span class="lit">0xffffff</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">backgroundGraphic</span><span class="pun">.</span><span class="pln">drawRect</span><span class="pun">(-</span><span class="lit">2000</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">2000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5000</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">backgroundGraphic</span><span class="pun">.</span><span class="pln">endFill</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">backgroundGraphic</span><span class="pun">.</span><span class="pln">filters </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">filterShader</span><span class="pun">];</span><span class="pln">

</span><span class="com">// ... Update</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">filterShader</span><span class="pun">.</span><span class="pln">uniforms</span><span class="pun">.</span><span class="pln">uResolution </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">appResolution</span><span class="pun">.</span><span class="pln">w</span><span class="pun">,</span><span class="pln"> appResolution</span><span class="pun">.</span><span class="pln">h</span><span class="pun">];</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> rNormalized </span><span class="pun">=</span><span class="pln"> transform</span><span class="pun">.</span><span class="pln">r </span><span class="pun">/</span><span class="pln"> actualGameResolution</span><span class="pun">.</span><span class="pln">w</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">filterShader</span><span class="pun">.</span><span class="pln">uniforms</span><span class="pun">.</span><span class="pln">uCirclePosition </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">xNormalized</span><span class="pun">,</span><span class="pln"> yNormalized</span><span class="pun">];</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">filterShader</span><span class="pun">.</span><span class="pln">uniforms</span><span class="pun">.</span><span class="pln">uCircleRadius </span><span class="pun">=</span><span class="pln"> rNormalized</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">filterShader</span><span class="pun">.</span><span class="pln">uniforms</span><span class="pun">.</span><span class="pln">uSquashFactorY </span><span class="pun">=</span><span class="pln"> transform</span><span class="pun">.</span><span class="pln">sy</span><span class="pun">;</span></pre>

<p>
	 
</p>

<p>
	v8 code:
</p>

<p>
	<a class="ipsAttachLink" data-fileid="26996" href="https://www.html5gamedevs.com/applications/core/interface/file/attachment.php?id=26996&amp;key=8f14732ab11b321bbc81869893c5f3ff" data-fileext="txt" rel="">shaders.mts.txt</a>
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted"><span class="kwd">private</span><span class="pln"> filterShader</span><span class="pun">:</span><span class="pln"> </span><span class="typ">TutorialFilter</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">TutorialFilter</span><span class="pun">();</span><span class="pln">

</span><span class="com">//... Apply</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">backgroundGraphic </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Pixi</span><span class="pun">.</span><span class="typ">Graphics</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">backgroundGraphic</span><span class="pun">.</span><span class="pln">rect</span><span class="pun">(-</span><span class="lit">2000</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">2000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5000</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">backgroundGraphic</span><span class="pun">.</span><span class="pln">fill</span><span class="pun">({</span><span class="pln"> color</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0xffffff</span><span class="pln"> </span><span class="pun">});</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">backgroundGraphic</span><span class="pun">.</span><span class="pln">filters </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">filterShader</span><span class="pun">];</span><span class="pln">

</span><span class="com">// ... Update</span><span class="pln">
</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">filterShader</span><span class="pun">?.</span><span class="pln">update</span><span class="pun">({</span><span class="pln">
    resolution</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Float32Array</span><span class="pun">([</span><span class="pln">appResolution</span><span class="pun">.</span><span class="pln">w</span><span class="pun">,</span><span class="pln"> appResolution</span><span class="pun">.</span><span class="pln">h</span><span class="pun">]),</span><span class="pln">
    circlePosition</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Float32Array</span><span class="pun">([</span><span class="pln">xNormalized</span><span class="pun">,</span><span class="pln"> yNormalized</span><span class="pun">]),</span><span class="pln">
    circleRadius</span><span class="pun">:</span><span class="pln"> rNormalized</span><span class="pun">,</span><span class="pln">
    squashFactorY</span><span class="pun">:</span><span class="pln"> transform</span><span class="pun">.</span><span class="pln">sy </span><span class="pun">??</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">,</span><span class="pln">
    alpha</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.8</span><span class="pun">,</span><span class="pln">
</span><span class="pun">});</span></pre>

<p>
	<br />
	We also upgraded the project to ESM, but I don't think that is the issue. WebGL only, no WebGPU (yet).<br />
	The pixi version we use at the moment is v8.7.2.
</p>

<p>
	I don't have a clue what I might have missed.
</p>

<p>
	Thanks in advance!
</p>
]]></description><guid isPermaLink="false">58006</guid><pubDate>Mon, 26 May 2025 07:03:32 +0000</pubDate></item><item><title>GraphicsContext doesn't have much of a performance difference compared to drawing a bunch of new Graphics. What am I doing wrong here?</title><link>https://www.html5gamedevs.com/topic/57902-graphicscontext-doesnt-have-much-of-a-performance-difference-compared-to-drawing-a-bunch-of-new-graphics-what-am-i-doing-wrong-here/</link><description><![CDATA[<p>
	I am doing some performance testing at rendering lots of multicolored circles.
</p>

<p>
	I have three approaches:<br />
	1. Instance many unique graphics contexts
</p>

<p>
	2. Instance many graphics objects sharing 1 of 4 GraphicsContexts
</p>

<p>
	3. Use a sprite with 1 of 4 different textures
</p>

<p>
	<strong>Results</strong>
</p>

<table border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;" width="289">
	<tbody>
		<tr>
			<td colspan="2" height="20" width="289">
				<strong>Many new unique Graphics objects</strong>
			</td>
		</tr>
		<tr>
			<td height="19">
				fps
			</td>
			<td align="right">
				15
			</td>
		</tr>
		<tr>
			<td height="19">
				GPU memory (mb)
			</td>
			<td align="right">
				8.1
			</td>
		</tr>
		<tr>
			<td height="19">
				Load time (ms)
			</td>
			<td align="right">
				70
			</td>
		</tr>
		<tr>
			<td colspan="2" height="20">
				<strong>4 randomly selected GraphicsContext</strong>
			</td>
		</tr>
		<tr>
			<td height="19">
				fps
			</td>
			<td align="right">
				15
			</td>
		</tr>
		<tr>
			<td height="19">
				GPU memory (mb)
			</td>
			<td align="right">
				8.1
			</td>
		</tr>
		<tr>
			<td height="19">
				Load time (ms)
			</td>
			<td align="right">
				23.56
			</td>
		</tr>
		<tr>
			<td colspan="2" height="20">
				<strong>Using sprites with 4 shared textures</strong>
			</td>
		</tr>
		<tr>
			<td height="19">
				fps
			</td>
			<td align="right">
				39
			</td>
		</tr>
		<tr>
			<td height="19">
				GPU memory (mb)
			</td>
			<td align="right">
				8.1
			</td>
		</tr>
		<tr>
			<td height="19">
				Load time (ms)
			</td>
			<td align="right">
				101
			</td>
		</tr>
	</tbody>
</table>

<p>
	 
</p>

<p>
	The takeaway: <em>sprites are way more performant</em>.
</p>

<p>
	The second takeaway: there is no point to use GraphicsContext asides from load time. This must be wrong though? I feel like it can't be right based off the pixi documentation. Maybe I am doing something wrong in my testing code.
</p>

<p>
	 
</p>

<p>
	Test code:
</p>

<p>
	<strong>Many new unique Graphics objects</strong>
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted"><span class="kwd">function</span><span class="pln"> createCirclesWithTint</span><span class="pun">(</span><span class="pln">app</span><span class="pun">:</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Application</span><span class="pun">,</span><span class="pln"> count</span><span class="pun">:</span><span class="pln"> number</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    console</span><span class="pun">.</span><span class="pln">time</span><span class="pun">(</span><span class="str">'New Tint Approach'</span><span class="pun">);</span><span class="pln">

    </span><span class="kwd">const</span><span class="pln"> circleContext </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">GraphicsContext</span><span class="pun">()</span><span class="pln">
        </span><span class="pun">.</span><span class="pln">circle</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">10</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">.</span><span class="pln">fill</span><span class="pun">(</span><span class="lit">0xFFFFFF</span><span class="pun">);</span><span class="pln">

    </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">let</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> count</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="com">// Generate random color</span><span class="pln">
        </span><span class="kwd">const</span><span class="pln"> color </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">()</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0xFFFFFF</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">const</span><span class="pln"> circle </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Graphics</span><span class="pun">(</span><span class="pln">circleContext</span><span class="pun">);</span><span class="pln">
        circle</span><span class="pun">.</span><span class="pln">tint </span><span class="pun">=</span><span class="pln"> color</span><span class="pun">;</span><span class="pln">
        </span><span class="com">// Position randomly</span><span class="pln">
        circle</span><span class="pun">.</span><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">()</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> app</span><span class="pun">.</span><span class="pln">screen</span><span class="pun">.</span><span class="pln">width</span><span class="pun">;</span><span class="pln">
        circle</span><span class="pun">.</span><span class="pln">y </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">()</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> app</span><span class="pun">.</span><span class="pln">screen</span><span class="pun">.</span><span class="pln">height</span><span class="pun">;</span><span class="pln">

        app</span><span class="pun">.</span><span class="pln">stage</span><span class="pun">.</span><span class="pln">addChild</span><span class="pun">(</span><span class="pln">circle</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    console</span><span class="pun">.</span><span class="pln">timeEnd</span><span class="pun">(</span><span class="str">'New Tint Approach'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<strong>Shared Graphics Contexts</strong>
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted"><span class="kwd">function</span><span class="pln"> createCirclesFromPalette</span><span class="pun">(</span><span class="pln">app</span><span class="pun">:</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Application</span><span class="pun">,</span><span class="pln"> count</span><span class="pun">:</span><span class="pln"> number</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    console</span><span class="pun">.</span><span class="pln">time</span><span class="pun">(</span><span class="str">'New Palette Approach'</span><span class="pun">);</span><span class="pln">

    </span><span class="kwd">const</span><span class="pln"> paletteContext1 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">GraphicsContext</span><span class="pun">()</span><span class="pln">
        </span><span class="pun">.</span><span class="pln">circle</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">10</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">.</span><span class="pln">fill</span><span class="pun">(</span><span class="lit">0xFFFFFF</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">());</span><span class="pln">

    </span><span class="kwd">const</span><span class="pln"> paletteContext2 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">GraphicsContext</span><span class="pun">()</span><span class="pln">
        </span><span class="pun">.</span><span class="pln">circle</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">10</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">.</span><span class="pln">fill</span><span class="pun">(</span><span class="lit">0xFFFFFF</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">());</span><span class="pln">
    </span><span class="kwd">const</span><span class="pln"> paletteContext3 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">GraphicsContext</span><span class="pun">()</span><span class="pln">
        </span><span class="pun">.</span><span class="pln">circle</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">10</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">.</span><span class="pln">fill</span><span class="pun">(</span><span class="lit">0xFFFFFF</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">());</span><span class="pln">
    </span><span class="kwd">const</span><span class="pln"> paletteContext4 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">GraphicsContext</span><span class="pun">()</span><span class="pln">
        </span><span class="pun">.</span><span class="pln">circle</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">10</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">.</span><span class="pln">fill</span><span class="pun">(</span><span class="lit">0xFFFFFF</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">());</span><span class="pln">

    </span><span class="kwd">const</span><span class="pln"> choices </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">paletteContext1</span><span class="pun">,</span><span class="pln"> paletteContext2</span><span class="pun">,</span><span class="pln"> paletteContext3</span><span class="pun">,</span><span class="pln"> paletteContext4</span><span class="pun">]</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">let</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> count</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">const</span><span class="pln"> circle </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Graphics</span><span class="pun">(</span><span class="pln">choices</span><span class="pun">[</span><span class="typ">Math</span><span class="pun">.</span><span class="pln">floor</span><span class="pun">(</span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">()*</span><span class="pln">choices</span><span class="pun">.</span><span class="pln">length</span><span class="pun">)]);</span><span class="pln">
        </span><span class="com">// Position randomly</span><span class="pln">
        circle</span><span class="pun">.</span><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">()</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> app</span><span class="pun">.</span><span class="pln">screen</span><span class="pun">.</span><span class="pln">width</span><span class="pun">;</span><span class="pln">
        circle</span><span class="pun">.</span><span class="pln">y </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">()</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> app</span><span class="pun">.</span><span class="pln">screen</span><span class="pun">.</span><span class="pln">height</span><span class="pun">;</span><span class="pln">
        app</span><span class="pun">.</span><span class="pln">stage</span><span class="pun">.</span><span class="pln">addChild</span><span class="pun">(</span><span class="pln">circle</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    console</span><span class="pun">.</span><span class="pln">timeEnd</span><span class="pun">(</span><span class="str">'New Palette Approach'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<strong>Sprite Approach</strong>
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted"><span class="kwd">async</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> createSprites</span><span class="pun">(</span><span class="pln">app</span><span class="pun">:</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Application</span><span class="pun">,</span><span class="pln"> count</span><span class="pun">:</span><span class="pln"> number</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    console</span><span class="pun">.</span><span class="pln">time</span><span class="pun">(</span><span class="str">'New Sprite Approach'</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">const</span><span class="pln"> tex1 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">await</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Assets</span><span class="pun">.</span><span class="pln">load</span><span class="pun">(</span><span class="typ">ImgSrc1</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">const</span><span class="pln"> tex2 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">await</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Assets</span><span class="pun">.</span><span class="pln">load</span><span class="pun">(</span><span class="typ">ImgSrc2</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">const</span><span class="pln"> tex3 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">await</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Assets</span><span class="pun">.</span><span class="pln">load</span><span class="pun">(</span><span class="typ">ImgSrc3</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">const</span><span class="pln"> tex4 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">await</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Assets</span><span class="pun">.</span><span class="pln">load</span><span class="pun">(</span><span class="typ">ImgSrc4</span><span class="pun">);</span><span class="pln">

    </span><span class="kwd">const</span><span class="pln"> choices </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">tex1</span><span class="pun">,</span><span class="pln"> tex2</span><span class="pun">,</span><span class="pln"> tex3</span><span class="pun">,</span><span class="pln"> tex4</span><span class="pun">]</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">let</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> count</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">const</span><span class="pln"> sprite </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Sprite</span><span class="pun">(</span><span class="pln">choices</span><span class="pun">[</span><span class="typ">Math</span><span class="pun">.</span><span class="pln">floor</span><span class="pun">(</span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">()*</span><span class="pln">choices</span><span class="pun">.</span><span class="pln">length</span><span class="pun">)]);</span><span class="pln">
        sprite</span><span class="pun">.</span><span class="pln">anchor</span><span class="pun">.</span><span class="kwd">set</span><span class="pun">(</span><span class="lit">0.5</span><span class="pun">)</span><span class="pln">
        </span><span class="com">// Position randomly</span><span class="pln">
        sprite</span><span class="pun">.</span><span class="pln">x </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">()</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> app</span><span class="pun">.</span><span class="pln">screen</span><span class="pun">.</span><span class="pln">width</span><span class="pun">;</span><span class="pln">
        sprite</span><span class="pun">.</span><span class="pln">y </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">random</span><span class="pun">()</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> app</span><span class="pun">.</span><span class="pln">screen</span><span class="pun">.</span><span class="pln">height</span><span class="pun">;</span><span class="pln">
        app</span><span class="pun">.</span><span class="pln">stage</span><span class="pun">.</span><span class="pln">addChild</span><span class="pun">(</span><span class="pln">sprite</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    console</span><span class="pun">.</span><span class="pln">timeEnd</span><span class="pun">(</span><span class="str">'New Sprite Approach'</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">57902</guid><pubDate>Fri, 02 May 2025 16:10:03 +0000</pubDate></item><item><title>Help understanding creating / rendering textures</title><link>https://www.html5gamedevs.com/topic/57853-help-understanding-creating-rendering-textures/</link><description><![CDATA[<p>
	Hi
</p>

<p>
	I am porting a game from C to JavaScript and usng pixiJS as the renderer.<br />
	<br />
	In the original C game there is a part in the code where a random number from 0 to 3 is generated, there is a texture that is 256 x 64 (4x1 of 64px tiles)and depending on the random number either the first, second, third or fourth tile is copied into the container.<br />
	<br />
	I have been through the docs on renderTexture but I am finding it hard to understand how to do the part where I take only a single tile (a rectangle) from the source image and render it onto the renderTexture, is it possible?<br />
	<br />
	many thanks for any help
</p>

<p>
	 
</p>

<p>
	James
</p>
]]></description><guid isPermaLink="false">57853</guid><pubDate>Fri, 25 Apr 2025 18:18:24 +0000</pubDate></item><item><title><![CDATA[Spine object has no width and height (Pixi.js: 8.3.4 & Spine-Pixi-v8: 4.2.74)]]></title><link>https://www.html5gamedevs.com/topic/57613-spine-object-has-no-width-and-height-pixijs-834-spine-pixi-v8-4274/</link><description><![CDATA[<p>
	Hello developers!<br />
	I am making my own slot game, and tying to add spine animation but facing this problem last few days.<br />
	My Spine animation has 0 width and 0 height.<br />
	<br />
	Spine files are imported, I can see them in network tab.<br />
	I have called animation by  name, and animation is visible via Chrome PIXIJS inspector.<br />
	No errors in VS Code and  console, but also there is no dimensions...<br />
	<br />
	<strong>My Spine files (.json, .atlas, .png) are from 2018/19 </strong>- a bit older, not sure if that can cause problem.<br />
	<br />
	These two versions of libraries are used:<br />
	    "@esotericsoftware/spine-pixi-v8": "^4.2.74",<br />
	    "pixi.js": "^8.3.4"<br />
	<br />
	I am sending 3 screenshots and my code.<br />
	<br />
	Any help is appreciated! <span><img alt=":)" data-emoticon="" height="20" src="https://www.html5gamedevs.com/uploads/emoticons/default_smile.png" srcset="https://www.html5gamedevs.com/uploads/emoticons/smile@2x.png 2x" title=":)" width="20" /></span><br />
	<br />
	 
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted"><span class="kwd">async</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> animateSpineBoy</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  PIXI</span><span class="pun">.</span><span class="typ">Assets</span><span class="pun">.</span><span class="pln">add</span><span class="pun">({</span><span class="pln">
    alias</span><span class="pun">:</span><span class="pln"> </span><span class="str">"spineboyData"</span><span class="pun">,</span><span class="pln">
    src</span><span class="pun">:</span><span class="pln"> </span><span class="str">"/assets/spine/spineboy-pro.json"</span><span class="pun">,</span><span class="pln">
  </span><span class="pun">});</span><span class="pln">
  PIXI</span><span class="pun">.</span><span class="typ">Assets</span><span class="pun">.</span><span class="pln">add</span><span class="pun">({</span><span class="pln">
    alias</span><span class="pun">:</span><span class="pln"> </span><span class="str">"spineboyAtlas"</span><span class="pun">,</span><span class="pln">
    src</span><span class="pun">:</span><span class="pln"> </span><span class="str">"/assets/spine/spineboy-pro.atlas"</span><span class="pun">,</span><span class="pln">
  </span><span class="pun">});</span><span class="pln">
  </span><span class="kwd">await</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Assets</span><span class="pun">.</span><span class="pln">load</span><span class="pun">([</span><span class="str">"spineboyData"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"spineboyAtlas"</span><span class="pun">]);</span><span class="pln">

  </span><span class="kwd">const</span><span class="pln"> spineboy </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Spine</span><span class="pun">.</span><span class="pln">from</span><span class="pun">({</span><span class="pln">
    atlas</span><span class="pun">:</span><span class="pln"> </span><span class="str">"spineboyAtlas"</span><span class="pun">,</span><span class="pln">
    skeleton</span><span class="pun">:</span><span class="pln"> </span><span class="str">"spineboyData"</span><span class="pun">,</span><span class="pln">
    scale</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
  </span><span class="pun">});</span><span class="pln">

  spineboy</span><span class="pun">.</span><span class="pln">label </span><span class="pun">=</span><span class="pln"> </span><span class="str">"spineboy"</span><span class="pun">;</span><span class="pln">
  spineboy</span><span class="pun">.</span><span class="pln">state</span><span class="pun">.</span><span class="pln">data</span><span class="pun">.</span><span class="pln">defaultMix </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">;</span><span class="pln">

  spineboy</span><span class="pun">.</span><span class="pln">state</span><span class="pun">.</span><span class="pln">setAnimation</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"walk"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span><span class="pln">

  window</span><span class="pun">.</span><span class="pln">__MAIN_CONTAINER__</span><span class="pun">.</span><span class="pln">addChild</span><span class="pun">(</span><span class="pln">spineboy</span><span class="pun">);</span><span class="pln">

  spineboy</span><span class="pun">.</span><span class="pln">x </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">innerWidth </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> spineboy</span><span class="pun">.</span><span class="pln">width </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  spineboy</span><span class="pun">.</span><span class="pln">y </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">innerHeight </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> spineboy</span><span class="pun">.</span><span class="pln">height </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  spineboy</span><span class="pun">.</span><span class="pln">width </span><span class="pun">=</span><span class="pln"> </span><span class="lit">400</span><span class="pun">;</span><span class="pln">
  spineboy</span><span class="pun">.</span><span class="pln">height </span><span class="pun">=</span><span class="pln"> </span><span class="lit">600</span><span class="pun">;</span><span class="pln">

  console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="str">"size:"</span><span class="pun">,</span><span class="pln"> spineboy</span><span class="pun">.</span><span class="pln">getSize</span><span class="pun">());</span><span class="pln"> </span><span class="com">// returns size: {width: 0, height: 0}</span><span class="pln">
  console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="str">"spineboy: "</span><span class="pun">,</span><span class="pln"> spineboy</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	 
</p>

<p><a href="https://www.html5gamedevs.com/uploads/monthly_2025_02/Screenshot_6.jpg.4c9424b647293766535f152614a4b6b7.jpg" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="26892" src="https://www.html5gamedevs.com/uploads/monthly_2025_02/Screenshot_6.jpg.4c9424b647293766535f152614a4b6b7.jpg" data-ratio="81.11" width="778" class="ipsImage ipsImage_thumbnailed" alt="Screenshot_6.jpg"></a></p>
<p><a href="https://www.html5gamedevs.com/uploads/monthly_2025_02/Screenshot_5.jpg.43cb779f80f66d2b03a0434dcac910a9.jpg" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="26891" src="https://www.html5gamedevs.com/uploads/monthly_2025_02/Screenshot_5.thumb.jpg.4bd81e181dac669766a25d5edf82c6ed.jpg" data-ratio="165.56" width="453" class="ipsImage ipsImage_thumbnailed" alt="Screenshot_5.jpg"></a></p>
<p><a href="https://www.html5gamedevs.com/uploads/monthly_2025_02/Screenshot_7.jpg.756295cb806480d2311f6025cdedd063.jpg" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="26893" src="https://www.html5gamedevs.com/uploads/monthly_2025_02/Screenshot_7.thumb.jpg.e77d2d3da5d0127c2a8afcabf4f2075d.jpg" data-ratio="116.82" width="642" class="ipsImage ipsImage_thumbnailed" alt="Screenshot_7.jpg"></a></p>]]></description><guid isPermaLink="false">57613</guid><pubDate>Tue, 25 Feb 2025 08:41:35 +0000</pubDate></item><item><title>Graphics / Polygon / containsPoint</title><link>https://www.html5gamedevs.com/topic/57673-graphics-polygon-containspoint/</link><description><![CDATA[<p>
	Hello everyone!
</p>

<p>
	 
</p>

<p>
	My question is about "containsPoint" in PIXI v8, I developed a drag'n'drop module for my game. I use graphics and containsPoint to map my mouse coordinates to a polygon, ellipse, etc.
</p>

<p>
	 
</p>

<p>
	In pixi v7.x.x everything works very well, a couple of days ago I started porting my engine to v8, all the features work fine too. But when I started testing my DnD I saw a strange behavior, maybe it's a new behavior in v8 and it's part of optimization. When moving the graphic to a different position, the movement is not registered for containsPoint.
</p>

<p>
	 
</p>

<p>
	To understand what I'm talking about, below are some examples:
</p>

<p>
	<a href="https://jsfiddle.net/Yarchick1034/vw5h7sfr/126/" rel="external nofollow">https://jsfiddle.net/Yarchick1034/vw5h7sfr/126/</a>
</p>

<p>
	<a href="https://jsfiddle.net/Yarchick1034/c6v4ym2f/40/" rel="external nofollow">https://jsfiddle.net/Yarchick1034/c6v4ym2f/40/</a>
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">57673</guid><pubDate>Sat, 15 Mar 2025 20:40:37 +0000</pubDate></item><item><title>IE11 Error: Temporarily switching to software rendering</title><link>https://www.html5gamedevs.com/topic/45082-ie11-error-temporarily-switching-to-software-rendering/</link><description><![CDATA[
<p>
	Hi Everyone!
</p>

<p>
	Does anyone know of a solution to this WebGL error on IE11?
</p>

<p>
	"WEBGL11257: WebGL content is taking too long to render on your GPU. Temporarily switching to software rendering."
</p>

<p>
	Should I be using the canvas renderer for IE11?
</p>
]]></description><guid isPermaLink="false">45082</guid><pubDate>Fri, 03 Apr 2020 15:14:23 +0000</pubDate></item><item><title>Detect when browser use software rendering to display  WebGL content</title><link>https://www.html5gamedevs.com/topic/12975-detect-when-browser-use-software-rendering-to-display-webgl-content/</link><description><![CDATA[
<p>Hi I'm newbie with Pixi.js but already love it <img src="https://www.html5gamedevs.com/uploads/emoticons/default_smile.png" alt=":)" srcset="https://www.html5gamedevs.com/uploads/emoticons/smile@2x.png 2x" width="20" height="20">.</p><p> </p><p>Maybe it will sounds strange but some modern browsers on old machines tries to render a WebGL content with CPU instead of using the GPU acceleration and obviously the perfomance is poor (happen on old Chrome 36 and IE11)</p><p> </p><p>I'm asking for a method to check if the above is true and to switch the renderer into Canvas.</p><p> </p><p>And one more question - Is there a way to run somekind of a simple "stress" test to detect poor WebGL performance?</p><p> </p><p>Any help would be greatly appreciated.</p><p> </p><p> </p><p><span style="font-size:10px;">p.s. sorry for my bad English</span></p>
]]></description><guid isPermaLink="false">12975</guid><pubDate>Sat, 07 Mar 2015 12:54:06 +0000</pubDate></item><item><title>Rendering spine with pixi-spine</title><link>https://www.html5gamedevs.com/topic/57651-rendering-spine-with-pixi-spine/</link><description><![CDATA[<p>
	Hello, I'm new to pixijs and spine. I'm trying to render a spine animation version 4.0.17. I first look up spine-runtimes and I don't see spine-pixi for version 4.0.x, so I look for pixi-spine, but there is almost no documentations about this library (<a href="https://github.com/pixijs-userland/spine/tree/master/examples" rel="external nofollow">pixi-spine examples on github</a>). According to <a href="https://www.html5gamedevs.com/topic/38032-spine-documentation-for-pixijs/" rel="">this forum question</a>, pixi-spine works the same as spine-pixi by esoteric software, so I tried to follow <a href="https://esotericsoftware.com/spine-applying-animations#AnimationState-API" rel="external nofollow">esotericsoftware docs</a>, but things didn't go the way I expected. I'm trying to get the below code going to work, but the result is only 1 frame of the spine being displayed when I call the render function. I've attach the skel and atlas file, please help me. I'm using pixijs v6.5.10 and pixi-spine v4.0. When I set the animation, it still run, but I have a strong reason to render it frame by frame.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="dec">&lt;!DOCTYPE html&gt;</span><span class="pln">
</span><span class="tag">&lt;html</span><span class="pln"> </span><span class="atn">lang</span><span class="pun">=</span><span class="atv">"en"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;head&gt;</span><span class="pln">
    </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">charset</span><span class="pun">=</span><span class="atv">"UTF-8"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"viewport"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"width=device-width, initial-scale=1.0"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;title&gt;</span><span class="pln">Spine Animation</span><span class="tag">&lt;/title&gt;</span><span class="pln">
    </span><span class="tag">&lt;script</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"https://cdnjs.cloudflare.com/ajax/libs/pixi.js/6.5.10/browser/pixi.js"</span><span class="tag">&gt;&lt;/script&gt;</span><span class="pln">
    </span><span class="tag">&lt;script</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"https://cdn.jsdelivr.net/npm/pixi-spine@4.0.4/dist/pixi-spine.umd.js"</span><span class="tag">&gt;&lt;/script&gt;</span><span class="pln">
    </span><span class="tag">&lt;style&gt;</span><span class="pln">
      body </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">overflow</span><span class="pun">:</span><span class="pln"> hidden</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">rgb</span><span class="pun">(</span><span class="lit">76.5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">76.5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">76.5</span><span class="pun">);</span><span class="pln">
        </span><span class="kwd">height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100vh</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100vw</span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
      canvas </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100%</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100%</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">display</span><span class="pun">:</span><span class="pln"> block</span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
    </span><span class="tag">&lt;/style&gt;</span><span class="pln">
  </span><span class="tag">&lt;/head&gt;</span><span class="pln">a
  </span><span class="tag">&lt;body</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"container"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;canvas</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"canvas"</span><span class="tag">&gt;&lt;/canvas&gt;</span><span class="pln">
      </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> </span><span class="lit">#fff</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">position</span><span class="pun">:</span><span class="pln"> fixed</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100%</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">justify-content</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">
          </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"status"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
          &amp;nbsp;
          </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"animation"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
          &amp;nbsp;
          </span><span class="tag">&lt;span&gt;</span><span class="pln">Render: </span><span class="tag">&lt;/span&gt;&lt;button</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"render"</span><span class="tag">&gt;</span><span class="pln">Render next frame</span><span class="tag">&lt;/button&gt;</span><span class="pln">
      </span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;script&gt;</span><span class="pln">
      </span><span class="kwd">var</span><span class="pln"> spineAnimation</span><span class="pun">;</span><span class="pln">
      </span><span class="kwd">var</span><span class="pln"> lastFrameTime</span><span class="pun">;</span><span class="pln">
      </span><span class="kwd">var</span><span class="pln"> canvas </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(</span><span class="str">"canvas"</span><span class="pun">);</span><span class="pln">
      
      </span><span class="kwd">var</span><span class="pln"> gl </span><span class="pun">=</span><span class="pln"> canvas</span><span class="pun">.</span><span class="pln">getContext</span><span class="pun">(</span><span class="str">"webgl"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> canvas</span><span class="pun">.</span><span class="pln">getContext</span><span class="pun">(</span><span class="str">"experimental-webgl"</span><span class="pun">);</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">gl</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            alert</span><span class="pun">(</span><span class="str">'WebGL is unavailable.'</span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">

      </span><span class="kwd">var</span><span class="pln"> renderButton </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(</span><span class="str">'render'</span><span class="pun">);</span><span class="pln">
      renderButton</span><span class="pun">.</span><span class="pln">addEventListener</span><span class="pun">(</span><span class="str">'click'</span><span class="pun">,</span><span class="pln"> render</span><span class="pun">);</span><span class="pln">

      </span><span class="kwd">const</span><span class="pln"> pixiapp </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="typ">Application</span><span class="pun">({</span><span class="pln">
        width</span><span class="pun">:</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">innerWidth</span><span class="pun">,</span><span class="pln">
        height</span><span class="pun">:</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">innerHeight</span><span class="pun">,</span><span class="pln">
        transparent</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln">
        backgroundAlpha</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
        view</span><span class="pun">:</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(</span><span class="str">"canvas"</span><span class="pun">),</span><span class="pln">
        resizeTo</span><span class="pun">:</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(</span><span class="str">"container"</span><span class="pun">)</span><span class="pln">
      </span><span class="pun">});</span><span class="pln">

      document</span><span class="pun">.</span><span class="pln">body</span><span class="pun">.</span><span class="pln">appendChild</span><span class="pun">(</span><span class="pln">pixiapp</span><span class="pun">.</span><span class="pln">view</span><span class="pun">);</span><span class="pln">

      pixiapp</span><span class="pun">.</span><span class="pln">loader
        </span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="str">"spine"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"./spines/Eff_UI_SumeruBirthFloatToyLoading_Spine01.skel"</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">.</span><span class="pln">load</span><span class="pun">((</span><span class="pln">loader</span><span class="pun">,</span><span class="pln"> resources</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
          </span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(</span><span class="str">"status"</span><span class="pun">).</span><span class="pln">textContent </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Spine created, loading animation..."</span><span class="pun">;</span><span class="pln">
            spineAnimation </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> PIXI</span><span class="pun">.</span><span class="pln">spine</span><span class="pun">.</span><span class="typ">Spine</span><span class="pun">(</span><span class="pln">resources</span><span class="pun">.</span><span class="pln">spine</span><span class="pun">.</span><span class="pln">spineData</span><span class="pun">);</span><span class="pln">
            </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">spineAnimation</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
              spineAnimation</span><span class="pun">.</span><span class="pln">scale</span><span class="pun">.</span><span class="kwd">set</span><span class="pun">(</span><span class="pln">
                </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">min</span><span class="pun">(</span><span class="pln">
                  window</span><span class="pun">.</span><span class="pln">innerWidth </span><span class="pun">/</span><span class="pln"> spineAnimation</span><span class="pun">.</span><span class="pln">spineData</span><span class="pun">.</span><span class="pln">width</span><span class="pun">,</span><span class="pln">
                  window</span><span class="pun">.</span><span class="pln">innerHeight </span><span class="pun">/</span><span class="pln"> spineAnimation</span><span class="pun">.</span><span class="pln">spineData</span><span class="pun">.</span><span class="pln">height
                </span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.8</span><span class="pln">
              </span><span class="pun">);</span><span class="pln">
              spineAnimation</span><span class="pun">.</span><span class="pln">x </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">innerWidth </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
              spineAnimation</span><span class="pun">.</span><span class="pln">y </span><span class="pun">=</span><span class="pln">
                pixiapp</span><span class="pun">.</span><span class="pln">screen</span><span class="pun">.</span><span class="pln">height </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> spineAnimation</span><span class="pun">.</span><span class="pln">height </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
              pixiapp</span><span class="pun">.</span><span class="pln">stage</span><span class="pun">.</span><span class="pln">addChild</span><span class="pun">(</span><span class="pln">spineAnimation</span><span class="pun">);</span><span class="pln">

              spineAnimation</span><span class="pun">.</span><span class="pln">skeleton</span><span class="pun">.</span><span class="pln">setToSetupPose</span><span class="pun">();</span><span class="pln">
              lastFrameTime </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Date</span><span class="pun">.</span><span class="pln">now</span><span class="pun">()</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">1000</span><span class="pun">;</span><span class="pln">
              spineAnimation</span><span class="pun">.</span><span class="pln">state</span><span class="pun">.</span><span class="pln">setAnimation</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="str">"In"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span><span class="pln">

              window</span><span class="pun">.</span><span class="pln">addEventListener</span><span class="pun">(</span><span class="str">"resize"</span><span class="pun">,</span><span class="pln"> </span><span class="pun">()</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                spineAnimation</span><span class="pun">.</span><span class="pln">scale</span><span class="pun">.</span><span class="kwd">set</span><span class="pun">(</span><span class="pln">
                  </span><span class="typ">Math</span><span class="pun">.</span><span class="pln">min</span><span class="pun">(</span><span class="pln">
                    window</span><span class="pun">.</span><span class="pln">innerWidth </span><span class="pun">/</span><span class="pln"> spineAnimation</span><span class="pun">.</span><span class="pln">spineData</span><span class="pun">.</span><span class="pln">width</span><span class="pun">,</span><span class="pln">
                    window</span><span class="pun">.</span><span class="pln">innerHeight </span><span class="pun">/</span><span class="pln"> spineAnimation</span><span class="pun">.</span><span class="pln">spineData</span><span class="pun">.</span><span class="pln">height
                  </span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.8</span><span class="pln">
                </span><span class="pun">);</span><span class="pln">
                spineAnimation</span><span class="pun">.</span><span class="pln">x </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">innerWidth </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
                spineAnimation</span><span class="pun">.</span><span class="pln">y </span><span class="pun">=</span><span class="pln">
                  pixiapp</span><span class="pun">.</span><span class="pln">screen</span><span class="pun">.</span><span class="pln">height </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> spineAnimation</span><span class="pun">.</span><span class="pln">height </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
              </span><span class="pun">});</span><span class="pln">
              document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(</span><span class="str">"status"</span><span class="pun">).</span><span class="pln">textContent </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Animation loaded"</span><span class="pun">;</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
            
            requestAnimationFrame</span><span class="pun">(</span><span class="pln">render</span><span class="pun">);</span><span class="pln">
          </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="pln">error</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            console</span><span class="pun">.</span><span class="pln">error</span><span class="pun">(</span><span class="str">"Spine creation error: "</span><span class="pun">,</span><span class="pln"> error</span><span class="pun">);</span><span class="pln">
          </span><span class="pun">}</span><span class="pln">
        </span><span class="pun">});</span><span class="pln">

      </span><span class="kwd">function</span><span class="pln"> render</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">var</span><span class="pln"> state </span><span class="pun">=</span><span class="pln"> spineAnimation</span><span class="pun">.</span><span class="pln">state</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">var</span><span class="pln"> skeleton </span><span class="pun">=</span><span class="pln"> spineAnimation</span><span class="pun">.</span><span class="pln">skeleton</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">var</span><span class="pln"> animationDuration </span><span class="pun">=</span><span class="pln"> spineAnimation</span><span class="pun">.</span><span class="pln">spineData</span><span class="pun">.</span><span class="pln">animations</span><span class="pun">.</span><span class="pln">find</span><span class="pun">(</span><span class="pln">animation </span><span class="pun">=&gt;</span><span class="pln"> animation</span><span class="pun">.</span><span class="pln">name </span><span class="pun">===</span><span class="pln"> </span><span class="str">"In"</span><span class="pun">).</span><span class="pln">duration</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">var</span><span class="pln"> now </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Date</span><span class="pun">.</span><span class="pln">now</span><span class="pun">()</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">1000</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">var</span><span class="pln"> delta </span><span class="pun">=</span><span class="pln"> now </span><span class="pun">-</span><span class="pln"> lastFrameTime</span><span class="pun">;</span><span class="pln">
        lastFrameTime </span><span class="pun">=</span><span class="pln"> now</span><span class="pun">;</span><span class="pln">
        document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(</span><span class="str">"animation"</span><span class="pun">).</span><span class="pln">textContent </span><span class="pun">=</span><span class="pln"> </span><span class="pun">`</span><span class="pln">now</span><span class="pun">:</span><span class="pln"> $</span><span class="pun">{</span><span class="pln">now</span><span class="pun">}</span><span class="pln"> delta</span><span class="pun">:</span><span class="pln"> $</span><span class="pun">{</span><span class="pln">delta</span><span class="pun">}</span><span class="pln"> anim</span><span class="pun">:</span><span class="pln"> $</span><span class="pun">{</span><span class="pln">animationDuration</span><span class="pun">}`;</span><span class="pln">
        state</span><span class="pun">.</span><span class="pln">update</span><span class="pun">(</span><span class="pln">delta</span><span class="pun">);</span><span class="pln">
        state</span><span class="pun">.</span><span class="pln">apply</span><span class="pun">(</span><span class="pln">skeleton</span><span class="pun">);</span><span class="pln">
        </span><span class="com">// requestAnimationFrame(render);</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
    </span><span class="tag">&lt;/script&gt;</span><span class="pln">
  </span><span class="tag">&lt;/body&gt;</span><span class="pln">
</span><span class="tag">&lt;/html&gt;</span></pre>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink" data-fileext="skel" data-fileid="26904" href="https://www.html5gamedevs.com/applications/core/interface/file/attachment.php?id=26904&amp;key=00b975c9648a96a005c1854786975f8f" rel="">Eff_UI_SumeruBirthFloatToyLoading_Spine01.skel</a> <a class="ipsAttachLink" data-fileext="atlas" data-fileid="26905" href="https://www.html5gamedevs.com/applications/core/interface/file/attachment.php?id=26905&amp;key=1a3ee312ab74ccc8476e176f18919c9f" rel="">Eff_UI_SumeruBirthFloatToyLoading_Spine01.atlas</a>
</p>

<p>
	<a href="https://streamable.com/wdnbzt" rel="external nofollow">https://streamable.com/wdnbzt</a>
</p>

<p>
	Above is a video of how it behave. Any help is appreciated!
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="26906" href="https://www.html5gamedevs.com/uploads/monthly_2025_03/Eff_UI_SumeruBirthFloatToyLoading_Spine01.png.9fff8754bc0e8b633ae1fbc45a1519a6.png" rel=""><img alt="Eff_UI_SumeruBirthFloatToyLoading_Spine01.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26906" data-ratio="50" width="1000" src="https://www.html5gamedevs.com/uploads/monthly_2025_03/Eff_UI_SumeruBirthFloatToyLoading_Spine01.thumb.png.beb06224229cdf2df00fe7a17c8a4c76.png" /></a>
</p>
]]></description><guid isPermaLink="false">57651</guid><pubDate>Sat, 08 Mar 2025 01:13:55 +0000</pubDate></item><item><title>Bezier curve culling</title><link>https://www.html5gamedevs.com/topic/57475-bezier-curve-culling/</link><description><![CDATA[<p>
	In my Pixi application I'm rendering (among other things) a lot of graphics that draw bezier curves. I want to implement culling for these but it's a bit tricky because they're paths and not "well bounded" graphics (like e.g, rects) which have easy-to-reason-about bounds. For example, imagine the following scenario:
</p>

<p>
	     |========|<br />
	     |                   |<br />
	---|------------|---------&gt;<br />
	     |                   |<br />
	     |========|
</p>

<p>
	<br />
	where the box represents the viewable area, and as you can see there's a long line/path that starts from a point outside the visible area and also ends outside it (drawn here as a straight line for ease of demonstration, but it's a actually a bezier curve). So, while the start and end are not visible, the "center" portion of the path is.
</p>

<p>
	The main problem I have is that there are a relatively large number of these paths, which are adding a performance overhead because they're rendered all the time, even when they are completely off-view. I could implement a naive culling technique based on the control points of the bezier curve, but that could also clip paths like in the example given, where a "portion" of them <strong>is</strong> actually visible.
</p>

<p>
	Is there any way to make such an optimization?
</p>

<p>
	I'm also happy to listen to alternative approaches to the problem of the performance load, in case this is not (easily) possible; because I could be going about this problem in a wrong direction. Thanks in advance<br />
	 
</p>
]]></description><guid isPermaLink="false">57475</guid><pubDate>Wed, 12 Feb 2025 22:43:59 +0000</pubDate></item></channel></rss>
