Skip to content

Backlog

ClAndrew edited this page Apr 30, 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.

Upcoming, after Build:
  • Publish samples separately from the product source (eg. MSDN Code Gallery?)
  • Multiple controls should share a single CanvasDevice
  • ExampleGallery should have example of creating and using a usercontrol that uses canvas (eg a graphing control)
  • 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
  • Should we enable the D3D debug layer when CanvasDebugLevel is set?
  • CanvasAnimatedControl should skip Draw if the window is invisible (eg. app minimized)
  • Should StepTimer sleep or busy wait, if there are a lot of ticks left?
  • CanvasBitmap load/save functions (and anything else that directly uses D3D immediate context) need D3D level device access synchronisation
  • CanvasImageBrush cannot set opacity before sourcerect when source is not bitmap
  • DrawImage destrect emulation has artifacts when sourcerect outside original image
  • In a UAP project, XAML controls cannot be instantiated in designer
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
CanvasAnimatedControl improvements:
  • Revisit design of having input events not fire, or RunGameLoopThreadAsync work not run, if CanvasAnimatedControl is paused
  • Update Example Gallery game of life to use CanvasAnimatedControl
  • CanvasAnimatedControl supports keyboard input
  • CanvasAnimatedControl supports scaler to render at non-display resolution
  • CanvasAnimatedControl resizing isn't synchronized with the UI thread
  • CanvasAnimatedControl.Size should be synchronized with the update/draw loop
  • CanvasAnimatedControl doesn't display the proper clear color in the VS XAML designer
Controls and drawing:
  • Drawing sessions are efficiently created and managed (DeviceContext pooling etc.) and do not leak state across different drawing sessions
  • It should be easier to write robust code that doesn't use CanvasControl
  • CanvasCreateResourcesEventArgs should be activatable
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)
  • 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
  • Consider adding CanvasStrokeStyle.Hairline (static property to create a hairline stroke style)
Samples and documentation
  • We should consider renaming the top-level 'tests' folder to 'demos' (or merging with 'samples'?)
  • Add D3D interop sample (using DirectXTK?) to Example Gallery
  • Add example to ExampleGallery showing how to use a render target to persist contents between frames
  • Blog post showing recommended way of creating a UserControl
  • Document that CopyPixelsFromBitmap cannot copy onto itself
  • 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
  • Example Gallery thumbnail generator should use RunOnGameLoopThreadAsync
Boring engineering infrastructure tasks:
  • Consume Win2D via nuget packages within Win2D.sln
  • 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
  • Can't build a Win2D C# Windows Runtime Component: "Windows.Foundation.Point was found in multiple referenced winmd files"
Future ambitions, currently only vaguely understood:
  • 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
  • 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