Skip to content

Backlog

Shawn Hargreaves edited this page Aug 17, 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):
  • Virtual image source example gallery demo icon is illegible - white text over white icon
  • VIS demo layout needs retweaking for small mobile screens
  • XAML virtual canvas control
  • CanvasControl.Invalidate overload that takes a region to invalidate (github #98)
  • Validate virtual image source multithreaded rendering design
  • CanvasControl and CanvasAnimatedControl support scaler to render at non-display resolution
  • CanvasCreateResourcesEventArgs should be activatable
  • CanvasBitmap.CreateFromDirect3D11Surface should infer alphamode = ignore if the format is B8G8R8X8
  • New interop system for Win2D <-> native D2D
  • Polymorphic interop ICanvasImage from CanvasBitmap, CanvasEffect and CanvasCommandList
  • Allow brushes to have polymorphic interop
Soon:
  • Ensure Win2D types are threadsafe where appropriate
API completeness:
  • Expose ID2D1RenderTarget::Flush and ID2D1Device2::FlushDeviceContexts
  • Expose ID2D1MultiThread
  • Draw using floating point high precision color values (unlike WinRT color which is only 8 bit per channel)
  • Custom imaging effects
  • Printing
  • Support ID2D1ImageSource
  • Expose caps queries (ID2D1DeviceContext::IsBufferPrecisionSupported+IsDxgiFormatSupported, ID2D1RenderTarget::IsSupported)
  • Expose SetRenderingControls (buffer precision and tile size)
  • Expose effect configuration properties (D2D1_PROPERTY_CACHED, D2D1_PROPERTY_PRECISION)
  • Expose effect dirty rect tracking (GetEffectInvalidRectangles, GetEffectRequiredInputRectangles, InvalidateEffectInputRectangle)
  • Expose Device.ClearResources
  • Expose Device.MaximumTextureMemory
  • Expose Device.RenderingPriority
  • Project LookupTable3DEffect
  • Project HistogramEffect (special case as it doesn't produce a regular image output)
  • Project ColorManagementEffect
  • Support saving CanvasBitmap with pixel formats other than 32bppPBGRA to disk
Interop completeness and quality:
  • Hook up interop for image effect types (convert back and forth between WinRT and underlying D2D types)
  • Update docs to indicate interop type when it's not clear
  • ResourceTracker.h should use strings.h rather than embedding error message literal
  • Revisit ICanvasBitmapResourceCreationAdapter's interface and implementation
  • Interop - find some way to make it hard to accidentally call Make(...) rather than fooManager->Create(...)
  • It'd be great if CanvasTextLayout wasn't a device dependent resource (currently it is, but only for interop reasons)
  • 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
  • GetOrCreate() should fail at compile-time based on whether or not the wrapper needs a device
Richer text support:
  • Investigate all DWrite functionality and decide what to expose in Win2D
  • 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
  • Should the text trimming sign have a better default than nothing? (github #100)
  • Get the contours of glyphs
  • Sample or documentation showing how to calculate the default line spacing (github #111)
  • Expose text layout GetLineMetrics and GetClusterMetrics
  • Expose ID2D1DeviceContext::SetTextRenderingParams, particularly for text outline mode
Sprites:
  • High performance 2D sprites
  • Support spritesheets (sample code?)
Support Windows.UI.Composition:
  • Draw to Windows.UI.Composition swapchains
  • Draw to Windows.UI.Composition image visuals
  • Higher level controls (eg. game loop) to simplify using Win2D + composition?
Repay debts:
  • Switch to RTM nuget.exe v3 (once released)
  • Synchronization when drying ink to swapchain
  • Remove workaround for intellisense xml (devdiv:1200085)
  • Remove the Workaround1200257 assembly when DevDiv:1200257 is fixed
  • Switch docs to have UAP as primary focus
Controls:
  • CanvasAnimatedControl.Size should be synchronized with the update/draw loop
  • CanvasAnimatedControl doesn't display the proper clear color in the VS XAML designer
  • XAML Loaded vs. Unloaded events aren't reliably sequenced
Developer conveniences:
  • CanvasImageSource.CreateDrawingSession on non-UI thread generates unhelpful error
  • Poor exception message when canvas size is too large (github #122)
  • It's too hard to maintain a rendertarget the same size as a CanvasAnimatedControl
  • Ability to clone a CanvasTextFormat
  • Consider adding CanvasStrokeStyle.Hairline (static property to create a hairline stroke style)
Docs & samples:
  • Doc describing potential sampling issues when drawing abutting rects?
  • Video demo in ExampleGallery crashes if device doesn't have internet connection
  • Doc for TargetElapsedTime leaves you asking what units it's in
  • Camera effects demo layout needs to be tweak for wide screens (the bottom of the image is cropped otherwise)
  • exportsample should put RuntimeDirective.rd.xml only into the projects that reference it
  • exportsample should not put UAP-specific TargetPlatformVersion style properties into non-UAP projects
Performance:
  • Do profiling!
  • Instrumentation to enable performance investigations (eg d3d debug markers or etw)
  • Read bitmap contents without memory allocation (GetPixelBytes overload that takes an IBuffer)
  • Support DXT block compressed data in Win2D
  • DrawText in perf demo hits TextLayout::SlowPath in DWrite, triples time spent in DoLayout vs. an equivalent Direct2D app
  • CanvasBitmap.CopyPixelsFromBitmap should support copying between bitmaps of different devices
  • Investigate performance glitch when changing Example Gallery custom fonts to draw everything as a single text layout
  • Consider making ImageBrush lazily create underlying D2D brushes
Boring engineering infrastructure tasks:
  • Verify that our GetResults methods won't return failures that should actually be reported via the completion handler
  • Use the RaiseException trick to give the game loop thread a human readable name
  • Remove checked in PFX files

Clone this wiki locally