Afterwarp Framework v3.0.0, dated December 20, 2023 Copyright (c) 2015 - 2023 Dr. Yuriy Kotsarenko http://afterwarp.io ------------------------------------------------------------------------------------------------------------- The following are changes from version 2.0.1+ (2022-06-24) to version 3.0.1 (2023-12-20): - Added high-performance binary on Windows built with clang toolset using AVX2 instruction set. This requires Intel Haswell (first appeared back in 2013, which was 10 years ago) or later processor. All existing Intel and AMD CPUs support this instruction set. For older or cheap "Celeron" processors, an alternative "SSE2" build is also provided. - Refactoring of Pascal high-level wrapper to use strict validation and exceptions for error handling. Also general refactoring of basic and vector types. - Ported missing Pascal examples to match those of C/C++, similarly to C#. - Added PathBuilder implementation in Pascal and C#, to simplify creation of paths. - Fixed all bugs and issues that were found during manual and automated testing, along with all issues that were previously reported. - Refactoring to add more information in C headers, by using arrays when appropriate and even source-code annotation language (SAL), which helps HeaverConv to produce accurate Pascal and C# headers. - Refactoring of ObjectModels to use unique IDs for object identification. Significant performance improvements when accessing objects by their name or payload. - Improved clipboard copy/pase in Application module under all backends. - Added Skewed Quad option for all supported languages. - Added PathBroker and CanvasBuffer, to pre-built paths into renderable 2D meshes, which can greatly increase rendering performance of very large and complex paths. - Added option to change application icons at runtime under all backends when using Application module. - Added support for Variable Refresh Rate (VRR) displays under Direct3D. - Switched to use new flip DXGI model under Direct3D. - Added an optional (will be available on per customer request) alternative implementation of raw mouse input on Windows using DirectInput, which has better VM compatibility. - Added raw mouse input support on Windows and X11, which allows precise low-latency first-person view camera movement. - Added support for changing mouse cursor when using Application module. - Added FreeMovingCamera and integration of this implementation with ObjectCamera. New camera module is called ActorCamera and is able to function both as first-person view camera for precise navigation and world exploration, and third-person view camera for object manipulation. - Refactoring to be able to change TextureCabinet attributes at any time. - Added Frosted Glass effect both for new accurate OIT (Glassy) and previous approximate "fast" (GlassyFast). - Added option in Gaussian Blur to use hardware filtering, doubling the performance; maximum fixed size kernel has increased to 17 (hardware) and 19 respectively. Variable-sized kernel size also takes advantage of hardware filtering. Added option to render to a specific sub-rectangle, thereby avoiding extra copying. - Added support for rendering on a particular layers and/or mipmaps. - Removed deprecated VSM shadows in favor of ESM/EVSM variants. - Additional work to support better UAV and SRV binding, along with RWTyped and RWStructuredBuffer buffers, under Direct3D. - Refactoring to improve real-time performance in clustered lighting in all backends. - Added support for new OIT technique in "SpatialFog" module and exposed OIT metrics for memory fine-tuning. - Added accurate single-pass Order-Independent Transparency (OIT) real-time rendering technique. - Added new general-purpose Memory Barrier function in the device. - Added support for "staging" and "compute" buffers in the low-level framework. - Added support for rendering volumetric 3D text, including curved text. Also updated vector-based 2D text functions to render curved text. - Added support for "extrusion", a technique to produce a 3D mesh out of a 2D vector-based path. This also supports gradient vertex colors and texturing. - Added support for vector-based 2D text that is rendered directly as curves and thus can be arbitrarily scaled and transformed without loosing quality. - Added support for rendering Bezier curves using adaptive curve sub-division and following triangulation. - Added mesh triangulation module (based on research article recently published) that can handle polygon hierarchies with multiple holes. - Added option for some Afterwarp configuration options to be overridden through registry. - Added SelectionHighlight module to render a glowy-like colored selection around specific 3D objects, which can be seen even if object is partially or fully occluded. - Added code to generate a Geosphere mesh. - Bug-fixes and performance improvements in internal Wavefront OBJ format loader, especially under circumstances, where a certain data string has line length bigger than internal buffer (certain OBJ files may have a single line of data occupying 1000 characters or more). - Added official C# API headers, high-level wrappers, examples and documentation. - An internal "HeaderConv" tool has been re-designed and re-written from scratch now in C++ using internal RTL framework, capable of fully parsing C and even some C++ code. In addition to Pascal output, support for C# has been added, which greatly reduces work time on updating C# API. - Added option to support Parallax Mapping even in Single-Pass rendering. - Internal refactoring related to structure hashing, improving performance in performance critical areas. ------------------------------------------------------------------------------------------------------------- Afterwarp version 2.0.1+ with limited availability, dated June 24, 2022. The following are changes from version 2.0.1 (2021-12-10) to version 2.0.1+ (2022-06-24): - Rework of ObjectCamera to support either Euler angles or quaternion-based rotation, with an option to switch between the two on-the-fly. Exposed math functions for converting between quaternion and Euler angles. - Added support for Ambient Occlusion mapping when using Parallax Mapping technique. The ambient map is read from alpha-channel of normal map to conserve space and simplify design. - Added option to set shadow casting atlas size to zero so that non-shared shadow map texture from caster can be used directly, thus marginally improving performance under a very simple scene configuration. - Fixed issue with areas outside of shadow caster's view when using zero padding in atlas, and caster size matching the size of atlas. - Added option to use per-sample shading (by specifying STATE_PER_SAMPLE_SHADING) in Canvas and Scene when running under Direct3D backend. Note: this option must be set prior to SceneBegin call as if affects which program is selected during rendering; for Canvas, for this option to be considered, a prior CanvasReset call must be issued. - Fixed issue in canvas and grapher modules when running on Windows 11 with OpenGL backend and with AMD Radeon RX 5700 graphics card. ------------------------------------------------------------------------------------------------------------- Afterwarp version 2.0.1, released on December 10, 2021. The following are changes from version 2.0.0 (2021-04-12) to version 2.0.1 (2021-12-10): - Normal Mapping (also known as Bump-Mapping) and Parallax Mapping features have been added. Added ParallaxMapping sample for C/C++ and Pascal bindings. - Rewritten Timer module, which now works in two different modes simultaneously, by providing tokens for fixed-rate processing (as in previous Timer module, just need to loop through extracted tokens manually and execute fixed-rate processing code) and time-sliced processing, to ensure specific frame rate. - Added Invert function to Surface module. - Further refactoring to get rid of remaining STL containers and dependencies, relying more on internal RTL with stronger focus on industrial environments that require high reliability. The framework is now free of STL dependencies and can be compiled without exceptions. SEH exceptions are still used for Windows builds for OpenGL DLL lazy loading. - Added support for Tessellation shaders under both Direct3D and OpenGL backends. - Added additional "baseInstance" parameter for instanced rendering calls in Program module. - Refactoring to use a different internal storage for Direct3D shader binaries, which allows faster deployment, which slightly decreased final binary size. At this time, Direct3D shaders occupy 16.88 MiB of space inside Afterwarp.DLL, which constitutes 91% of total library size. - Fixed object selection, object visibility tests, light culling and camera zoom when using right-handed perspective matrix. - Fixed ambient occlusion when using right-handed view and projection matrices. - Fixed V texture coordinate during OBJ file loading. - Added workaround for OpenGL backend when running inside VMWare 16.2.0 on Linux host and Windows 10 client. - Added workaround for OpenGL backend when running inside VMWare Linux client. - Fixed issues with Ctrl, Alt and AltGr keys on Windows under certain circumstances. - Added frustum volume geometry primitive generation for its visualization. - Refactoring of internal XML implementation to get rid of STL dependency. Minor fixes in Voxelize tool. - Improved Ambient Occlusion to use less shader instructions, thus improving slightly the performance. - Fixed issues with double click in GTK-based applications. - Improved management for large near/far planes when calculating frustum for object visibility tests.