- Drawing:
- Coordinate System: Pixels, logical pixels, dpi scaling, device-independent pixels, inches, logical inches, dpi logical dpi, points, zoom,
- Color:
- rgb, hsv, hsl, etc
- Colorspaces: Device independent (e.g. sRGB), Deviced dependent (monitor specific)
- Gamma, linear colorspace
- High dynamic range, tone-mapping
- Blending:
- blend modes
- Blending in the right colorspace https://observablehq.com/@mootari/color-blending-is-broken
- Paths: Points, lines, arcs, ellipses, bezier, cubic, splines
- Gradients: Linear, radial, dithering
- Strokes, dashing/dotting, terminators (arrows/ arrow tips), joints (mitres, rounded, butt).
- Repeating pattern along path. Curve text on path.
- Fill. Fill modes (even/odd vs nonzero vs winding direction)
- Anti-aliasing
- Clipping
- Damage tracking
- Filters
- Blurs. Fast, guassian, bokeh
- Shadows. Drop shadows, inner shadows,
- Cameras, Scene compositions
- Soft masks
- Text: layout, shaping, ligature, encoding, justification, wrapping, sub-pixel antialiasing, vertical, stem darkening https://freetype.org/freetype2/docs/hinting/text-rendering-general.html#experimental-stem-darkening-for-the-auto-hinter
- Layout: flutter protocol, flex, row, column, grid, absolute, relative
- Some way of measuring layout, e.g. inline textfield, or dynamic tab indicators (https://twitter.com/reactiive_/status/1638125548156203010?cn=ZmxleGlibGVfcmVjcw%3D%3D&refsrc=email) where the underline size depends on the text size
- Layoring: z-index, blending/opactiy, context menus, multi-window
- Accessibility. see accesskit
- Events
- Event propagation
- Event capturing
- Keyboard, keyboard layout,
- Keyboard shortcuts, "actions", hotkeys, modifier handling, keyboard focus
- Mouse, touch, pointer, gestures
- Non rectangular mouse areas
- Other hardware sensors: accelerometers, thermometers, etc.
- Global focus and focus scope mechanism
- Enabling/disabling mechanism
- Virtualization (i.e. virtual lists)
- Animation:
- Timelines
- Keyframes
- Tweening, easing functions, interpolators
- Springs
- Transitions
- Styling and theming and theme switching.
- Ability to provide own domain-specific styling abstractions.
- A more generalised idea of "disabled state" propagation and style sheets? Contexts? While keeping benefits of functional and staying predictable?
- Debugging tools:
- inspecting,
- profiling,
- hot reloading,
- remote
- Color blindness simulation
- Device simulation
- Update/redraw/damage visualization
- explain layout
- Streams: audio stream, video stream, data stream (plotting or visualization).
- Assets: images etc
- Optimizations: Tree diffing, stable IDs, memoization.
Inspirations:
- PostScript/PDF
- LaTeX, especially PGF/TikZ
- W3C
- Vello
- https://skia.org/
- https://www.youtube.com/watch?v=zVUTZlNCb8U
- https://nical.github.io/posts/a-look-at-pathfinder.html
- https://raphlinus.github.io/rust/graphics/gpu/2020/06/12/sort-middle.html
- https://docs.google.com/presentation/d/16r9HMS4_UBrcF3HUHscAqbSgkrtIwqaihZNwGP2TL_s/edit#slide=id.g1d12bbfe75_0_5
- https://docs.google.com/document/d/17Gq-huAf9q7wA4MRfXwpi_bYLrVeteKcSfAep0Am-wA/edit
- http://nothings.org/gamedev/rasterize/ - talks about the limitation of the descrbied analytic anti aliasing for intersecting polygons giving incorrect coverage results
- http://projects.tuxee.net/cl-vectors/section-the-cl-aa-algorithm
- http://web.archive.org/web/20191015185400/https://people.gnome.org/~mathieu/libart/internals.html
- https://www.cg.tuwien.ac.at/research/publications/2013/Auzinger_2013_NSAA/ https://publik.tuwien.ac.at/files/PubDat_223424.pdf - Non-sampled anti aliasing. Exact non-sampled antialiasing with exact visibility coverage of overlapping polygon primitives. A parallel algorithm for hidden surface elimination.
- https://www.cs.purdue.edu/cgvlab/popescu/Visibility/Additional%20References/Auzinger%202013.pdf exact visibility
- https://raphlinus.github.io/rust/graphics/gpu/2019/05/08/modern-2d.html
- http://kunzhou.net/zjugaps/pathrendering/
- linebender/vello#49
- https://www.eisfunke.com/article/svg-the-good-the-bad-and-the-ugly.html
- https://diagrams.github.io/
- https://en.wikipedia.org/wiki/Metafont
- https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=74244646110625150dcd5e8fe20189af00d45cd9
- https://diglib.eg.org/bitstream/handle/10.2312/PE.VMV.VMV13.223-224/223-224.pdf?sequence=1&isAllowed=y
- https://nical.github.io/posts/lyon-intro.html
- https://nical.github.io/posts/rust-2d-graphics-01.html
- https://nical.github.io/posts/rustfest-paris-01.html
- https://github.com/Chlumsky/msdfgen
- https://developer.download.nvidia.com/assets/gamedev/files/An_Introduction_to_NV_path_rendering.pdf
- https://developer.download.nvidia.com/assets/gamedev/files/Getting_Started_with_NV_path_rendering.pdf
- https://graphics.stanford.edu/courses/cs248-02/scan/scan2.html
- https://w3.impa.br/~diego/projects/GanEtAl14/ - note: avoids conflation artifacts! https://www.youtube.com/watch?v=hV0OM3l_aB0
- https://w3.impa.br/~diego/teaching/2021.0/slides-14.pdf
- https://hhoppe.com/proj/ravg/
- https://digikogu.taltech.ee/et/Download/58beabfb-e4ac-454c-b9e4-d93d92a0fd37 layered antialiasing
- https://www.diva-portal.org/smash/get/diva2:618269/FULLTEXT02 2D Shape Rendering by Distance Fields
- https://www.youtube.com/watch?v=dc-v_QeBMak Converting stroked primitives to filled primitives
- https://www.microsoft.com/en-us/research/wp-content/uploads/2005/01/p1000-loop.pdf antialiased implicit curves
Platform / hardware:
- frame pacing, https://www.youtube.com/watch?v=n0zT8YSSFzw&ab_channel=RebootDevelop
- hardware overlays
- beam chasing
- latency
- stutters, smoothness
- power consumption
- resizing
Fun ideas for a fun, over-the-top demo app:
- Thicc bubbly colourful title font with outline, highlights and shadows
- purple background animated with text moving diagonally like that in the Beetle Ju menu screen
- bubbly ripple effect buttons
- highlight from cursor position simulating reflection
- tooltips with blurred backgrounds and drop shadows and animated entry/exit transitions (opacity and geometry warping)
- eye catching text animations: e.g. momentarily enlarge number text when it changes like in games, and animate an alternating/flashing colour animation with glow/bloom during tour modes.
- over the top page transitions that manipulate all the geometry, like gravity, etc.
- Showcase momentum scrolling, gestures, etc.
Learning exercise task list:
- Fill solid background colour
- Fill single triangle without antialiasing using scanline, no tiling.
- Fill single triangle with exact-area antialiasing, no tiling
- Extend to two triangles using hidden surface removal
- Extend to semi-transparency
- Extend to N triangles
- Add blur convolution - gaussian and bokeh