Finger info for flibitijibibo@icculus.org...


FNA on Consoles: The Next Generation

We've been really busy this year on FNA... this may come as a surprise since the FNA release logs have been pretty slim for some time!

It's very unusual for the team to be doing things behind the scenes rather than out in public, but that's the nature of console development in a lot of ways... thankfully we're now close enough to where we can finally open things up a bit more.

First, a huge thank you to Caleb Cornett for carrying a lot of the management for these projects, as well as Tom Cashman at Viridian Software and many others at Eden Industries who played significant roles in getting a lot of infrastructure work done for consoles (as well as some low-level Linux work that Eden graciously took on while I was off doing some non-port work for a change). We expect to continue working with both Viridian and Eden as console experts for future ports, so we're very excited to have more companies involved in the community!

With that in mind, we have major announcements for all three major consoles today, each with their own interesting twist. The bottom line: We have brought NativeAOT, and thus ported .NET 7, to all three platforms! This is a complete overhaul of the current console development workflow for FNA and we know it's been on many developers' wishlists, so we're thrilled to say that it's finally here. As for the platform-specific news, here's where we're at:

Nintendo Switch: Ready to Ship!

We've been on Switch for about 4 years now, but I'm happy to say that just a couple weeks ago our very first NativeAOT-based FNA Switch title passed certification, so we have effectively completed the transition to NativeAOT from BRUTE. It works, it's been tested, and it will be on the eShop in the very near future! The game has not been announced yet but expect me to be making a lot of noise when it's live :)

EDIT: While the eShop page isn't live yet, we can reveal that it's Alchemic Cutie! Keep an eye out for the eShop release!!

If you're targeting Switch with FNA, definitely get in touch so that we can get you on the new runtime!

Xbox GDK: Ready to Migrate!

As of December we have finished our first fully complete draft of the new GDK support in FNA. In addition to porting NativeAOT, we have also done something else rather interesting: We brought fully-conformant desktop OpenGL to Xbox. Yes, seriously. This is sort of our stop-gap solution while Ryan works on SDL_gpu, which will allow us to directly target D3D12, but for now this has been a really great compromise and it performs excellently with the new runtime, especially compared to UWP.

That said, it hasn't gone through cert just yet, so we're still very much in the testing stage. We're still fully confident that this will be our Xbox workflow going forward, so if you're targeting Xbox now we strongly suggest trying out the new runtime so that you aren't stuck on UWP when we axe support for it. Who knows, maybe your game will be the one to get through cert first! If you're an ID@Xbox partner and don't have access yet, let us know.

PlayStation: Ready to Start!

It's finally here: We're working out PlayStation support as we speak. SDL is ported, NativeAOT is ported, and all the fnalibs work... except FNA3D, which is still in progress. Probably not a surprise to most, considering it requires writing an entirely new renderer and shader content pipeline from scratch (twice, if you're targeting both 4 and 5), but we've actually made pretty great progress: The shader tools work and the PS4 renderer is slowly making its way to First Draft status. You'll be delighted to know that we found a way to make XNA Effects continue to work on PlayStation; your existing shader binaries will once again work on a new platform without any changes necessary.

We're calling this "ready to start" because we're at the stage where you should be able to create a full solution that targets PlayStation, it just won't run yet. We encourage those with development licenses to get in touch, both to make sure our existing setup works and maybe to help make sure our new FNA3D driver works too. Porting to Sony's wacky proprietary stuff has definitely been the biggest challenge by far, so we need all the eyeballs we can get!

That covers the major console announcements from the FNA team; we hope you're excited and we definitely hope that you'll be able to participate and help get all this stuff finished and ready for your games! And as always, Linux support remains my top priority, so you're always welcome to get in touch for that as well.


flibitBuild

Want to replicate my build machine? Grab CentOS 7 and have a look...

# Update base install before doing anything else
yum update
# Add EPEL
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# Add SCL
yum install centos-release-scl
# All the base build tools!
yum install bzip2 bzip2-devel chrpath cmake cmake3 freetype-devel gcc-c++ \
    git gtk3-devel hg libcxx-devel libstdc++-static libusbx-devel \
    libuuid-devel libvorbis-devel libxml2-devel lzma-sdk-devel meson \
    ocl-icd-devel openal-soft-devel opencl-headers openssl-devel patch \
    perl-IPC-Cmd svn unix2dos yum-utils yum-plugin-copr zlib-static
# SDL2 dependencies
yum-builddep SDL2
# Coprs for MinGW as well as GCC 10, needed to build Clang/LLVM/osxcross
yum copr enable mlampe/devtoolset-10
yum copr enable alonid/mingw-epel7
yum install devtoolset-10 mingw32-* mingw64-*

# CMake3 by default
alternatives --install /usr/local/bin/cmake cmake /usr/bin/cmake 10 \
    --slave /usr/local/bin/ctest ctest /usr/bin/ctest \
    --slave /usr/local/bin/cpack cpack /usr/bin/cpack \
    --slave /usr/local/bin/ccmake ccmake /usr/bin/ccmake \
    --family cmake
alternatives --install /usr/local/bin/cmake cmake /usr/bin/cmake3 20 \
    --slave /usr/local/bin/ctest ctest /usr/bin/ctest3 \
    --slave /usr/local/bin/cpack cpack /usr/bin/cpack3 \
    --slave /usr/local/bin/ccmake ccmake /usr/bin/ccmake3 \
    --family cmake

# Wayland updates
su -c 'yum remove wayland-devel wayland-protocols-devel'
curl -O https://gitlab.freedesktop.org/wayland/wayland/-/archive/1.19.0/wayland-1.19.0.tar.bz2
curl -O https://gitlab.freedesktop.org/wayland/wayland-protocols/-/archive/1.25/wayland-protocols-1.25.tar.bz2
curl -O https://gitlab.gnome.org/jadahl/libdecor/-/archive/0.1.0/libdecor-0.1.0.tar.bz2
tar xvfj wayland-1.19.0.tar.bz2
tar xvfj wayland-protocols-1.25.tar.bz2
tar xvfj libdecor-0.1.0.tar.bz2
mkdir wayland-1.19.0/flibitBuild
mkdir wayland-protocols-1.25/flibitBuild
mkdir libdecor-0.1.0/flibitBuild
cd wayland-1.19.0/flibitBuild
meson .. --libdir=lib -Ddocumentation=false
ninja
su -c 'ninja install'
cd ../../wayland-protocols-1.25/flibitBuild
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig" meson .. --libdir=lib
ninja
su -c 'ninja install'
cd ../../libdecor-0.1.0/flibitBuild
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig" meson .. --libdir=lib -Ddemo=false
ninja
su -c 'ninja install'

# PipeWire 0.3.42 (Highest version usable with meson)
curl -O https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/0.3.42/pipewire-0.3.42.tar.bz2
tar xvfj pipewire-0.3.42.tar.bz2
mkdir pipewire-0.3.42/flibitBuild
cd pipewire-0.3.42/flibitBuild
meson setup .. --libdir=lib -Dsession-managers= -Dpipewire-v4l2=disabled -Dv4l2=disabled -Draop=disabled

# Also:
# Configure SDL with PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure
# Modify unistd.h to change __block to anything but __block
# The CMake config provided by SDL2-mingw is terrible, delete the block
#  that starts with "if(NOT TARGET SDL2::SDL2)".
# Be prepared to pass -std=gnu99 manually. A LOT.

# To enter Mac building mode (and to build osxcross itself):
# scl enable devtoolset-10 bash

Wait, a "plan"?

Well, this is a .plan file, so here's my TODO. Expect nothing from it, ever.

In Progress
    Crash-landing lots of little things!

Waiting Room (2023)
    SDL 3.0
        - SDL_ActionSet is what sponsor resources are going towards
        - SDL_StorageContainer is whenever I feel like it
        - Wayland/PipeWire are waiting on external components
    Codename DanishBootleg
        - Sitting in cert now!
    Codename TupTip
        - A couple weeks after FNA 23.01
    Super Hexagon Neo Part 2
        - Someone's doing the merge, then I'll come in to finalize
    Coding History
        - On call throughout development
    flibitEffect
        - Licensing blockage, might get cancelled
    VVVVVV 2.4
        - Giving the localization project as much time as it wants
Waiting Room (Heat Death)
    ScoreRush PC
        - Need AppAdmin for publish, crosshair for mouse
    Proteus "Neo" Rewrite
        - Retirement project
    Anodyne 1
        - Retirement project


When this .plan was written: 2023-01-01 12:14:09
.plan archives for this user are here (RSS here).
Powered by IcculusFinger v2.1.27
You could be playing Pringles for Genesis but instead you're here?