Martin Fouilleul
faf024a63a
[mtl canvas] reorganizing the loop in render kernel to allow different commands
2023-03-22 16:40:43 +01:00
Martin Fouilleul
e9ecd9d521
[mtl canvas] Fix artifacts on tiger that was due to epsilon comparison for cubics equation in draw kernel. Removed that (now do <= 0), but then we need to weed out false negatives for solid triangles. So we compute if the triangle is solid in the triangle kernel and store it in the mg_triangle_data struct for now.
2023-03-22 15:02:04 +01:00
Martin Fouilleul
b0be21795e
[mtl canvas] prevent tiles entirely covered by textured shapes to be treated as solid (as the texture could be non-uniformly transparent)
2023-03-22 12:02:13 +01:00
Martin Fouilleul
26f669f3c1
[mtl canvas] adding a color command for fully covered, solid color tiles. This is not much of an improvement for now because the tile array just got bigger, but maybe we can use the same scheme and compact it into an int
2023-03-22 10:46:56 +01:00
Martin Fouilleul
90b00979ed
[mtl canvas] detecting full covered/uncovered tiles
2023-03-22 09:23:22 +01:00
Martin Fouilleul
0d8bc824a2
[mtl canvas] bucket triangles into per-shape tile queues, then gather into tile arrays. This somewhat improves perf for perf_text test and avoids an awful degradation due to sorting in tiger test (tiger now runs at ~20fps, which is still much slower than it could be, but the triangle coverage method we're using just incurs too much cross product computations...)
2023-03-21 10:22:37 +01:00
Martin Fouilleul
a4ef58f2d8
[mtl canvas] Tiling per rectangles into per-shape tile queues (linked lists of triangle indices) to avoid sorting
2023-03-20 16:46:12 +01:00
Martin Fouilleul
11113f597c
[mtl canvas, exp] try tiling per tile and avoiding sorting pass (worse on simple shapes and text, but degrades slower with complex scenes (eg tiger). Not great though)
2023-03-20 10:08:17 +01:00
Martin Fouilleul
92f4909d63
[mtl canvas] testing the metal canvas rendering the ghostscript tiger, and acknowledging it's painfully slow
2023-03-18 14:35:51 +01:00
Martin Fouilleul
1d36088302
[mtl canvas] render to an intermediate texture and acquire the drawable and blit to it only at the end of all compute passes
2023-03-16 10:25:56 +01:00
Martin Fouilleul
f14f397c99
[mtl surface] don't re-acquire drawable if there's already a valid one acquired
2023-03-15 18:51:50 +01:00
Martin Fouilleul
bd8e31c535
[mtl canvas] triple buffer vertex/index/shape buffers
2023-03-15 17:48:39 +01:00
Martin Fouilleul
0c74e997ae
[mtl surface] fix crash on exit when metal GPU frame capture is enabled. Apparently, if we release resources (on exit) before all GPU work is completed, libMetalCapture crashes on bad access. To work around that, in mg_mtl_surface_destroy(), we enqueue a last (empty) command buffer and call waitUntilCompleted on it, to ensure all previous command buffers are also completed
2023-03-15 13:02:18 +01:00
Martin Fouilleul
5ce53001e2
[canvas, mtl] clear resets command count and stores clear color. Ccanvas' backend begin proc now takes a clearColor parameter and clears final surface to that color before drawing any batch
2023-03-15 11:09:42 +01:00
Martin Fouilleul
98bac9744f
[mtl canvas] rearranged bounding box computations in tiling shader
2023-03-15 10:19:04 +01:00
Martin Fouilleul
f2cb96826c
[mtl canvas] fix bias computation for clockwise triangles
2023-03-15 10:04:51 +01:00
Martin Fouilleul
5c1a220f1f
[mtl canvas] don't reorder point to make clockwise triangles. Instead, store triangle orientation in triangle struct and multiply orientation in raster test
2023-03-14 15:08:39 +01:00
Martin Fouilleul
221fcbeb6b
[mtl canvas] store uv transform and color in triangle data (don't pass vertex or shape buffer to draw kernel)
2023-03-14 12:20:39 +01:00
Martin Fouilleul
c9a5b3d52d
[mtl canvas] rearranged triangle data for better packing
2023-03-14 09:42:17 +01:00
Martin Fouilleul
1b3583cc6d
[mtl canvas] remove box array, cache box in triangle struct
2023-03-14 09:42:12 +01:00
Martin Fouilleul
6536f4ac64
[mtl canvas] fused boxing and tiling, cache cubics in triangle data
2023-03-14 09:40:11 +01:00
Martin Fouilleul
ee4a667258
[mtl canvas] trying fused boxing/tiling passes
2023-03-14 09:25:20 +01:00
Martin Fouilleul
fd5a4d4cd8
[wip] trying to simplify metal shader
2023-03-14 09:25:09 +01:00
Martin Fouilleul
cee294d8ad
[mtl canvas] fixed setBuffer that was being called on the wrong encoder
2023-03-14 09:20:51 +01:00
Martin Fouilleul
e9d64166a3
[mtl canvas] fixed bug where tiles left and below screen where all bucketed to the first row/column (same as gl version, see 4a8c77f02
)
2023-03-13 16:53:12 +01:00
Martin Fouilleul
6da2494c81
[canvas example] fixed movement
2023-03-13 15:53:35 +01:00
Martin Fouilleul
13f025ab21
[mtl canvas] convert triangle rasterization to fixed point
2023-03-13 15:18:18 +01:00
Martin Fouilleul
7c58145524
[mtl surface] Allow setting swap interval to 0. Note however that vsync needs to be turned off at the OS level for that to work smoothly. Otherwise, we get jittery frame rate with stalls when we run off of drawables (I suppose? should investigate some more).
...
This can be done with Quart Debugger in Additional Tools for XCode.
2023-03-13 12:21:33 +01:00
Martin Fouilleul
716bdc53d4
[ui] draw drop-down button with correct roundness
2023-03-13 10:53:21 +01:00
Martin Fouilleul
5455c2a52b
[ui] Allow styling overlay boxes (e.g. menu and drop-down list panels) locally.
...
- Added an UI_FLAG_OVERLAY flag. When we make a box with that flag set, it is added the an overlayList in the ui context.
- After styling and static size pass, we reparent boxes in the overlayList to an overlay node just below the root node.
- Layout and drawing works uniformly on the whole tree. Overlay boxes get drawn last and steal mouse hover from boxes underneath them.
2023-03-13 10:26:39 +01:00
Martin Fouilleul
9e41d2b6fc
[ui] first version of select popup menu
2023-03-12 19:06:09 +01:00
Martin Fouilleul
09951afa53
[ui] added ui_checkbox() helper
2023-03-11 19:06:05 +01:00
Martin Fouilleul
b907578eb4
Fix clipping one pixel short
2023-03-11 16:55:30 +01:00
Martin Fouilleul
009fe8e3e8
[ui, styling]Fix order of adding after rules to running list in rule-matching pass
2023-03-11 16:43:58 +01:00
Martin Fouilleul
bf92a6f307
Merge branch 'master' of ssh://git.forkingpaths.dev/martinfouilleul/milepost
2023-03-11 16:27:52 +01:00
Martin Fouilleul
da7e0f402b
[ui, layout] Add UI_FLAG_ALLOW_OVERFLOW_X/Y
2023-03-11 16:27:21 +01:00
martinfouilleul
137a75540b
[win32] implemented string clipboard functions
2023-03-09 19:44:55 +01:00
martinfouilleul
359e08b0a8
[ui] set text box cursor to the same color as text
2023-03-09 18:09:04 +01:00
martinfouilleul
cae8666561
[ui, win32] Fixed char input and modifier keys
2023-03-09 18:03:27 +01:00
martinfouilleul
9accf4c666
[ui, win32]
...
- change coord system of gl canvas to match ui
- change mouse coordinate system to match ui
- fix mouse delta
2023-03-09 17:38:41 +01:00
Martin Fouilleul
c7d5cf113e
[ui] reintroducing tooltip
2023-03-09 16:08:42 +01:00
Martin Fouilleul
c362751c23
[ui] menus widgets first draft
2023-03-09 16:02:46 +01:00
Martin Fouilleul
feca7d1026
[ui] moved ui_panel() into ui.c
2023-03-09 14:27:46 +01:00
Martin Fouilleul
d2f4f5083b
[ui, layout] solving layout constraints
2023-03-09 13:13:13 +01:00
Martin Fouilleul
56874c99d6
[ui, layout] layout constraint solving, first draft
2023-03-09 12:36:38 +01:00
Martin Fouilleul
a569454df5
[ui, wip] scrolling / scrolling panels
2023-03-08 19:53:28 +01:00
Martin Fouilleul
873d4ab6db
[ui, canvas]
...
- Allow querying the size of the canvas's underlying surface
- Set size of ui root to canvas' size
2023-03-08 15:03:35 +01:00
Martin Fouilleul
1212d714d5
[platform/canvas]
...
- Changed canvas coordinate system to match UI coord system (origin at top left, y axis down)
- Changed mouse coordinate system to match UI and canvas
- No need to pass width/height to ui_begin_frame() anymore
2023-03-08 13:19:18 +01:00
Martin Fouilleul
7b2ef080e8
[util, formatting] shorten list loop names to for_list_xxx
2023-03-08 12:03:33 +01:00
Martin Fouilleul
3682605f97
[util, formatting] changed list api to snakecase for consistency with the rest of the codebase
2023-03-08 12:00:10 +01:00