Exon SDK Changelog

What's new in Exon SDK 3.2

Jun 13, 2014
  • Added all samples to the SDK.
  • Replaced Assimp by the FBX SDK (2015).
  • Renamed Exon.Content to Exon.Engine:
  • Moved all high-level classes from Exon.Core to Exon.Engine.
  • Improved the content compiler. It now detects unused cached files, and deletes them to prevent garbage accumulation.
  • The default, and only content folder is now called "Content".
  • Removed all animation-related classes from the entire framework; they will be re-implemented using FBX in future releases.
  • Exon games are now updated automatically whenever a newer SDK version is installed; no need to modify your projects!
  • Made the IndexBufferContent and VertexBufferContent constructor public.
  • Removed the TargetPlatform enum.
  • Replaced the SDF font system by a bitmap font system.
  • Removed the EffectParameter.Members property.
  • Removed the EffectAnnotation class and all of its references.
  • Added GraphicsDevice.UnsetShaderResources().
  • Removed VertexPositionColorNormalUVTangent and VertexPositionNormalUVTangent.
  • Improved the parameterization of CPC and game templates.
  • Added SpriteFont.Characters and removed SpriteFont.Name.

New in Exon SDK 3.1 (May 19, 2014)

  • Features:
  • Animation System:
  • The animation system includes efficient hardware skinning with up to 72 bones per mesh, and 4 weights per vertex.
  • Supports animation splitting via the Content Pipeline.
  • New classes:
  • SkinnedEffect
  • Animation, AnimationChannel, AnimationChannelCollection,
  • AnimationCollection, AnimationController, BonePose,
  • Keyframe, KeyframeCollection, Skeleton
  • Models:
  • Removed the FBX importer by the ModelImporter, which uses Assimp internally.
  • Supported model formats:
  • .dae, .3ds, .ase, .obj, .ply, .lwo, .lxo, .stl, .x, .ac, .ms3d, .irrmesh, .mdl, .md2, .md3, .pk3, .mdc, .b3d
  • Exon.WinForms:
  • Enables the use of Exon inside a WinForms application.
  • Includes Game-like behaviour such as separated Update / Draw paths and fixed time stepping.
  • Fixes:
  • Fixed the song streaming functionality in AudioEngine.
  • The song streaming thread is now only active when a song is actually played.
  • Fixed the return types of Vector2 / Vector4.Transform().
  • Fixed a bug in the serialization of an IndexBufferContent object that serialized the wrong index size.
  • Changes:
  • Changed ContentSettings.xml to ContentPipeline.xml.
  • Changed IndexBufferContent from Collection to Collection.
  • The content folder of a game is now specified by ContentPipeline.xml instead of cpc.exe.
  • Merged Exon.Content.Compiler into Exon.Content.Pipeline.
  • Merged Exon.Graphics, Exon.Audio and Exon.Input into Exon.Core.
  • Internalized the SongImporter and SoundImporter class.
  • AudioEngine is now an instance class (static class before).
  • Revamped the functionality of ContentPipeline.xml.
  • File groups can now be defined as sets of files.
  • Multiple files can now be specified in a single "Files" attribute.
  • Improved the content pipeline's material system to be more flexible.
  • A material is now defined as a collection of arbitrary properties instead of fixed color values.
  • Added the ModelProcessor class to the content pipeline.
  • Internalized the VertexBufferContent constructor.
  • Exon templates are now installed regardless of whether Visual Studio is installed.
  • Added support for .bmp texture files.
  • Replaced the DeviceFeatureLevel enum by a new enum: GraphicsProfile. All references have been updated accordingly.
  • Changed the Length/LengthSquared properties of math classes to methods.
  • Renamed Mipmap to MipmapContent.
  • Renamed TextureFace to TextureFaceContent.
  • Renamed the Mesh.LocalBoundingBox property to Mesh.BoundingBox.
  • Added:
  • Collision.CircleContainsCircle method.
  • MathHelper.DegreeDistance method.
  • ContentManager.UnloadAsset method.
  • Added SpriteFont sizing capability to .font files.
  • New SurfaceFormat members: Bgra32x and Vector3.
  • New vertex channel names in the content pipeline: BoneIndices and BoneWeights.
  • Indexer properties for Vector2, Vector3, Vector4 and Quaternion.
  • New structures: Byte2, Byte4, Short2, Short4, Int2, Int3 and Int4.
  • New VertexElementFormat members: Int, Int2, Int3, Int4, Byte, Byte2 and Short.
  • Model.IsDisposed property.
  • New effect interfaces: IMaterialEffect, ITexturedEffect, ISkinnedEffect.
  • Curve types: Curve, CurveContinuity, CurveKey, CurveKeyCollection, CurveLoopType and CurveTangent.
  • Removed:
  • Removed the EffectParameterClass and EffectParameterType enums.
  • Removed the static GraphicsDevice.SupportedFeatureLevel method.
  • Removed the SoundListener class; merged its functionality into AudioEngine.
  • Removed the IStockEffect interface.
  • Removed the IGraphicsDeviceService and IGraphicsDeviceManager interfaces.
  • A Game instance now always creates its own GraphicsDeviceManager and provides it via the Game.DeviceManager property.
  • Removed the GameServiceContainer class.

New in Exon SDK 3.0 (Apr 22, 2014)

  • Rewritten all high-level parts of Exon in C#.
  • Major documentation improvements.
  • Removed all importer-related classes from Exon.Content.
  • Removed all FromStream/FromFile methods; assets have to go through the content pipeline.
  • Added Exon.Content.Compiler.
  • Added Exon.Content.Pipeline.
  • Merged SpriteBatch.Begin / BeginText.
  • Removed Exon.WinForms; it will be available as a community extension in the future.
  • Removed SpriteSortMode; the user has to sort his draw calls for sprites and text.
  • Removed GraphicsDevice.Samplers and GraphicsDevice.Textures.
  • Removed SpriteBatch custom effect capability.
  • Added outlining effects to SpriteBatch.DrawString.

New in Exon SDK 2.2 (Mar 21, 2014)

  • Changes:
  • Migrated to C++ 2010.
  • d3dcompiler_46.dll is now installed to the System32 folder.
  • The Game and Library template now references Exon's GAC assembly rather than its own copy of it.
  • Because of this, it is now required to install the Exon Redistributable on a target machine.
  • If you don't want your users to install the redistributable, you have to deploy the following dependencies yourself:
  • d3dcompiler_46.dll
  • C++ Runtime 2010 (x86)
  • .NET Framework 4.0
  • DirectX Redistributable
  • Removed the SampleBrowser; samples and tutorials are now available on the website (Documentation).
  • Game Components have been removed.
  • The Initialize method of the Game class has been removed.
  • Removed ContentManager.GetImporter, as it is not needed anymore.
  • All built-in asset importers now provide their parameters statically.
  • Moved all built-in asset importers to the Exon.Content namespace (Exon.Content.Importers before).
  • Removed the StockImporter class; replace it with the AssetImporter class.
  • Important: Renamed "Binormal" to "Bitangent" globally. If you have a custom vertex type that exposes its bitangent element by the semantic "BINORMAL", please change it to "BITANGENT". Also change your shaders accordingly, if referenced.
  • Renamed "InputElementFormat" to "VertexElementFormat".
  • Features Added:
  • Tangent / bitangent generation in ModelImporter.
  • To generate tangents / bitangents, specify true for ModelImporter.Settings.GenerateTangents.
  • Debug-capability to GraphicsDevice.
  • PrimitiveBatch.DrawBoundingBox
  • PrimitiveBatch.DrawBoundingSphere
  • PrimitiveBatch.DrawBoundingFrustum
  • Fixes:
  • Exon.Input and calls to Mouse.SetPosition are now ignored if the game is inactive (Game.IsActive == false).
  • The game window is not minimized anymore when the game loses focus.

New in Exon SDK 1.7.1 (Jan 8, 2014)

  • Fixes:
  • Fixed an #include bug for effects
  • Fixed a swap chain resizing bug that occurred when a back buffer was used inside an effect
  • It is now possible to mix asset types and file extensions for asset importers, for example you can have two different Model importer classes that support different model file formats. It is however not possible to have different importer classes that import the same type and have the same file format.
  • Methods, Events and Properties:
  • GameServiceContainer:
  • (method) GetService
  • DeviceManager:
  • (event) BuffersResizing
  • (event) BuffersResized
  • (prop) BackBufferTarget
  • (prop) DepthBufferTarget
  • SwapChain:
  • (prop) BufferCount
  • Changes:
  • SwapChain:
  • (method) GetBuffer -> (prop) Buffers
  • (method) GetContainingOutput -> (prop) ContainingOutput
  • (prop) ResourceUsage -> (prop) BufferUsage

New in Exon SDK 1.7.0 (Jan 4, 2014)

  • New Font System:
  • The mechanics of SpriteFont (bitmap fonts) have been replaced by Signed Distance Field fonts, which are highly scalable while leaving a small memory footprint.
  • Because of this, SpriteFont is not dependent on MakeSpriteFont anymore.
  • Exon fonts (.font files) can be generated easily with a new tool:
  • Exon.FontGen: this tool allows you to generate Exon fonts from .ttf / .otf fonts.
  • Region selection and editing is supported.
  • Regions can be edited in the CharacterRegions.xml file.
  • The tool exists in the SDK folder after installation.
  • New method - SpriteBatch.BeginText:
  • Sprite drawing has been separated from text drawing.
  • Because of this, you have to call SpriteBatch.Begin only for sprites, and SpriteBatch.BeginText for text.
  • To end, you have to call SpriteBatch.End in both cases.
  • Effect Compiler:
  • This new tool allows you to generate effect byte-code classes from an .fx file.
  • It can export classes into three languages:
  • VB.NET
  • C++/CLI
  • The resulting class file can be then added to your project, in which you can construct effects from that class's byte code.
  • The byte code is accessible as an internal, static byte array.
  • Fixes:
  • Fixed the Save(filename) function of all texture classes.
  • Fixed the Effect template.
  • Fixed the custom SpriteBatch effect template.

New in Exon SDK 1.6.0 (Dec 27, 2013)

  • Input Layouts:
  • No more input layout management! Input layouts are now managed automatically, by Exon. When setting vertex buffer(s), their vertex format must match the currently set effect pass's vertex format. If that is not the case, Exon will throw an exception.
  • Note: although this mechanism is very efficient, it is still recommended to render primitives in a specific order.
  • An example:
  • 1. render all primitives that use vertex type 1
  • 2. render all primitives that use vertex type 2
  • 3. render all primitives that use vertex type 3
  • Every time you render a primitive with a different format than the previous, Exon detects that and changes the current input layout according to the current format.
  • Removed the InputLayout class, because of the new mechanism.
  • Removed BasicEffect.CreateInputLayout.
  • Removed DeviceContext.InputLayout getter and setter.
  • Removed the InputElement.AppendAligned constant; use an explicit offset that is greater than or equal to zero when declaring your input elements.
  • Effects:
  • Removed Effect.Clone and the cloning constructor; cloning effects is not possible anymore. It is recommended to build effects from byte code arrays. You can use Exon.Fxc (http://sourceforge.net/projects/exon-fxc/) to simplify this process.
  • Removed EffectPass properties:
  • StencilReference
  • SampleMask
  • BlendFactor
  • Added the EffectParameter.Members property. Useful for structure parameters inside effects.
  • Content pipeline:
  • Removed the ImporterContext class. It has been replaced by IServiceProvider.
  • Removed stream loading methods for ContentManager.Load and IAssetImporter.ImportAsset.
  • Other:
  • Fixed some documentation comments.
  • Added the DataBox.IsEmpty property getter.
  • Added a 'count' parameter for Buffer.GetData.
  • Changed DataBox parameters in GetData / SetData functions from nullable to real values. If the DataBox value is empty (DataBox.IsEmpty), it will not be used by the function.
  • Added a GetData / SetData overload for textures and buffers that don't require a DeviceContext. For these overloads, the device's immediate context is used.
  • Changed the return type of AdapterOutput.GetDisplayModeList to ModeDescription[].
  • Fixed value resetting in DeviceContext.ClearState.
  • Changed the default post processing flags for texture loading methods to just GenerateMipMaps (GenerateMipMaps and PremultiplyAlpha before).
  • Fixed stride calculation in the InputElement constructor for instanced input elements.
  • Fixed ref / out overload of Matrix.Multiply. It is now possible to pass a matrix ref as input AND output.
  • Added ref / out overloads for BoundingFrustum.Intersects and BoundingFrustum.Contains.
  • Refined the ModelImporter from the example browser. It imports VertexPositionNormalUV vertices by default, unless GenerateTangents is set to true. If GenerateTangents is true, VertexPositionNormalUVTangent vertices are used.

New in Exon SDK 1.5.1 (Dec 17, 2013)

  • Updated the texture loading and effects library
  • Added the VertexBuffer.VertexType getter property
  • Fixed the out-parameter in Plane.Intersects
  • Improved the documentation

New in Exon SDK 1.5 (Dec 10, 2013)

  • Fixed ref/out parameters in math classes (Vector2, Vector3 etc.)
  • Fixed a bug in texture loading methods which caused a loaded texture to be invalid when a post-process operation failed
  • Removed the TextureMetadata structure, as it was never used
  • Removed the TextureStreamType enumeration type and all its references. The texture stream type is now determined automatically
  • Distributed the Texture::Save methods to individual texture classes
  • Added Save(filename) methods to all texture classes
  • Renamed methods:
  • Matrix:
  • LookAt -> CreateLookAt
  • Reflection -> CreateReflection
  • Shadow -> CreateShadow
  • AffineTransformation -> CreateAffineTransformation
  • AffineTransformation2D -> CreateAffineTransformation2D
  • Transformation -> CreateTransformation
  • Transformation2D -> CreateTransformation2D
  • Quaternion:
  • Barycentric -> CreateBarycentric
  • RotationAxis -> CreateFromRotationAxis
  • RotationMatrix -> CreateFromRotationMatrix
  • FromYawPitchRoll -> CreateFromYawPitchRoll

New in Exon SDK 1.4 (Nov 23, 2013)

  • Added the DrawingPanel and DrawingPanelDeviceManager class. This allows Exon to be rendered inside a WinForms panel
  • Moved the back buffer and depth buffer creation from the Game class to the DeviceManager class

New in Exon SDK 1.3.2 (Nov 13, 2013)

  • Corrected documentation errors (Object^)
  • Fixed out-parameter declarations in the math classes

New in Exon SDK 1.2 (Oct 11, 2013)

  • Changes:
  • Removed Mouse.IsMouseDown() / IsMouseUp in favor of Mouse.GetState()
  • Removed the "None" member of the MouseButtonState enum
  • Removed the Mouse.Position property in favor of Mouse.SetPosition() and Mouse.GetState()
  • Improved the BasicEffect shader and documentation. BasicEffect now supports fogging
  • Effect.OnApply now gets passed the appropriate DeviceContext instance (the context on which the pass is applied)
  • Improved the overall documentation and corrected some typos
  • Bug fixes:
  • Fixed a bug in DeviceContext.DrawInstanced and DrawInstancedIndirect. These methods checked whether a valid index buffer was set, and thre an exception if that was not the case. This should not be the case, as these methods do not require and index buffer to be set
  • Added the missing checks in InputElement for other InputElementFormat members (Short2, Short4...). This caused the stride to be calculated incorrectly

New in Exon SDK 1.1 (Oct 8, 2013)

  • Bug fixes:
  • SpriteBatch: fixed a bug that prevented a custom effect from being used.
  • New feature:
  • It is now possible to set textures in EffectParameter, using SetValue(Texture).
  • SpriteBatch.Draw now accepts Texture2D instances instead of ShaderResourceViews.
  • The SpriteFont constructor now accepts a Texture2D instance instead of ShaderResourceView.

New in Exon SDK 1.0 (Sep 27, 2013)

  • The initial "stable" release of Exon!
  • This release contains several bug fixes, performance and documentation improvements, as well as new features:
  • New classes, structs and enums: SpriteBatch and SpriteFont: replaces the "2D" functionality of Direct2D, which has been removed from Exon (Exon.Drawing).
  • PrimitiveBatch: enables efficient rendering of points, lines, triangles, quads and user-defined primitives.
  • TextureProcessingFlags: replaces the "generateMipMaps" and "premultiplyAlpha" parameters in texture loading methods.
  • The GraphicsResource class is now responsible for setting and getting data.
  • It is now possible to Map and Unmap the GraphicsResource directly. If a resource is not mappable, an exception will be thrown. New methods and properties: DeviceContext VertexShaderSamplers / VertexShaderResources
  • HullShaderSamplers / HullShaderResources
  • DomainShaderSamplers / DomainShaderResources
  • GeometryShaderSamplers / GeometryShaderResources
  • PixelShaderSamplers / PixelShaderResources
  • ComputeShaderSamplers / ComputeShaderResources
  • GraphicsResource CopyTo: uses the GPU to copy data from the resource to another resource.
  • CopyRegionTo: uses the GPU to copy a region from the resource to another resource.
  • IsDynamic: determines if the resource is dynamic (mappable).
  • IsImmutable: determines if the resource is immutable.
  • DepthStencilView Dimension
  • UnorderedAccessView CopyStructureCount
  • RasterizerState (static) WireframeFull: wireframe mode with culling disabled.
  • Corrected the byte offsets of the input elements in VertexPositionNormal, VertexPositionColorUV and VertexPositionColorNormalUVTangent.
  • The members of the Viewport structure are now floats instead of ints.
  • The Buffer constructors now require an IntPtr for initial data, instead of a SubresourceData instance.
  • Removed the "index" parameter for EffectParameter.SetValue(SamplerState). EffectParameter always accesses the first slot (0).
  • Renamed the "ResourceDimension" enum to "ResourceType".
  • Renamed the "ImmediateContext" property to "Context" in the Device class.
  • Removed classes, methods and properties: Effect Apply
  • EffectParameter GetValueBlendState
  • SetValue(BlendState)
  • GetValueDepthStencilState
  • SetValue(DepthStencilState)
  • GetValueRasterizerState
  • SetValue(RasterizerState)
  • Argb and Rgba structs

New in Exon SDK 1.1.3 Beta (Sep 17, 2013)

  • Added support for Visual Studio 2013.
  • Improved stability in the entire framework, especially in DeviceContext. COM pointers are now managed using a ComPtr class template.
  • Improved the documentation on DeviceContext methods.
  • Moved the texture classes' GetData / SetData methods to the Texture class.
  • The SetData / GetData methods in Texture now require a DeviceContext to be passed.
  • Fixed reference counting for the common states.
  • Exposed the FeatureLevelCapabilities instance in Device.
  • Removed the GraphicsResourcePool class and all of its references.

New in Exon SDK 1.1.2 Beta (Aug 24, 2013)

  • Enabled full optimization and intrinsic functions.
  • Added two structures: Rgba and Argb which contain four bytes in the corresponding order. These structures are useful for example when setting data on an RGBA texture.
  • Added a WindowHandle mechanism to the Mouse class, so it can focus on a Control. Previously, the Mouse would return true in "IsButtonDown" when the control lost focus. This is now fixed.
  • Replaced the properties on the built-in vertex types with public members. This is done for simplicity and less bugs in the future, when someone forgets to reassign a structure to an array.
  • Added implicit conversion methods in Vector3 and Vector4 for the Color structure (Color Vector3/Vector4). The "ToColor" method thus has been removed from Vector3 and Vector4.

New in Exon SDK 1.1.1 Beta (Aug 19, 2013)

  • Removed all System.Drawing equivalents from Exon (including Color). Exon now uses the System.Drawing structures to better integrate into .NET.
  • Added a new overloaded method to EffectParameter that accepts a System.Drawing.Color struct. Depending on the parameter type (float3 / float4), the color is sent accordingly to the GPU.
  • A corresponding GetValueColor method has also been implemented.
  • Added a new struct: Texel. Useful for scenarios where a 4-byte (RGBA) color is needed.
  • Fixed an exception in AssetImporter.SupportedFileFormats that would be caused when the AssetImporter was not registered in the importer cache.
  • Made the ImporterContext constructor public.
  • Removed the VertexColor structure, as it is simple enough to reimplement and was only used in the NBodyGravity sample, which now defines a "ParticleVertex" that is basically the same as VertexColor.
  • Removed the "Color" member from the InputElementFormat, as the System.Drawing.Color structure contains non-blittable fields. Because of this, the built-in vertex types define their color using a Vector4 and provide a Color property which converts the types appropriately.
  • Removed some unused static fields in the vector, quaternion and matrix structures and changed the accessibility of the public static fields to private, providing a public getter property.
  • Improved the documentation.

New in Exon SDK 1.1.0 Beta (Aug 8, 2013)

  • Patched the assemblies to version 1.1.0
  • Added a new interface: IDynamicBuffer
  • DynamicIndexBuffer and DynamicVertexBuffer implement the IDynamicBuffer interface, and hence provide new methods: Map and Unmap
  • It is now possible to specify a custom DeviceContext, source offset and count in GetData / SetData on the buffers
  • Added a new method in Effect: Apply(EffectPass)
  • Added a class "PrimitiveBatch" to the Examples project which draws user-primitives, lines, triangles and quads
  • Corrected the creation of DepthStencilViews regarding multisampled textures. DepthStencilViews now take multisampled textures into consideration, which now enables native MSAA
  • Improved the documentation, especially the constructors for ALL classes and structures.
  • Added another Plane constructor that accepts a Vector4

New in Exon SDK 1.0.9 Beta (Aug 4, 2013)

  • Fixed an error in the Texture class, which would cause an Exception when the user tried to use GetData on a texture that was not created in-memory or had its bind flags set to anything other than None (0)
  • Removed the NamedValueDictionary and OpaqueDataDictionary classes, and subsequently from the ImporterContext class. Importers should now define their own parameter by using properties (see the built-in importers for example)
  • Added a property to AssetImporter named "SupportedFileFormats", which returns a list of supported file formats for that particular importer
  • Corrected some documentation typos

New in Exon SDK 1.0.8 Beta (Aug 2, 2013)

  • Removed the Model classes and the according importer from Exon.Content
  • The model classes are available as C# source, in the Examples project

New in Exon SDK 1.0.5 Beta (Jun 18, 2013)

  • Added FromFile methods to all texture classes
  • Added a missing assignment in an Effect constructor
  • Updated DirectXTex to Jun 15 release
  • Signed the setup