Ab4d.SharpEngine versions history


See related blog posts to get additional information about development history of the Ab4d.SharpEngine rendering engine.


Version 1.0.8740

  • Added licensing code. Now license must be activated by calling SetLicense method.
  • Simplified GetChild, GetAllChildren and ForEachChild in GroupNode. Removed search by regular expression. The wildcard (using '*') search is now automatically determined from the specified name.
  • Removed SerializeToJson and DeserializeJson from Camera because they were rarely used. This removed reference to System.Text.Json assembly.
  • Added Camera.Name property that can be set when creating the camera.
  • Prevented throwing "Value cannot be null" exception when CreateOptions.ApplicationName was null or empty string.
  • Fixed rendering semi-transparent rectangles with SpriteBatch.
  • Fixed WpfBitmapIO to set HasTransparency property.
  • Fixed WinUIBitmapIO by converting to pre-multiplied alpha.
  • Changed default sampler type from Wrap to Mirror.
  • Documented many additional classes, properties and methods. See online help here: https://www.ab4d.com/help/SharpEngine/html/R_Project_Ab4d_SharpEngine.htm
Breaking changes:
  • Change the order of parameters in the VulkanDevice.Create methods - the EngineCreateOptions parameter was moved after surface parameters because it is now optional.
  • Removed IRotatedViewCamera interface and moved ViewRotation property from camera to SceneView.
  • Removed public VulkanInstance and VulkanDevice constructors. Now it is possible to create VulkanInstance and VulkanDevice objects only by using static Create methods (before both constructor and Create method were available).
  • Renamed some parameter names in some methods in transformation classes (uniformScale to scale).
  • Renamed FreeCamera.CalculateUpDirectionFromPositions to CalculateCurrentUpDirection.

Version 0.9.20-rc1

  • Added support for custom coordinate system - it can be changed by calling Scene.SetCoordinateSystem. Supported coordinate systems: YUpRightHanded (default), YUpLeftHanded, ZUpRightHanded, ZUpLeftHanded. There are also new methods in Scene and CameraUtils that can help you get information about the coordinate system.
  • Added CameraAxisPanel, which can show a small panel displaying the orientation of the X, Y, and Z axes.
  • Added PngBitmapIO class to SharpEngine. It can read or write png images so no third-party library is needed anymore to import textures or save rendered bitmap to disk.
  • Added SolidColorMaterial to make it easier to use solid color material (before user need to use StandardMaterial and set Effect to SolidColorEffect).
  • Added PlaneModelNode.AlignWithCamera method that orients the plane model so that it is facing the camera.
  • Added GetCameraPlaneOrientation to camera classes.
  • Added support to load textures from stream with new overloads to LoadDiffuseTexture method in StandardMaterialBase (base class for StandardMaterial and SolidColorMaterial). Before TextureLoader was needed to create a texture from stream.
  • bitmapIO parameter is now optional in the LoadDiffuseTexture method in StandardMaterialBase. When bitmapIO is null, then DefaultBitmapIO from GpuDevice is used.
  • Removed SharpDX dependency from Ab4d.SharpEngine.WinUI library (add DirectX 11 interop code to the library).
  • Added SharpEngineSceneView.DisableWpfResizingOfRenderedImage in Ab4d.SharpEngine.Wpf. When set to default true value, it produces sharper rendered image.
  • Added EngineCreateOptions.AdditionalValidationFeatures
  • Fixed using model or parent Group transformation on InstancedMeshNode.
  • Fixed moving camera with MouseCameraController in some cases when using an orthographic camera.
  • Fixed disposing DirectX 11 device (used by Ab4d.SharpEngine.Avalonia on Windows and can be used by Ab4d.SharpEngine.Wpf with Intel gpu).
  • Improved LineSelectorData so that in case the LineSelectorData is created with LineNode, then LineNode's WorldMatrix will be used to transform all the line positions.
  • Improved AssimpImporter - names that are assigned to created GroupNode and MeshModelNode from Assump's Nodes are assigned more correctly.
  • Updated SpriteBatch class: Renamed Draw method to DrawSprite. Added DrawBitmapText method to render a 2D text behind or on top of 3D scene. Added DrawRectangle method to render a 2D rectangle behind or on top of 3D scene.
Breaking changes:
  • Changed the order of parameters in TextureLoader.CreateTexture method - the bitmapIO is now optional and was moved after scene or gpuDevice parameters. When bitmapIO is not set, then DefaultBitmapIO from GpuDevice is used.
  • Removed CreateTextureMaterial methods from TextureLoader. StandardMaterial and SolidColorMaterial with texture can be easily created by using class constructor and providing file name or file stream.
  • Removed Scene.BitmapIO property and added VulkanDevice.DefaultBitmapIO property that is set to an instance of PngBitmapIO. This provides the default (and fallback) png loader to load textures from png files so not other third-party BitmapIO is needed.
  • Renamed IBitmapIO.ConvertToBgra to ConvertToSupportedFormat and updated the code accordingly (now the rgba images are not converted to bgra anymore but are shown by the engine in its original format).
  • Renamed AssimpImporter.ImportSceneNodes method to Import. Also changed the return type from SceneNode to GroupNode.


Version 0.9.18-beta6

  • TextBlockFactory, BitmapTextCreator and BitmapFont are now part of SharpEngine. Also there is a build-in bitmap font that can be used without the need to provide your font.
  • Improved ways to manually dispose objects and resources by adding the following methods: GroupNode.DisposeAllChildren, GroupNode.DisposeWithAllChildren, GroupNode.DisposeChildren, ModelNode.DisposeWithMaterial, MeshModelNode.DisposeWithMeshAndMaterial, LineBaseNode.DisposeWithMaterial and StandardMaterial.DisposeWithTexture (see Ab4d.SharpEngine online help for more info)
  • Added support for rendering sprites - see SpritesSample
  • Renamed GroupNode.GetFirstChild to GetChild
  • Improved support for using SharedTexture for WPF on Intel graphics cards. Before WritableBitmap was used because Intel's Vulkan driver do not support sharing DirectX 9 texture (created by WPF) with Vulkan. Note that this requries copying to another texture and this means that for integrated Intel GPU this is not faster so for now WritableBitamp is used by default. SharedTexture can be forece by setting IsUsingSharedTextureForIntegratedIntelGpu to true.
  • When calling RenderToBitmap or similar method and when format parameter is omitted, them the currently used Format from SceneView is used (before Bgra was used).
  • Updated RenderingSteps that render objects: FillCommandBufferRenderingStep is now abstract; there are new RenderObjectsRenderingStep and RenderSpritesRenderingStep; renamed SceneView.DefaultFillCommandBufferRenderingStep to SceneView.DefaultRenderObjectsRenderingStep; renamed CompleteRenderingStep to CompleteRenderingRenderingStep; renamed SceneView.DefaultCompleteRenderingRenderingStep to SceneView.DefaultCompleteRenderingStep
  • Added ClampNoInterpolation to CommonSamplerTypes - can be used for height maps with hard gradient.
  • Fixed hit-testing for InstancedMeshNode
  • Fixed using transparency in WPF's WriteableBitmap.
  • Updated TextureLoader to add options to cache a loaded texture (GpuImage) in a Scene's cache and not only in GpuDevice's cache. This way the textures are disposed when the Scene is disposed.
  • ReaderObj and AssimpImporter now have new constructors that take Scene object. When used, then textures are cached by the Scene and not by the GpuDevice.
  • Updated native Assimp importer to v5.3.1.
  • Updated Ab3d.Assimp library to correctly read file with non-ascii file names
  • Breaking change: The cacheGpuTexture paramter in TextureLoader.CreateTexture has been renamed to useGpuDeviceCache. Note that the new version also allows using Scene's cache for texture. To use that call CreateTexture by providing the Scene object and setting the useSceneCache to true.


Version 0.9.16-beta5

  • Improved ReaderObj to also read textures.
  • Swapped AssimpImporter constructor parameters (first parameter is now BitmapIO and not GpuDevice - BitmapIO is more important becuse it is required to load textures).
  • AssimpImporter can now read textures even when it is not created with a valid GpuDevice (in this case textures are lazily loaded).
  • Added RenderToBitmap method to SharpEngineSceneView that take WritableBitmap as parameter.
  • Ab4d.SharpEngine.AvaloniaUI: removed dependency from SharpDX.DXGI and SharpDX.Direct3D11.


Version 0.9.15-beta4

  • Engine can load the vulkan loader from the path that is set to the VK_DRIVER_FILES environment variable (see the following on how to use SharpEngine in a virtual machine or a web server: https://www.ab4d.com/SharpEngine/using-vulkan-in-virtual-machine-mesa-llvmpipe.aspx)
  • Removed isDeviceLocal parameter from GpuImage constructor and TextureLoader.CreateTexture method.
  • By default MSAA (multi-sampling anti-aliasing) is disabled for software renderer (Mesa's llvmpipe).
  • Renamed SharpEngineSceneView.RequiredDeviceExtensionNames to RequiredDeviceExtensionNamesForSharedTexture.
  • Added DesiredInstanceExtensionNames and DesiredDeviceExtensionNames to EngineCreateOptions class (before there were only RequiredInstanceExtensionNames and RequiredDeviceExtensionNames).
  • Moved methods to create edge lines from Ab4d.SharpEngine.Utilities.EdgeLinesFactory class to Ab4d.SharpEngine.Utilities.LineUtils class.
  • Many other improvements and fixes.


Version 0.9.14-beta3

  • Added SetAmbientLight, GetAmbientLightColor, GetAmbientLightIntensity methods to Scene.
  • Added overloads to SceneView.Points3Dto2D and BoundingBox.FromPoints that get Span<Vector3> instead of arrays.
  • Renamed BoundingBox.IsEmpty to BoundingBox.IsUndefined and BoundingBox.Empty to BoundingBox.Undefined.
  • Fixed BoundingBox.Add method when calling Add with (0, 0, 0) parameter after the BoundingBox was created.
  • Added Diagnostics window to Avalonia and WinUI samples.
  • Added a few new samples.
  • Improved workinig on Android and Android.Application sample.
  • Updated to Avalonia v11.0.0-preview8.
  • Many other smaller changes and fixes.


Version 0.9.8-beta2

  • Improve SharedTexture support for integrated Intel graphic cards and older graphics cards
  • Using SwapChainPanel for WinUI instead of SurfaceImageSource - this is faster and better supported by WinUI
  • Helped design External GPU memory interop (OpenGL, Vulkan, DirectX) and then implemented the new much better way to share Vulkan texture with Avalonia UI application
  • Objects and camera animation similar to Anime.js
  • Many other updates and fixes
  • Added many samples to help you understand the SharpEngine and provide code templates for your projects
  • Breaking change: Renamed StandardMaterial.Alpha property to Opacity


Version 0.9.0-beta1

  • first public beta version