Skip to content

Backlog

Shawn Hargreaves edited this page May 27, 2015 · 62 revisions

To help you understand where Win2D is heading, this backlog lists the work we plan to do and the order in which we plan to do it. Things near the top of the list are well understood and will happen in the next sprint or two, while items further down won't show up until later in the year and are more likely to move around or change as our understanding of them evolves.

If you have feedback on the contents or ordering of this backlog, please create an issue using the "backlog suggestion" label.

Current sprint (actively being worked on as you read this):
  • Multiple controls should share a single CanvasDevice
  • Documentation on loading content outside of CreateResources
  • Rare crash in Microsoft.Graphics.Canvas.CanvasDrawingSession.Dispose
  • github #82 - calling add_CreateResources in designer causes AV in CheckIsOnUIThread
  • Loading Win2D.81.sln into VS 2013 complains about wanting to retarget projects from 8.0 to 8.1
  • CanvasAnimatedControl supports event based scenarios (revisit paused behavior)
  • It is surprising that you cannot create GestureRecognizer for use with CanvasAnimatedControl from the CreateResources handler
  • Documentation (+sample?) for keyboard input with CanvasAnimatedControl
  • Do we have the right default for CanvasTextAntialiasing? Chai says D2D defaults to ClearType, but Grayscale would actually be better.
  • Documentation on how to workaround XAML refcount cycles
  • Handle device lost from places other than Draw and CreateResources
  • UWP version of SimpleSample
  • Add CanvasRenderTarget, CanvasSwapChain, and CanvasImageSource constructors that take a Size
  • CanvasImageBrush cannot set opacity before sourcerect when source is not bitmap
  • DrawImage destrect emulation has artifacts when sourcerect outside original image
Next:
  • CanvasAnimatedControl: it should be easy to process input on another thread
  • Update Example Gallery game of life to use CanvasAnimatedControl
  • ExampleGallery should have example of creating and using a usercontrol that uses canvas (eg a graphing control)
Win10 UAP debt:
  • Project the new Win10 DImage effects
  • Support Win10 SoftwareBitmap
  • Support gradient meshes
  • Review Win10 D2D additions to see if there is anything else new we should expose
  • In a UAP project, XAML controls cannot be instantiated in designer
  • When adding a NuGet reference to Win2d - C# IDE fails to reference right metadata
  • Once DirectXTK ships a UAP NuGet package, enable D3D interop example for UAP
  • Win2D-Debug nuget package with default dependency behavior Lowest can pull in mismatched version of Win2D retail package, create non-compilable project
  • Port CoreWindowExample to UAP
  • Switch docs to have UAP as primary focus
Interop completeness and quality:
  • Polymorphic interop ICanvasImage from CanvasBitmap, CanvasEffect and CanvasCommandList
  • Allow brushes to have polymorphic interop
  • It'd be great if CanvasTextLayout wasn't a device dependent resource (currently it is, but only for interop reasons)
  • Hook up interop for image effect types (convert back and forth between WinRT and underlying D2D types)
  • Evaluate interop behavior of CanvasTextFormat once we have some more experience with using it
  • CanvasTextFormat interop falls down if you modify the dwrite object and then try and set the Win2D properties back to the same value
  • Update docs to indicate interop type when it's not clear
  • Revisit ICanvasBitmapResourceCreationAdapter's interface and implementation
  • GetOrCreate() should fail at compile-time based on whether or not the wrapper needs a device
  • ResourceTracker.h should use strings.h rather than embedding error message literal
  • Interop - find some way to make it hard to accidentally call Make(...) rather than fooManager->Create(...)
Image effects completeness:
  • Project ColorManagementEffect
  • Project HistogramEffect (special case as it doesn't produce a regular image output)
  • Add wrapper around ColorMatrixEffect to invert an image
  • Work through implications of effects in command lists
Controls and drawing:
  • Support Windows.UI.Composition.ImageVisual
  • Drawing sessions are efficiently created and managed (DeviceContext pooling etc.) and do not leak state across different drawing sessions
  • CanvasControl and CanvasAnimatedControl support scaler to render at non-display resolution
  • It should be easier to write robust code that doesn't use CanvasControl
  • Controls should allow a specific CanvasDevice to be selected by the user
  • Easy way to turn on the debug layer when using CanvasControl or CanvasAnimatedControl
  • CanvasCreateResourcesEventArgs should be activatable
CanvasAnimatedControl improvements:
  • CanvasAnimatedControl resizing isn't synchronized with the UI thread
  • CanvasAnimatedControl.Size should be synchronized with the update/draw loop
  • It's too hard to maintain a rendertarget the same size as a CanvasAnimatedControl
  • CanvasAnimatedControl doesn't display the proper clear color in the VS XAML designer
Virtual surfaces:
  • Can draw to a virtual surface image source
  • XAML virtual canvas control
Richer CoreWindow support:
  • ICoreWindow VS template for app developers
  • CoreWindow swap chains: expose overlapping / foreground swap chains
  • Swap chains: expose DXGI_SCALING_ASPECT_RATIO_STRETCH
  • Make CanvasSwapChain.ResizeBuffers work with phone 8.1 CoreWindow
Performance:
  • Read bitmap contents without memory allocation (GetPixelBytes overload that takes an IBuffer)
  • DrawText in perf demo hits TextLayout::SlowPath in DWrite, triples time spent in DoLayout vs. an equivalent Direct2D app
  • Make sure our fast path drawing methods are as fast as possible
  • Investigate optimizing exclusiveto interfaces to use static_cast rather than QI
  • Investigate performance glitch when changing Example Gallery custom fonts to draw everything as a single text layout
  • CanvasBitmap.CopyPixelsFromBitmap should support copying between bitmaps of different devices
  • I want to load DDS files for use with CanvasBitmap
  • Ensure CanvasBitmap GetBytes+SetBytes work with BC* image formats
  • Consider making ImageBrush lazily create underlying D2D brushes
API completeness
  • API completeness: expose SetRenderingControls (buffer precision and tile size)
  • API completeness: expose DrawingStateBlock
  • API completeness: expose text layout GetLineMetrics and GetClusterMetrics
  • API completeness: expose effect configuration properties (D2D1_PROPERTY_CACHED, D2D1_PROPERTY_PRECISION)
  • API completeness: expose effect dirty rect tracking (GetEffectInvalidRectangles, GetEffectRequiredInputRectangles, InvalidateEffectInputRectangle)
  • API completeness: expose caps queries (ID2D1DeviceContext::IsBufferPrecisionSupported+IsDxgiFormatSupported, ID2D1RenderTarget::IsSupported)
  • API completeness: expose Device.RenderingPriority
  • API completeness: expose Device.ClearResources
  • API completeness: expose Device.MaximumTextureMemory
  • API completeness: expose ID2D1RenderTarget::Flush
  • API completeness: expose ID2D1MultiThread
  • Add exposure for ID2D1DeviceContext::SetTextRenderingParams, particularly for text outline mode
  • Ability to clone a CanvasTextFormat
  • CanvasBitmap.CreateFromDirect3D11Surface should infer alphamode = ignore if the format is B8G8R8X8
  • Consider adding CanvasStrokeStyle.Hairline (static property to create a hairline stroke style)
Samples and documentation
  • Add example to ExampleGallery showing how to use a render target to persist contents between frames
  • Document that CopyPixelsFromBitmap cannot copy onto itself
  • Improve docs to make offscreen rendering more discoverable
  • Make it more obvious that you're not supposed to use ClearType on a transparent background
  • DPI Example XAML UI is wrong on WP 8.1 - IntermediateMode.None shows as "DPI" in the UI
Boring engineering infrastructure tasks:
  • Scrub docs to specify when a parameter is optional
  • Deferred drawing errors are reported in a helpful way (use unbatched surface image source?)
  • Hook into the D2D debug layer
  • Find way to share test helpers.h code between test.internal and test.external
  • Rationalize namespaces
  • It is too difficult to run the Windows Store style tests on a fresh box
  • Remove checked in PFX files
  • Automate the windows phone unit tests
  • Merge CsConsumer awesomeness into ExampleGallery, then retire CsConsumer
  • All our runtimeclasses should be tested for interface transitivity
  • Should we enable the D3D debug layer when CanvasDebugLevel is set?
Future ambitions, currently only vaguely understood:
  • Tool (or API?) for simulating device lost
  • Create custom imaging effects
  • High performance 2D sprites
  • Support spritesheets
  • Allow brush mapping mode? (github #49) - Support gradient brush RelativeToBoundingBox co-ordinate mode
  • Draw using floating point high precision color values (unlike WinRT color which is only 8 bit per channel)
  • Support saving CanvasBitmap with pixel formats other than 32bppPBGRA to disk
  • Inking
  • All DWrite functionality is available in WinRT
  • Ensure CanvasTextFormat exposes optical alignment and other IDWriteTextFormat1 functionality
  • CanvasTextFormat doesn't correctly handle UTF-32 trimming delimiters
  • Expose DWrite built-in ellipsis trimming sign
  • Expose general (non-ellipsis) DWrite trimming signs
  • Get the contours of glyphs
  • Drawing offset and scaling factor is available to native code that needs to understand how things are translated
  • Extracting the contents of a command list
  • Support large (greater than GPU HW limit) images
  • Printing
Clone this wiki locally