A new technology that didn’t cut it to the game due to delays in buffer creation and recreation which defeats its very own purpose of reducing rendering latency. Khronos Group should optimize Framebuffer creation at the very least.

[Update 10/10/2013: Source code updated for Xcode4 and various bugs fixed].

Basically it’s a dynamic system that upscales/downscales resolution depending on the latency of the rendering.  The system not only does resolution upscale and downscale, but also turning effects on/off ( shader quality, texturing hints, pixel shaders etc. ). It samples the latency at a set time interval (every  x seconds for example). After a pre-set limit of number of samples have been taken, it averages and makes the decision to upscale o downscale.


  • Maintains almost constant framerate!
  • Removes need to tweak performance for each platform


  • Transition between resolutions isn’t smooth (need to recreate buffer…)

Simplified Algorithm:

  • 1. Sample latency.
  • 2. If lower then threshold
    • 2.1 Lower Resolution/Effects
  • 3. else
    • 3.1 Increase Resolution/Effects

Video of Example in a project:

Poez Inc. Adaptive Resolution Tech. from Poez Inc. on Vimeo.


At 70% of the original resolution:

At 50% of the original resolution:


Github Source: https://github.com/namar0x0309/AdaptiveResolution


2 thoughts on “Adaptive Resolution

  1. Sounds cool, but why recreating the framebuffer?
    What about this instead:
    – create framebuffer at native screen resolution (including multiple attachments if necessary – eg: gbuffer)
    – at runtime, “resize the viewport” (that is almost a no-op) instead of resizing the framebuffer attachments
    – at runtime, always do a “framebuffer blit” (with scaling, if necessary) from the framebuffer (possibly with multiple attachments – eg: gbuffer) to the screen (or even a temporary ‘final’ framebuffer – for postprocessing)

    In this way the cost of recreating the framebuffer (always a bad idea) or attaching (new) resized textures (still proibitive) is completely avoided, while still retaining the advantages of your idea.

    Feel free to contact me if the above doesn’t make sense 🙂

  2. Thanks for the input! I’ll be investigating and updating blog post with your suggestions!

Comments are closed.