Blend2D library is not finished at the moment, however, a working prototype is already functional and used for experimenting and benchmarking. The rendering context is nearly finished and the JIT backend already produces very impressive results.
Features expected to be implemented in alpha version on Blend2D:
State-based rendering architecture.
The rendering pipeline is divided into two parts -
|Rendering to PRGB32||Finished||Rendering to buffers that use PRGB32 pixel format.|
|Rendering to XRGB32||Incomplete||
Rendering to buffers that use XRGB32 pixel format.
The engine currently threats that pixel format as PRGB32, will be fixed soon.
|Rendering to A8||Incomplete||Rendering to buffers that use A8 pixel format.|
|Deferred Rendering||Incomplete||Ability to defer all rendering operations until they are flushed.|
|Layered Rendering||Pending||Allows to paint into a layer which can be then composited back to the parent layer.
Requires deferred rendering.
|Rendering Modes / Slots||Finished||
Allows to fill and stroke simple shapes or 2D paths.
The rendering architecture uses the concepts of separated fill and stroke slots. The user can specify fill and stroke styles and parameters independently, including their alpha values.
|Gradient Styles||Finished||High-performance linear, radial, and conical gradients.|
|Pattern Styles||Finished||High-performance pattern blits that use nearest neighbor and bilinear filtering.|
Allows to transform simple shapes, 2d graphics paths, and images.
SIMD optimized 2D vector and raster transformations optimized for various matrix types (translation, scaling, affine). Transforms are integrated with the rendering context, can be used independently and also be associated with gradients and patterns.
|Composition and Blending||Finished||SSE2 optimized Porter&Duff compositing and SVG/CSS blending.|
|Image Rescaling||Finished||High quality and high performance image rescaling by using built-in or custom filters.|
|PNG Decoder||Finished||Ability to read PNG images from
|PNG Decoder Acceleration||Finished||
SSE2 acceleration of PNG reverse filter implementation.
Playground for experimenting with PNG reverse filtering is on kobalicek/simddepng
|JPEG Decoder||Finished||Ability to read JPEG images from
|JPEG Decoder Acceleration||Finished||SSE2 acceleration of IDCT, upsampling, and YCbCr to RGB conversion.|
|Font Management||Pending||Ability to load system fonts and custom points via
|Text Rendering||Pending||Ability to render text/glyph-runs via Blend's context.|
Features expected to be delivered for a public beta testing; focus on asynchronous rendering and proper text support.
|AVX2 Pipeline||Pending||Fully optimized AVX2 rasterizer, compositing, and style fetchers.|
Ability to run an asynchronous worker in different thread while the rendering context is still in use.
Requires deferred rendering, has been implemented in FOG-Framework already.
Ability to run more than one asynchronous worker to improve performance.
This has been already implemented in FOG-Framework, but the approach of division of the image into independent blocks will be different.
|Rendering to RGB24||Pending||Rendering to buffers that use RGB24 pixel format.|
|Non-Rectangular Clipping||Pending||Support for non-rectangular clipping (region-based and/or span-based).|
|Rasterizer Acceleration||Pending||Use the advantage of SSE2 in the analytic rasterizer itself (C++ part).|
|Gradient Dithering||Pending||High-performance dithered gradients that prevent banding artifacts.|
|PNG Encoder||Pending||Ability to write a PNG image into
|JPEG Encoder||Pending||Ability to write a JPEG image into
|Text Layouting||Pending||Ability to layout text by interpreting OTF tables and to convert text into a set of glyph-runs.|
Features expected to be delivered with 1.0 release; focus on image filtering and vector operations.
|Image Filters||Pending||Filters implementing Gaussian blur, generic convolution, erode, dilate, and displacement.|
|Color Filters||Pending||Filters implementing basic color adjustments and color matrix.|
|HSL Blending||Pending||Non-separable HSL blending (PDF specification, cairo/skia compatibility).|
|Render Filters||Pending||Filters generating turbulence and fractal noise.|
|Path Clipping||Pending||Ability to clip the current rendering into a region or graphics path, instead of just AABB.|
|Path Boolean||Pending||Ability to perform boolean operations with two or more graphics paths.|
|Path on Path||Pending||
Ability to deform a path to be on another path, for implementing text-on-path like effects.
The implementation can be based on AGG's path-on-path, however, it flattens all curves to line segments.
|Stroke to Path||Pending||Implement a new stroking algorithm that can stroke quadratic and cubic Bézier curves into curves without flattening them into line segments.|
Features expected to be delivered after the 1.0 release, not a high priority at the moment.
|ARM Pipeline||Pending||Support for 32-bit and 64-bit ARM. Requires AsmJit #74 first.|
|Instruction Scheduling||Pending||Support for reordering and instruction scheduling, this feature has been moved to AsmJit #75.|
|Shaders & MPSL||Pending||Ability to use shader programs written in MPSL for pattern generation, custom blending, and custom transformations and/or deformations.|
Features are sorted by priority, but during the time they can be rescheduled if needed. All features listed have a different complexity; they can take a day or a month to implement. The idea is to make the rendering engine and the logic first, and then add features that are not strictly related to the pipeline, but makes the library more usable. All features that are just optimizations over a baseline functionality can be postponed in case they block a release.