This is FNAPlatform, the platform abstraction layer and implementations for FNA.

The way FNA platforms are written is very simple:

1. Write implementations of the delegate types listed in FNAPlatform.cs
2. Assign the new functions in the FNAPlatform static constructor

Determining platform backends at runtime allows us to have portability across
all targets with a single binary, which is convenient for targeting multiple
platforms as well as multiple backends for each platform all simultaneously.

That said, if you are adding a new platform, it is extremely likely that you
will NOT be touching anything in FNA itself! The expectation is that 100% of
your work will end up in SDL2 and FNA3D. You _might_ add some OSVersion checks
to SDL2_FNAPlatform.cs, but that should be the only change in the managed code.

If for some reason you REALLY need a new FNAPlatform, the new platforms will add
code exclusively to this folder. Some interfaces may need to change for new
platforms, but changing the interface should be as simple as making the
modifications at the interface layer and fixing the code in both the XNA
reimplementation code as well as each platform backend file that depends on
those interfaces, all of which should throw errors at compile time right away,
regardless of your current target platform.

When submitting new platforms, please test ALL platforms and ALL backends!
