Release: * Engine + Benchmark harness + Reuse points, pack "nodraw" in high bit of stroke id (probably have at least one more bit, so up to 4 flag configurations) + Draw dynamic data (strokes in progress) + Webassembly for core LOD generation + Webassembly for final buffers + Do not copy memory to wasm, instead use wasm memory to store data in the first place + SIMD for LOD? + Multithreading for LOD + Textured quads (pictures, code already written in older version + Resize and move pictures (draw handles) - Z-prepass fringe bug (also, when do we enable the prepass?) - Frame-independent lerp where applicable + Bugs + GC stalls!!! + Stroke previews get connected when drawn without panning on touch devices + Redraw HTML (cursors) on local canvas moves + New strokes dissapear on the HMH desk + Undo history of moving and scaling images seems messed up - Nothing get's drawn if we enable snapping and draw a curve where first and last point match - Weird clipping on HMH desk full zoomout after running "benchmark" - Stuck in color picker mode when mouse leaves screen - Debug * Debug view for BVH - Restore ability to limit event range * Listeners/events/multiplayer + Fix multiplayer LUL + Fix blinking own stroke inbetween SYN->server and SYN->client + Drag with mouse button 3 + Investigate skipped inputs on mobile (panning, zooming) [Events were not actually getting skipped. The stroke previews were just not being drawn] + Smooth zoom + Infinite background pattern + Be able to have multiple "current" strokes per player. In case of bad internet this can happen! - Do NOT use session id as player id LUL - Save events to indexeddb (as some kind of a blob), restore on reconnect and page reload - Handle out of space - Local prediction for tools! - Immediately commit a stroke to the canvas, change order if earlier strokes arrive - Show my own image immediately, show placeholders while images are loading (add bitmap size to event) - undo immediately, this one can not arrive out of order, because noone else is going to undo MY actions * Missing features I do not consider bonus + Player pointers + Pretty player pointers + Player list + Follow player + Color picker (or at the very least an Open Color color pallete) + EYE DROPPER! + Dynamic svg cursor to represent the brush + Eraser * Line drawing + Live preview ~ Alignment (horizontal, vertical, diagonal, etc) [kinda gets covered by the snapping? question mark?] + Undo + Undo for eraser + Undo for images (add, move, scale) - Redo + Snapping to grid - Snapping to other points? - Color picker should work for ruler - Show previous color in color picker preview - Stick picker preview to cursor * Polish + Use typedvector where appropriate - Show what's happening while the desk is loading (downloading, processing, uploading to gpu) - Settings panel for config values (including the setting for "offline mode") - Set up VAOs - We are calling "geometry_prepare_stroke" twice for some reason - Replace "geometry_add_dummy_stroke" with something not [so] cursed - Automatically extract locations from shaders (see nitka project for code examples) - Presentation / "marketing" - Title (InfiNotes? MegaDesk?) - Icon - Product page (github readme, demo videos) Bonus: * Handle pressure + Add pressure data to quads + Account for pressure in quad/bbox calc + Adjust curve simplification to include pressure info + Migrate old non-pressure desks - Check out e.pressure on touch devices - Send pressure in PREDRAW event - Stroke smoothing https://github.com/xournalpp/xournalpp/issues/2320 https://www.digital-epigraphy.com/tutorials/the-most-useful-new-features-of-photoshop-cc-using-brush-stroke-smoothing-for-digital-inking https://stackoverflow.com/questions/20618804/how-to-smooth-a-curve-for-a-dataset - Curve modification - Select curves (with a lasso?) - Move whole curve - Move single point - Move multiple points * Customizable background + Dots pattern + Grid pattern - Menu option - Offline mode - Only one user - No server, everything applied immediately - Allow export to file - Save to browser storage (probaby indexed db + recent events in localstorage) Bonus-bonus: - Actually infinite canvas (replace floats with something, some kind of fixed point scheme? chunks? multilevel scheme?)