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
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
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
bd8e31c535
[mtl canvas] triple buffer vertex/index/shape buffers
2023-03-15 17:48:39 +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
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
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
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
Martin Fouilleul
bfc19665ce
[util]
...
- shorten str8_lit macro to STR8
- use strlen() in STR8 and remove str8_from_cstring(). Usage with string literal seem to always be optimized by compile-time constant, so there's little need for a confusing macro that only works with literals and breaks with pointers.
- replaced str8_unbox() with str8_lp/str8_ip
2023-03-08 11:40:40 +01:00
Martin Fouilleul
f07f56948d
[ui] shorten ui styling api names
2023-03-08 11:13:32 +01:00
Martin Fouilleul
8b06cb31ba
[ui, styling]
...
- Put all styling calls _before_ the styled box.
- Renamed full pattern matching API to ui_style_match_next_before/after
- Helper to style next box only (ui_style_next())
2023-03-08 11:09:28 +01:00
Martin Fouilleul
c551135933
[ui] remove the need to pass a default style to ui_frame()
2023-03-07 19:44:22 +01:00
Martin Fouilleul
2466241b1e
[ui, styling] finished first pass on core layout/styling system
2023-03-07 19:27:01 +01:00
Martin Fouilleul
8032c7340b
[ui, styling] revisiting layout/sizing
2023-03-07 19:06:04 +01:00
Martin Fouilleul
7b10a99a8c
[ui, styling] First draft of rule-based styling to replace old stack-based system
2023-03-06 19:33:01 +01:00
Martin Fouilleul
b52a35c753
[ui, textbox] Fixed selection background rectangle
2023-03-05 17:03:00 +01:00
Martin Fouilleul
592f4cdecd
end of line renormalization
2023-03-05 16:05:43 +01:00
Martin Fouilleul
4359bdaa3c
[ui, textbox] position cursor at mouse position / extend selection on shift + mouse press or drag
2023-03-05 15:59:57 +01:00
Martin Fouilleul
731e5b1ae8
[surface] pull mp_layer into the generic mg_surface_data struct, out of each backend-specific implementation
2023-03-03 11:50:12 +01:00
martinfouilleul
ac00cc9def
[wip, win32 surface sharing] simplifyin the surface sharing API
2023-03-02 19:21:39 +01:00
martinfouilleul
ee87976429
[win32 surface sharing] hacky proof of concept
2023-03-02 18:24:15 +01:00
martinfouilleul
3ada8ece9a
[wip, win32 surface sharing] in surface sharing example, terminate child process when parent exits
2023-03-02 12:23:10 +01:00
martinfouilleul
e58ae3ef52
[surface sharing] first draft for win32 using window reparenting
2023-03-02 09:54:12 +01:00
martinfouilleul
2560ddd5b4
[win32] adding simple IPC to test delegated surface
2023-03-01 18:58:59 +01:00
Martin Fouilleul
43d413dbbc
[surface] graphics surface sharing API + osx implementation
2023-03-01 16:15:36 +01:00
Martin Fouilleul
3615775168
[canvas] decompose image atlas API into simple rect atlas API + image atlas helpers. This avoids creating a bunch of new types/handles, and exposes the underlying image/sourceRegion so that user code can freely use these for more complex scenarios (eg drawing only a sub-region of an atlased image, or using an atlas image for arbitrary path filling)
2023-02-28 16:54:39 +01:00
Martin Fouilleul
d4bceba7e9
[canvas] basic image atlas API
2023-02-28 13:16:36 +01:00
martinfouilleul
ac6a5db209
[canvas, gl] Checked batching/transparency
2023-02-27 19:39:26 +01:00
martinfouilleul
8f834fa1a5
[wip, canvas, gl] implementing basic image API
2023-02-27 19:25:41 +01:00
Martin Fouilleul
5e5f8ac5e7
adding image test/example
2023-02-27 15:43:41 +01:00
Martin Fouilleul
9ed630fc55
[canvas]
...
- Clear final surface to clear color, and enable blending layers onto it
- Fixed Batching bug where we were writing to vertex/shape buffers while the previous batch is using them
- Fixed bug where uvTransform uses transform of next shape instead of that of shape being finalized
2023-02-27 11:56:04 +01:00
Martin Fouilleul
b24de5d969
[canvas] Allow setting image source region
2023-02-25 12:59:49 +01:00
Martin Fouilleul
50569a1427
Allow setting texture on arbitrary path fills
2023-02-24 23:06:39 +01:00
Martin Fouilleul
4333ed02b0
[canvas] remove image draw commands, replace with rect/rounded rects + image source
2023-02-24 22:59:33 +01:00
Martin Fouilleul
1b62ec568c
[canvas, mtl backend] Handle image rotation
2023-02-24 20:40:16 +01:00
Martin Fouilleul
fd4c4e7be3
[canvas] simple image API
2023-02-24 12:01:00 +01:00
martinfouilleul
665c63c3d0
[win32 build/link]
...
- Build milepost as a dynamic library
- Add import/export directives to public API symbols
- Change example build scripts accordingly
2023-02-21 18:43:30 +01:00
Martin Fouilleul
3b26c92c85
[osx build/linking]
...
- Remove the need for client apps to explicitly link with all dependent libs and frameworks
- Don't require redistributing libEGL/libGLES if not used, by linking them with '-weak-l' option
- Change examples build scripts accordingly
2023-02-21 17:09:26 +01:00
martinfouilleul
2dccfa5547
[win32 surfaces] Backing win32 surfaces with child window and implementing frame/hidding control
2023-02-20 18:34:29 +01:00
Martin Fouilleul
4306d0a01c
back osx surfaces by CALayer
2023-02-20 16:49:44 +01:00
Martin Fouilleul
2232b647ed
reintroduced GLES backend to osx
2023-02-20 11:05:01 +01:00
martinfouilleul
333d3e9f9c
[gles, wip] reintroducing egl surface (for win32 at first)
2023-02-17 18:56:16 +01:00
martinfouilleul
80ea8db687
[surface/canvas cleanup]
...
- Make build-time and runtime backend selection a bit easier
- Reorganized backend-specific files with slightly more coherent naming scheme
2023-02-10 16:56:10 +01:00
martinfouilleul
f54f639db5
properly destroying windows and fonts
2023-02-10 12:05:52 +01:00
martinfouilleul
08d3521b61
[canvas/surface cleanup]
...
- properly destroy gl canvas backend
- properly destroy gl surface
2023-02-09 18:40:42 +01:00
martinfouilleul
af7cbae1fa
[canvas cleanup] cleanup canvas resources on creation failure
2023-02-09 18:18:12 +01:00
martinfouilleul
4a8c77f023
- Move and Zoom perf_text example with the mouse
...
- Reverted to using 4 bits of subpixel precision and computing cross products with 32 bits integers, for perf reasons
- Fixed some confusion in tile array size vs number of elements (could still clean-up naming a bit though)
- Fixed bug where triangles on the left or below canvas boundaries where bucketted to the first colum/row of tiles
- Fixed bug in mouse button message handling (was always sending press on left button)
2023-02-09 13:09:41 +01:00
martinfouilleul
833767d6e2
move text with the mouse in perf_text example
2023-02-09 09:50:53 +01:00
martinfouilleul
21c604104f
fix mp_app_get_resource_path()
2023-02-08 20:40:48 +01:00
martinfouilleul
3f58b2ac3d
glsl canvas shader: do cross products in 64 bits fixed point to avoid overflow
2023-02-08 20:36:39 +01:00
martinfouilleul
7cf4c3d925
opengl surface/renderer: set surface scaling according to dpi of first monitor. Use that dpi to scale backing texture of canvas renderer. Note: changing monitor isn't handled yet!
2023-02-08 18:22:54 +01:00
martinfouilleul
7fbc4ba270
canvas renderer: Use clip rects to cull tiles/pixels in tiling and drawing passes
2023-02-08 12:59:31 +01:00
martinfouilleul
e6e674ee04
Allow setting surface swap interval in opengl surface
2023-02-08 11:49:00 +01:00
Martin Fouilleul
afaa95fe07
applied canvas changes to metal backend
2023-02-08 10:42:21 +01:00
martinfouilleul
2419ab7889
opengl canvas renderer: splitting vertex data and shape data
2023-02-07 18:59:51 +01:00
martinfouilleul
f0bc88c4fb
gl canvas renderer with buffer re-specification
2023-02-07 17:00:59 +01:00
martinfouilleul
5788cdbcda
Desktop opengl 4.3 canvas
2023-02-07 13:24:14 +01:00
martinfouilleul
5754fc1ad2
using temporary buffer to build canvas verex data and use glBufferData with exact number of vertices to submit buffer to gpu
2023-02-06 16:14:43 +01:00
martinfouilleul
fd836c00dd
canvas renderer: parallel tiling pass and sorting pass
2023-02-05 21:03:16 +01:00
martinfouilleul
e59f2b152b
simple gles tiled renderer
2023-02-03 18:44:28 +01:00
martinfouilleul
8faf588bee
Added text rendering in win_canvas test app and confirm it's slow as is...
2023-02-02 20:36:03 +01:00
Martin Fouilleul
9cadc2f23f
added notes on bindless textures indexing
2023-02-02 17:02:55 +01:00
martinfouilleul
28e2a3648e
Multisampling in gles canvas shader
2023-02-02 13:34:06 +01:00
martinfouilleul
f73241e4a6
set background clear color correctly
2023-02-02 12:08:04 +01:00
martinfouilleul
0796b2cbcd
Switched to fixed point in gles triangle rasterization, and fixed wrong offset curve check collapsing the internal control points
2023-02-02 11:40:22 +01:00
martinfouilleul
e0300e9e3c
Fixed indexing in gles_canvas_fragment shaders and fixed native keys buffer
2023-02-01 16:23:51 +01:00
martinfouilleul
c5ae556f22
[wip] win32 gles surface using angle
2023-01-29 01:04:24 +01:00
Martin Fouilleul
bd7e1a15f1
- Conflating mp_views and surfaces
...
- Implicit canvas context in canvas API
- GLES window surface on mac
2023-01-28 17:24:43 +01:00
Martin Fouilleul
9bf62d2218
re-working graphics surfaces
2022-12-26 18:33:31 +01:00
Martin Fouilleul
db5b4966e9
- Restructure osx version to use mp_app_internal.h/mp_app.c
...
- test new run loop structure on osx
2022-12-24 15:33:32 +01:00
martinfouilleul
72338b1a25
Extracted commonalities from platform specific app backends
2022-12-23 20:46:42 +01:00
martinfouilleul
30bd704af2
win32 opengl loader nonsense
2022-12-22 18:24:43 +01:00
martinfouilleul
a696c2ba2b
Added platform detection macros and atomic/thread_local abstraction
2022-12-22 15:29:07 +01:00
martinfouilleul
c57e16db5a
[win32 port] Hello triangle in OpenGL 4.3
2022-12-21 19:43:31 +01:00
martinfouilleul
2421871c3e
windows port initial commit: simple window with GL 4.3 context
2022-12-21 12:03:55 +01:00
Martin Fouilleul
094b0efc33
text box
2022-08-15 10:20:29 +02:00
Martin Fouilleul
39cfa35bfd
initial commit
2022-08-14 18:19:40 +02:00