This is a very, very long term project that will require a lot of experimentation.
The idea is to completely rip out the ancient, slow, and ugly Scaleform GFx UI from the game. We would replace it with a new UI, written from scratch, using Avalonia.
Here's what I think we would roughly have to do:
For the Avalonia backend, I think we would basically just do a classic IDXGISwapChain::Present() hook. In the hook, we make Avalonia render using Direct2D or Win2D, which should be fairly easy since Avalonia already has an official Direct2D backend that we can learn from. Using Direct2D is advantageous because it can interoperate with Direct3D.
Note: TERA only works with DirectX 11.0+ since the 64-bit upgrade. However, Direct2D/Direct3D interop will require Direct3D feature level 11.1. Unfortunately, the client currently hardcodes feature level 11.0 when calling D3D11CreateDevice(), so we will need to patch that.
This is a very, very long term project that will require a lot of experimentation.
The idea is to completely rip out the ancient, slow, and ugly Scaleform GFx UI from the game. We would replace it with a new UI, written from scratch, using Avalonia.
Here's what I think we would roughly have to do:
For the Avalonia backend, I think we would basically just do a classic
IDXGISwapChain::Present()hook. In the hook, we make Avalonia render using Direct2D or Win2D, which should be fairly easy since Avalonia already has an official Direct2D backend that we can learn from. Using Direct2D is advantageous because it can interoperate with Direct3D.Note: TERA only works with DirectX 11.0+ since the 64-bit upgrade. However, Direct2D/Direct3D interop will require Direct3D feature level 11.1. Unfortunately, the client currently hardcodes feature level 11.0 when calling
D3D11CreateDevice(), so we will need to patch that.