Ashley's Recent Forum Activity

  • The blog post The surprising difficulty of resizing images on spritesheet covers this in detail. In short, change the 'Downscaling quality' project property to 'High'.

  • Maybe soon - the WebGPU renderer is nearly complete so I think it can be turned on for experimental usage soon, but you'll need to change browser flags too at first.

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • OK, thanks for the explanation. I think I better understand the usage, and I can see how there could be overhead from the batch updates.

    As ever though we're extremely busy and we get literally hundreds of other feature requests, so we have to be ruthless about prioritisation. I'm very reluctant to do lots of complicated work for one specific case. So I would suggest to start by getting it working with the features available, even if it's slow. Then (if it really is to slow) you can build some benchmarks demonstrating this in a measurable way, and then any improvements can also be measured. (Having been bitten by this before, I'm also very reluctant to do anything pre-emptive for performance; there has to be a way to measure it or you're probably wasting time.) After all, it's not 2012 any more - maybe things are OK even with a lot of changing uniforms, or some of the more simple use cases can already be covered, or when looking at a real benchmark there's other low hanging fruit that can easily improve the situation.

  • I think we're splitting hairs over the name "experimental features". It doesn't matter what it's called, the point is in the context of developer flags, there are default settings, and there are non-default settings. You should expect everything to work with default settings. You should not expect everything to work with non-default settings because it might be unfinished or deprecated.

    If something is broken with default settings and changing to a non-default setting fixes it, it's strong evidence of a problem with Apple's code, and so Apple would need to fix that. The setting in question would be a useful piece of evidence to mention in a bug report to them.

  • On quads vs. triangles, I'm sceptical that it's worth making any changes. Construct's pipeline has been fine-tuned for extreme performance with quads. Just today I tested the M1 Pro and found it can render 750k quads on-screen at 30 FPS. A quad is just two connected triangles, so that means 1.5 million triangles. On top of that, as best as I can tell from the evidence, this is bottlenecked on the memory bandwidth of iterating the JavaScript objects Construct uses to represent objects in the layout. So a single object issuing lots of quads would probably score significantly higher still. I've previously tried to optimise the way quads are issued, and it's made zero difference to the benchmark - presumably because the bottleneck is memory bandwidth iterating JS objects. So I think issuing a degenerate quad is fine: the performance penalty of sending a single extra vertex appears to be dwarfed by the other overheads.

    Further if there is some other triangles mode, it will actually mean breaking the batch to change rendering parameters, since the default rendering mode can only render quads as it's been so heavily optimised for it. So even if we went and did it, I think there is a chance it would actually be slower than sticking with degenerate quads, as the overhead of changing modes could outweigh the overhead of sending a single extra vertex.

    It's also possible to render pairs of connected triangles as quads, avoiding wasting a vertex. Our own engine does that for rendering mesh distortion. Our own engine also issues degenerate quads in a couple of corner cases where it just wants a single triangle. So I don't think there's any case for changing this, especially given the high level of complexity it would probably involve - in Construct, just go with degenerate quads. If you find some benchmark that proves it's unreasonably slow, let me know, and we can take it from there, but I think it's a good bet to say that won't happen.

    On two color tinting, this is a more complicated problem and could involve more performance overhead. However I still want to understand a bit more about exactly how it's used, as it significantly affects the potential solutions. Construct has a special fast-path for simple color-only affects like "Adjust HSL" - those can just be rendered normally with (more or less) another shader program selected. The shader parameters matter though and can affect the batch. However if you do something like set one set of parameters and then render 1000 triangles, it will be fine: it can still batch everything, as it can see the parameters aren't changing. However if you do something like change the parameters per-triangle, then there will be batch thrashing and things like adding an extra vertex attribute could come in to play. So my question is, how do people really use this? Do you need per-triangle colors? Do lots of people really make use of per-triangle colors so this really is something that will affect a lot of cases? The answers to these questions could mean the difference between it basically working fine as-is, to a very complicated overhaul of the entire renderer - something I'm very reluctant to do. So those answers are important.

    FWIW I've been nearing completion of our WebGPU renderer, and it works significantly differently to the WebGL renderer internally, but it still efficiently implements the same interface you get with IWebGLRenderer. This means both that trying to customise the renderer for things like extra vertex attributes is much more complicated, as there are two renderers that work significantly differently to support, and also that there is opportunity to make things much faster in the WebGPU renderer specifically.

  • I just tried the 'Microphone input' example and it works fine for me.

  • The default settings by definition aren't experimental, they're the way it works by default. Everything should work with the default settings, but if you change experimental features to something other than the defaults, it could break things. In that case it's probably not a bug and you just turned on something unfinished, hence the off-by-default experimental setting.

    If turning on an experimental feature actually fixes something, it's good evidence it's a bug in Apple's code with the default settings, and so that would need to be reported to and fixed by Apple.

  • I filed an issue with Apple about poor performance in some cases. It looks like they're working on fixing it.

    That issue still rendered everything correctly (if slowly), and had nothing to do with sound. So any visible rendering glitches or sound issues will be unrelated. And as ever, it's generally impossible to investigate without a bug report following all the guidelines, as we need all that information to be able to look in to it. If things previously worked on iOS 14 it's most likely iOS bugs that Apple need to fix though, so you might want to cut out the middleman and report issues directly to Apple if your apps have new issues in iOS 15.

  • WebGL is now required. It should not be an issue, as WebGL is supported virtually everywhere now.

  • In Construct 3 you should only use WebM Opus (.webm) files. It's the only format guaranteed to work on all platforms.

  • In Construct SVG cannot have unlimited scale as it runs in to maximum texture size limit. Rasterizing SVG is also much slower than rasterizing bitmap images, although it does not have to be done constantly (only when scaling up). For low-color images like the ones in your screenshots, PNG should have very good compression. Construct's SVG Picture also does not support animations, collision polygons, and other Sprite features. So I would say just use Sprites with PNGs.

  • Changing this would also break all existing projects that rely on the current behavior. So it's tricky to change.

Ashley's avatar

Ashley

Early Adopter

Member since 21 May, 2007

Twitter
Ashley has 1,432,137 followers

Connect with Ashley

Trophy Case

  • Jupiter Mission Supports Gordon's mission to Jupiter
  • Forum Contributor Made 100 posts in the forums
  • Forum Patron Made 500 posts in the forums
  • Forum Hero Made 1,000 posts in the forums
  • Forum Wizard Made 5,000 posts in the forums
  • Forum Unicorn Made 10,000 posts in the forums
  • Forum Mega Brain Made 20,000 posts in the forums
  • x108
    Coach One of your tutorials has over 1,000 readers
  • x62
    Educator One of your tutorials has over 10,000 readers
  • x3
    Teacher One of your tutorials has over 100,000 readers
  • Sensei One of your tutorials has over 1,000,000 readers
  • Regular Visitor Visited Construct.net 7 days in a row
  • Steady Visitor Visited Construct.net 30 days in a row
  • RTFM Read the fabulous manual
  • x36
    Great Comment One of your comments gets 3 upvotes
  • Email Verified

Progress

32/44
How to earn trophies

Blogs