Skip to content

Backlog

Shawn Hargreaves edited this page Jun 22, 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):
  • CanvasAnimatedControl supports event based scenarios (revisit paused behavior)
  • ExampleGallery (8.1 version as well as UAP version) on Win10 reports all examples as leaking
  • Review what happens if CanvasAnimatedControl sees an externally originated DeviceLost event arriving while in the middle of Update or Draw
  • CanvasRenderTarget.Dispose() crash (github #110)
  • Get rid of debug NuGet package
  • Gallery app crashes with screen rotation on Win10 build 10122 (github #88)
  • Sample or docs on how to handle device lost from places other than Draw and CreateResources
  • Enable the D3D debug layer when CanvasDebugLevel is set
  • Scrub TODO comments before V1
  • ConvertDipsToPixels doesn't do the right thing when converting coordinates
  • Add device locks around DXGI calls
  • Doc request: docs for CompositeEffect explain AlphaBlendingMode, and negatives / pixelformats (github #97)
  • Doc request: Canvas.ClearColor vs Canvas.Background (github #105)
  • Docs: TrackAsyncAction docs should explain more about exception handling and lost device handling
  • Project the new Win10 DImage effects
  • ExampleGallery should have example of creating and using a usercontrol that uses canvas (eg a graphing control)
VS 2015 RTM:
  • Update to VS 2015 RTM (once available)
  • When adding a NuGet reference to Win2d - C# IDE fails to reference right metadata
  • In a UAP project, XAML controls cannot be instantiated in designer
  • When we have a VS build with DevDiv:1029064 resolved remove workaround in Win2D.cpp.targets

Release Win2D V1

  • Ensure Win2D types are threadsafe where appropriate
Expose new Win10 features:
  • Support Win10 SoftwareBitmap
  • Support gradient meshes
  • Review Win10 D2D additions to see if there is anything else new we should expose
Get started on potentially lengthy design tasks:
  • Understand VSiS usage and purpose - do we need this in Win2D?
  • Custom imaging effects
  • Should we add higher level effect helpers? (eg. ColorMatrixEffect wrapper to modify alpha)
  • Understand inking - is there anything Win2D should do here?
Controls:
  • Can draw to a virtual surface image source
  • XAML virtual canvas control
  • CanvasControl and CanvasAnimatedControl support scaler to render at non-display resolution
  • CanvasControl.Invalidate overload that takes a region to invalidate (github #98)
  • CanvasCreateResourcesEventArgs should be activatable
  • It's too hard to maintain a rendertarget the same size as a CanvasAnimatedControl
  • CanvasAnimatedControl.Size should be synchronized with the update/draw loop
  • CanvasAnimatedControl doesn't display the proper clear color in the VS XAML designer
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?
Win10 UAP debt:
  • Once DirectXTK ships a UAP NuGet package, enable D3D interop example for UAP
  • Undo Example Gallery video example workaround when TH:2458060 is fixed
  • Once MSFT:2294705 is fixed, remove hardcoded resolution from webcam effect demo in ExampleGallery
  • When OS:2919587 is fixed, verify that thumbnails show up in ExampleGallery
  • Reenable test.managed VerifySendPathTo and ReflectOverAllEffects for UAP when fix for DevDiv:1166515 is flighted
  • 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
  • ResourceTracker.h should use strings.h rather than embedding error message literal
  • Revisit ICanvasBitmapResourceCreationAdapter's interface and implementation
  • GetOrCreate() should fail at compile-time based on whether or not the wrapper needs a device
  • Interop - find some way to make it hard to accidentally call Make(...) rather than fooManager->Create(...)
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
  • Should the text trimming sign have a better default than nothing? (github #100)
  • Expose DWrite built-in ellipsis trimming sign
  • Expose general (non-ellipsis) DWrite trimming signs
  • Get the contours of glyphs
API completeness:
  • Printing
  • Project ColorManagementEffect
  • Project HistogramEffect (special case as it doesn't produce a regular image output)
  • Draw using floating point high precision color values (unlike WinRT color which is only 8 bit per channel)
  • CanvasBitmap.CreateFromDirect3D11Surface should infer alphamode = ignore if the format is B8G8R8X8
  • Support saving CanvasBitmap with pixel formats other than 32bppPBGRA to disk
  • 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
  • Consider adding CanvasStrokeStyle.Hairline (static property to create a hairline stroke style)
  • Work through implications of effects in command lists
Sprites:
  • High performance 2D sprites
  • Support spritesheets (sample code?)
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
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
  • Documentation on loading content outside of CreateResources using CanvasAnimatedControl
  • Documentation about loading content outside of CreateResources should be more visible than in the CreateResources method documentation
  • Scrub docs to specify when a parameter is optional
Boring engineering infrastructure tasks:
  • Verify that our GetResults methods won't return failures that should actually be reported via the completion handler
  • Remove checked in PFX files
  • CameraEffectsSample can not generate thumbnail on machine that doesn't have a camera
Clone this wiki locally