# Multi-sampling (full-screen anti-aliasing) on iOS

**URL:** <https://forum.castle-engine.io/t/multi-sampling-full-screen-anti-aliasing-on-ios/310>\
**Category:** News\
**Created:** [March 18, 2021, 12:39am UTC](https://forum.castle-engine.io/t/multi-sampling-full-screen-anti-aliasing-on-ios/310 "2021-03-18T00:39:46Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![michalis](https://forum.castle-engine.io/user_avatar/forum.castle-engine.io/michalis/32/3_2.png) [@michalis](https://forum.castle-engine.io/u/michalis)\
**Post date:** [March 18, 2021, 12:39am UTC](https://forum.castle-engine.io/t/multi-sampling-full-screen-anti-aliasing-on-ios/310/1 "2021-03-18T00:39:46Z")

</div>

| [![summary_aa](https://castle-engine.io/wp/wp-content/uploads/2021/03/summary_aa-e1616027743588-200x129.png)](https://castle-engine.io/wp/wp-content/uploads/2021/03/summary_aa-e1616027743588.png "summary\_aa") |
| [![iOS without multi-sampling requested (some anti-aliasing done anyway)](https://castle-engine.io/wp/wp-content/uploads/2021/03/ios-no-multi-sampling-200x112.png)](https://castle-engine.io/wp/wp-content/uploads/2021/03/ios-no-multi-sampling.png "iOS without multi-sampling requested (some anti-aliasing done anyway)") |
| [![iOS with multi-sampling requested (more anti-aliasing done)](https://castle-engine.io/wp/wp-content/uploads/2021/03/ios-multi-sampling-200x112.png)](https://castle-engine.io/wp/wp-content/uploads/2021/03/ios-multi-sampling.png "iOS with multi-sampling requested (more anti-aliasing done)") |
| [![No multi-sampling (desktop)](https://castle-engine.io/wp/wp-content/uploads/2021/03/desktop-no-multi-sampling-200x113.png)](https://castle-engine.io/wp/wp-content/uploads/2021/03/desktop-no-multi-sampling.png "No multi-sampling (desktop)") |

You can now activate multi-sampling on iOS using `Window.AntiAliasing := aa4SamplesFaster`. You should set this before window is opened, which usually means it should be done in the `initialization` section of a unit like `GameInitialize`.

**What values of AntiAliasing are actually meaningful?**

Internally iOS supports only _“none”_ or _“4”_ [multi-sampling values](https://developer.apple.com/documentation/glkit/glkviewdrawablemultisample). So actually there are only 2 different states on iOS depending on `Window.AntiAliasing`:

- `aaNone`, `aa2Samples*` -\> means no anti-aliasing
- `aa4Samples*` and higher options -\> means 4x anti-aliasing

The suffix “faster” or “nicer” also doesn’t matter for anti-aliasing on iOS, e.g. `aa4SamplesFaster` and `aa4SamplesNicer` are equivalent. This suffix matters only on OpenGL with `NV_multisample_filter_hint`.

**Testing**

Unfortunately the log always says `Current: 1 samples per pixel` because it seems Apple didn’t bother to implement `glGetInteger(GL_SAMPLES)` correctly. It always returns 0 (so it would seem that no multi-sampling happens).

But if one looks at actual rendering, then yes, multi-sampling does make an effect!

Actually, it seems that iOS always does some multi-sampling, which I guess is just something they do on the high pixel resolutions on iOS (these are results of my tests on _iPhone SE_). But there’s definitely _more_ multi-sampling when you request `aa4SamplesFaster` than if you leave it at `aaNone`. See the screenshots from iOS device with and without multi-sampling requested on the side of this post. They show an unlit box, which should produce very sharp edge without anti-aliasing (see desktop screenshot).
