29. November 2023 16:19
by nKast
0 Comments
KNI 3.10.9001 implements plenty of missing features in the BlazorGL platform, improvements in the Effect Processor, bug fixes, and performance improvements. A more detailed list of the changes is available on the changelog.
Download KNI v3.10 today.
.net6 Templates and nuget
The SDK now includes new VS2022 templates targeting .net6. Both the .net6 templates and the former templates for net4.0 framework, Xamarin and uap10, reference the nuget packages of the framework. The MAUI platforms (Android, iOS) and their templates are upgraded to target .net8.
BlazorGL
The BlazorGL platform got a couple of improvements in this version. Those are the things that got implemented:
- Texture2D.GetData(…)
- SongReader & MediaPlayer
- VideoPlayer
- Game.IsActive
- Depth24Stencil8 usage for Rendertarget2D and the backbuffer PreferredDepthStencilFormat.
- PreferMultiSampling and RenderTargetUsage for the backbuffer.
Productivity
A common complaint with the content builder is it takes a couple of seconds to load a project and check for changed assets. The db files in the IntermediateDir folder are stored in a new binary format, replacing the XmlSerializer and any tedious reflection and parsing. The project loading has a O(1) dictionary to check for duplicates. The tool will no longer output ‘Skipping…’ lines. As a result, the content builder is now lighting fast and you will not even notice it when rebuilding a project. Additionally an issue with the /OutputDir and /IntermediateDir has been fixed, and the tool will store its output in the same folder whether you build from the editor, the command line, or the .csproj.
The EffectProcessor takes 10% less time that the previous version, after some refactoring and removal of unnecessary data copies.
Macros are no longer necessary when writing effects. Whether you are targeting WindowsDX (DX11) or an OpenGL platform, you are writing one Shader. You can use the new HLSL4.0 syntax to define Samplers and Textures or the old HLSL2.0 syntax (compatibility mode).
OldSyntax.fx
Texture2D SpriteTexture : register(t0);
sampler2D SpriteTextureSampler : register(s0) = sampler_state
{
Texture = <SpriteTexture>;
};
struct VertexShaderOutput
{
float4 Position : SV_POSITION;
float2 TextureCoordinates : TEXCOORD0;
};
float4 MainPS(VertexShaderOutput input) : COLOR
{
return tex2D(SpriteTextureSampler, input.TextureCoordinates);
}
technique SpriteDrawing
{
pass pass0 { PixelShader = compile ps_4_0_level_9_1 MainPS(); }
};
NewSyntax.fx
Texture2D SpriteTexture : register(t0);
sampler SpriteTextureSampler : register(s0);
struct VertexShaderOutput
{
float4 Position : SV_POSITION;
float2 TextureCoordinates : TEXCOORD0;
};
float4 MainPS(VertexShaderOutput input) : COLOR
{
return SpriteTexture.Sample(SpriteTextureSampler, input.TextureCoordinates);
}
technique SpriteDrawing
{
pass pass0 { PixelShader = compile ps_4_0_level_9_1 MainPS(); }
};
Performance
Rendering performance has been improved, particularly for OpenGL.
The performance tests can be found in the KniBenchmarks project on github.
Framework versions: KNI 3.10.9001, MonoGame 3.8.1.303, FNA 23.07, XNA 4.0
All tests were performed on the following system:
CPU: AMD Ryzen 3 2200U
GPU: AMD Randeon Vega 3 Mobile Gfx
HDD: WD Blue SN550 NVMe SSD
Sponsors
While KNI is free and open-source, maintaining and expanding the framework requires ongoing effort and resources. We rely on the support of our community to continue delivering top-notch updates, features, and support.
By becoming a Sponsor, you can directly contribute to the growth and sustainability of the KNI Game Framework.