Commit graph

6394 commits

Author SHA1 Message Date
Bill Currie
cdca28bb10 [vulkan] Add bsp debug rendering to forward
Knowing where face edges are helps no end for lightmap debugging.
2024-01-28 09:00:01 +09:00
Bill Currie
559c5a51ed [vulkan] Fix a missed lightmap stage for forward
This gets dynamic lights working again (well, minus the bad updates, I
need to figure out what's up there, but they're nothing new). I guess I
checked only for things running, not that dynamic lights worked.
2024-01-28 09:00:01 +09:00
Bill Currie
17b00a3d05 [vulkan] Enable synchronization validation
And clean up the resulting errors. While some were tricky, there weren't
all that many: just some attachment issues and the multi-stage image
copy for scraps.

Fixing scraps required a barrier between copies. It might be overkill,
but a transfer_dst to transfer_dst image barrier worked.

Fixing attachments was a bit trickier:
 - depth needed early and late fragment tests to be treated as one stage
 - all attachments that were read later needed storeOp = none (using the
   extension)
 - and then finalLayout needed to be correct to avoid ghost transitions
 - as well, for some reason the deffered gbuffer subpass needed a depth
   dependency on the translucent pass even though neither one writes to
   the depth attachment (possibly a validation bug, needs more
   investigation).
2024-01-28 09:00:01 +09:00
Bill Currie
2203e2b4fd [gl] Use a struct for glpoly_t's vertices
I always hated the float array for the different attributes.
2024-01-28 09:00:01 +09:00
Bill Currie
bc9e85e429 [vulkan] Return default rendering to deferred
Until I design the system for run-time configuration of the render
graph. While forward is fast, it's... not pretty.
2024-01-23 14:54:59 +09:00
Bill Currie
bf50248e34 [vulkan] Remove the iqm fragment shaders
Really, they should never have existed, because iqm is a mesh format,
not a material spec (it just names materials used for the meshes).
2024-01-23 14:45:50 +09:00
Bill Currie
8f20638cd9 [vulkan] Implement deferred fog
It's not perfect (double fog on translucent surfaces, the
scatter/absorption isn't right, and no local lighting on the fog
itself), but it at least seems to look ok.
2024-01-23 14:32:30 +09:00
Bill Currie
60cb5a922a [vulkan] Add job tasks to be run on new scene
I think has been one of the biggest roadblocks to breaking free of
quake, so having dual render paths and thus the different new scene load
sequence has proven to be unexpected helpful. There's a lot more to be
done to make the render graph actually usable by anyone but me, but just
making scene load configurable frees up a lot. I think there needs to be
renderer startup/shutdown configuration too, but this seems to be enough
for now.
2024-01-21 13:36:17 +09:00
Bill Currie
fea08de4cb [renderer] Switch fog to be simple exponential
I don't know why exp(-dist^2) was thought to be a good idea, it's not at
all correct, and I think exp(-dist) looks better.
2024-01-21 01:27:49 +09:00
Bill Currie
2d56d21a24 [vulkan] Correct the position of the crosshair
It's meant to be drawn at its center, not top-left corner.
2024-01-21 01:21:16 +09:00
Bill Currie
8138b69186 [vulkan] Parameterize a few more forward vs deferred
Just scene and config load to go.
2024-01-20 23:36:12 +09:00
Bill Currie
778ffadd54 [vulkan] Implement fog for the forward renderer
Other than decoupled lightmap support, I think that has the vulkan
forward renderer feature complete (though a little buggy with its
lightmap updates and fisheye gets validation errors).
2024-01-20 19:45:45 +09:00
Bill Currie
f7948701a2 [renderer] Clean up the fog code
I didn't feel like messing with all the renderers, so the old API is
still there, but the internals are much simpler thanks to vec4f_t.
2024-01-20 19:39:35 +09:00
Bill Currie
8bf688748c [vulkan] Implement very basic lighting for forward
Both alias and iqm (yay unified fragment shader). It's meh, but that's
1996 tech for you (hey, it was full-on 3d and we liked it!).
2024-01-20 14:42:21 +09:00
Bill Currie
b22f104163 [renderer] Merge light setup code from glsl and sw
I'll look into gl later, but this means I don't need yet another copy
for vulkan's forward renderer.
2024-01-20 14:35:02 +09:00
Bill Currie
13c6065f9f [vulkan] Get deferred renderer mostly working
It's just lightmap vs lighting (scene load and bsp rendering) and
compose (attachments or no) that need sorting out, and, of course, a way
to select between the two.
2024-01-20 09:44:29 +09:00
Bill Currie
fc5b1d5f6e [iqm] Load skins correctly for qskin
Missing any possibility for fullbrights or colors (only because no
attempt is made to load such), and more deferred breakage, but it acted
as a nice proof of concept for cleaner skin loading (taking advantage of
resources and QFV_PacketCopyImage).
2024-01-20 09:44:29 +09:00
Bill Currie
99445758a3 [vulkan] Allow for no barrier after image copy
QFV_PacketCopyImage is quite handy, but when used before
QFV_GenerateMipMaps, the final image barrier is not wanted as
QFV_GenerateMipMaps expects the image to be transfer_dst, so skip the
barrier if dstBarrier is null.
2024-01-20 09:44:29 +09:00
Bill Currie
93d860472d [vulkan] Use the same fragment shader for alias and iqm
In a quake context, I suspect iqm models should use the same skin
concepts as alias models. I'll probably be proven wrong, but it should
make things nicer for now, especially with forward lighting. However,
Mr Fixit is too bright because the skin isn't set up correctly.

Deferred is getting more and more smashed, but I'll fix that up when
I've got forward "done".
2024-01-20 09:44:29 +09:00
Bill Currie
58b42ed1b7 [vulkan] Implement forward translucent pipelines
This gets skies, liquids and particles working. I think it's only alias
and iqm lighting to go before forward is caught up to deferred.
2024-01-20 09:44:29 +09:00
Bill Currie
1e7cb8ee17 [vulkan] Implement lightmap updates for dlights
GL-Quake all over again, but the world is so much more alive with moving
lights, even if... rather stylized.

Closes #73.
2024-01-20 09:44:29 +09:00
Bill Currie
8c6bfe0984 [vulkan] Partially support dynamic lighting
Dynamic lighting via light styles now works, just actual dlights to go.
2024-01-19 15:45:04 +09:00
Bill Currie
63bec6d67f [scene] Add more entity component helper functions
Cleans up the code and removes more opportunities for UB.
2024-01-19 15:45:04 +09:00
Bill Currie
c512af4f21 [vulkan] Check output framebuffers exist before destroying
The output framebuffers array is dynamic, so trying to index it before
it has been created results in a segfault (which is rather inconvenient
during shutdown).
2024-01-19 15:45:04 +09:00
Bill Currie
52f012cc11 [console] Flush any pending draw data
This takes care of a 5s hang when the engine aborts before the first
frame is rendered (for vulkan).
2024-01-19 15:45:04 +09:00
Bill Currie
87357f98d3 [vulkan] Correct line vertex input spec (again)
This time for the forward renderer.
2024-01-19 15:45:04 +09:00
Bill Currie
5055860c1b [vulkan] Do lightmap flush after all lightmaps uploaded
This fixes the 5s hang on shutdown.
2024-01-19 15:45:04 +09:00
Bill Currie
4a99ef5723 [vulkan] Add a function to explicitly wait on a packet
It's not currently used, but it was very handy for finding where the
cause of the 5s hang was ***not***.
2024-01-19 15:45:04 +09:00
Bill Currie
bf0d1b4f6e [vulkan] Add tracy zones to most shutdown functions
This helped find the 5s hang on exit.
2024-01-19 15:45:04 +09:00
Bill Currie
3168550935 [vulkan] Upload lightmap data to the gpu and use it
The lightmaps aren't updated at all yet, so everything is static.
Figuring out how lightmap data gets to the gpu was a chore thanks to the
spaghetti in the bsp data, and then I'd forgotten that I was
pre-expanding the light data to rgb so wound up with weird lightmaps,
but without water or particles, demo1 is getting 5000fps at 800x450, and
it seems to be CPU limited.
2024-01-19 15:45:04 +09:00
Bill Currie
329c08b934 [vulkan] Use only a single subpass for forward main
Output is still a second pass for now.
2024-01-19 15:45:04 +09:00
Bill Currie
7ce94cde14 [vulkan] Fix some bitrot in the forward render graph
Many issues, but this fixes the validation errors.
2024-01-19 15:45:04 +09:00
Bill Currie
ec9e2c12b8 [vulkan] Implement skin support
Finally, quakeworld gets its *ahem* fancy skins. I'm not happy with how
skin loading is handled, but the whole model and skin support needs a
redesign.

Closes #74.
2024-01-15 19:07:33 +09:00
Bill Currie
fcd094ef04 [skin] Fix up dynamic library issues
And further clean up skin api.

It turns out that skin functions must all be in the render libs, and
this results in Skin_Set (was Skin_SetSkin) needs to be accessed via a
function pointer rather than directly :(
2024-01-15 15:26:09 +09:00
Bill Currie
d39630580e [skin] Get team colors working for model skins
This should actually get team colors working for all models, not just
player.mdl.
2024-01-15 14:59:11 +09:00
Bill Currie
baa11cd710 [image] Ensure tex fields are all initialized
Designated initializers for the win.
2024-01-15 14:59:11 +09:00
Bill Currie
346ed29f49 [skin] Implement top/bottom colors for gl
They don't work yet if the entity does not have an external skin.
2024-01-15 14:59:06 +09:00
Bill Currie
0539f07c1a [skin] Use an ECS registry to manage skins
This takes care of the double free and also cleans up a lot of the skin
api. However, the gl renderer lost top/bottom colors (for now). Vulkan
skins still don't work yet.
2024-01-15 14:56:37 +09:00
Bill Currie
739adad3d5 [skin] Clean up the API a little
Only the renderer-specific functions are in the plugin functions struct,
and only the client functions are global.
2024-01-13 13:42:03 +09:00
Bill Currie
e978234018 [qw] Fix a bunch of punchangle issues
punchangle wasn't getting decayed for two reasons: I had forgotten to
set the flag in qw, and the decayed value was not getting written to
viewstate.

Also, the rotation was misapplied (I had the two quaternions swapped) so
punchangle was being applied to world Y instead of local Y, thus the
seemingly random rolls.
2024-01-13 02:00:23 +09:00
Bill Currie
962438bddc [sound] Flush sfx hash table on gamedir change
Along with "releasing" all the sfx entries, need to flush the name
lookup so correct names don't get the wrong sounds. Fixes the ricochet
sound for rocket explosions (and shotgun sounds for nail guns) in
quakeworld.
2024-01-13 01:03:23 +09:00
Bill Currie
c01c4180f3 [glsl] Handle verts with no bones
Same issue as in vulkan (surprise surprise, considering the glsl code
came first).
2024-01-09 20:42:18 +09:00
Bill Currie
119e9766b9 [iqm] Use 32-bit indices for large models
That is, those with more than 65520 vertices. Not properly supported for
sw or gl, and glsl isn't rendering properly for some reason (renderdoc
does see the meshes, though, so maybe depth or winding issues).
2024-01-09 13:36:46 +09:00
Bill Currie
834587f102 [ui] Update mouse buttons only for button events
This seems to have fixed the sticky mouse. If nothing else, I've at
least established that the problem is in IMUI (it sees the events) and
not in QF's input system.
2024-01-09 09:58:03 +09:00
Bill Currie
3cd0703249 [ui] Implement scroll bars
There's a bit of nasty hard-coding around passages at the moment, but
the basics are working in a fairly generic way.
2024-01-09 09:12:29 +09:00
Bill Currie
c460d03371 [ui] Propagate passage view size to its container
This gets the container view sized properly such that the scroll box has
something to work with for determining how much the view can slide.
2024-01-08 11:18:21 +09:00
Bill Currie
97a83bf1ed [ui] Move passage paragraph placement into text handling
This allows the passage view to be sized properly during imui's layout
phase.
2024-01-08 10:27:17 +09:00
Bill Currie
ab702d7fb7 [ui] Add some more info to imui tree dumps
Item name (from state label) and flags for onresize and onmove.
2024-01-08 00:38:00 +09:00
Bill Currie
c9a8a340f0 [ecs] Don't free the name string pointer
At least for now, anyway, I think the ecs should not own the entity
name: doing so makes ownership of the string a nightmare.
2024-01-07 13:50:48 +09:00
Bill Currie
585c47bc2d [ui] Use actual fractions for fractional values
Integral percentage is not always enough.
2024-01-07 12:03:22 +09:00
Bill Currie
2e00fd1165 [ui] Pass a data pointer to update functions 2024-01-07 11:58:01 +09:00
Bill Currie
32c65294ba [ui] Use a view-relative anchor position for drags
With this, the mouse no longer stays disconnected from the dragged item
when the item can't move any further. It does show some interesting
behavior when window resizes don't behave, but it's still an
improvement.
2024-01-06 19:39:42 +09:00
Bill Currie
082d00b6c3 [ui] Use the shaped text cache for passage text
This makes a pretty significant difference (~520us down to 80us) for
simple text passage, and even the first time is fast due to word
repetition.
2024-01-06 02:59:31 +09:00
Bill Currie
ce7c2183d3 [ecs] Delay component destruction
Copy the component out of the pool so that it can be overwritten now,
thus removing it from the pool, before actually destroying the component
so that any recursive removals of the same component don't mess up the
indices, and also don't try to remove the component from the same
entity.

This fixes a rather sneaky component leak caused by said recursion.
2024-01-06 02:11:31 +09:00
Bill Currie
0307e9d165 [ui] Set all glyph views to be free-floating
This gets passage text working mostly nicely in IMUI: just some
ascender/descender issues.
2024-01-06 00:13:22 +09:00
Bill Currie
1ab68ca5fd [vulkan] Correct line vertex input spec
I suspect I may have done the incorrect offset for color to get a
gradient for some testing, but forgot to put it back. Or, of course, I
just completely and utterly brain-farted when writing the attribute.
2024-01-05 22:44:09 +09:00
Bill Currie
969678d53c [ui] Update passage paragraph vertical offsets
Descenders still cause problems for layout, but now the paragraphs are
no longer on top of each other. Also, the paragraph spacing is currently
hard-coded (but should be part of a style).
2024-01-05 17:30:44 +09:00
Bill Currie
4d0c1c66b3 [ui] Refresh hierarchy pointers
With the change to hierarchies being components, any pointers to the
hierarchy component are not stable and must be refreshed after the
possibility of adding or removing a hierarchy.
2024-01-05 16:34:18 +09:00
Bill Currie
c2316a4173 [ui] Add support for passage views to imui
It was a right cow to get working at all due to the tangled mess of
dependencies between different hierarchies (switching to hierarchies as
components helpt), but other that some vertical positioning (paragraphs
and descenders), it's working fairly well now (and fairly quick other
than I think I need to ensure the shaping cache is used).
2024-01-05 16:34:18 +09:00
Bill Currie
871d8729f5 [ruamoko] Free fonts on shutdown
I guess I had figured out how to free fonts sometime after writing
rua_gui.c.
2024-01-05 11:50:48 +09:00
Bill Currie
9b0589f7e5 [ruamoko] Add tracy zones
Mostly for tracking memory issues, but handy for seeing where time is
spent, of course.
2024-01-05 11:50:48 +09:00
Bill Currie
0ed4df3fb9 [quakeio] Rework Qgetline to use dstring
This clears up its stray memory allocation, and incidentally makes it
thread-safe.
2024-01-05 11:50:48 +09:00
Bill Currie
860f48d541 Clean up about 12000 allocations
Some of them were actual leaks, but tracking memory should be a lot
easier now. However, there's a lot of room for optimization of
allocations (eg, recylcling of hierarchies. There is now 1 active
allocation (according to tracy) when nq exits: Qgetline's string buffer
(I think an api change is in order).
2024-01-05 11:50:48 +09:00
Bill Currie
929b1f0662 [ui] Plug a memory leak and use-after-free in imui
The leak was due to forgetting to reset the links array, and
use-after-free needed running through the imui_reference pool to reset
any owning links.
2024-01-05 11:50:48 +09:00
Bill Currie
bfa7c1722a [build] Implement tracy memory zones
This proved to be quite the challenge, and is probably rather fragile,
but it does seem to work, and might help with tracking down memory
leaks.
2024-01-05 11:50:48 +09:00
Bill Currie
60c22e8fda [ecs] Make hierarchy ownership of entities optional
I'm not sure this is what I want.
2024-01-05 11:50:48 +09:00
Bill Currie
292e4ca132 [ecs] Pass the registry in to the component destroy function
This makes it possible for hierarchies to clean themselves up (by
deleting their entities (though that will cause other problems later
when the hierarchy doesn't own the entities)), thus plugging a memory
leak when parsing passage text.
2024-01-03 12:40:56 +09:00
Bill Currie
91dd9d3dfa [console] Clamp min charbuf size to 1x1
Prevents a segfault when the window is ultra-tiny (eg, 80x45 pixels)
2024-01-03 12:39:54 +09:00
Bill Currie
dfcad353fb [vulkan] Free the alias model resource block
I forgot to do so when switching to using resource (plugs a leak).
2024-01-03 12:39:54 +09:00
Bill Currie
f5ebc1083f [ecs] Pass the registry in to the component destroy function
This makes it possible for hierarchies to clean themselves up (by
deleting their entities (though that will cause other problems later
when the hierarchy doesn't own the entities)), thus plugging a memory
leak when parsing passage text.
2024-01-03 12:39:54 +09:00
Bill Currie
35eec0b2e5 [ecs] Implement hierarchies as components
The main goal of this change was to make it easier to tell when a
hierarchy has been deleted, but as a side benefit, it got rid of the use
of PR_RESMAP. Also, it's easy to track the number of hierarchies.

Unfortunately, it showed how brittle the component side of the ECS is
(scene and canvas registries assumed their components were the first (no
long the case), thus the sweeping changes).

Centerprint doesn't work (but it hasn't for a while).
2024-01-02 16:38:01 +09:00
Bill Currie
6b2bd02b14 [ui] Add a canvas reference component
It's used for finding the entity that has the actual canvas component
attached. Useful for sharing a single canvas between multiple view
hierarchies, and worked as a proof of concept for doing similar with
hierarchy references, and might work for properly destroying canvas
items (fills etc) when a view entity is deleted (if attached to every
view).
2023-12-31 14:15:05 +09:00
Bill Currie
9a74fb0a14 [ecs] Add basic entity and registry printing
Entities print their status and attached component names, registries
print their component counts for each pool.
2023-12-31 14:08:01 +09:00
Bill Currie
f5de553949 [ui] Take passage view parent parameter
I'm not sure this will be useful in imui, but it might in a retained
mode UI.
2023-12-28 16:43:31 +09:00
Bill Currie
f4f81db440 [ui] Free any preexisting passage glyphs
This plugs a memory leak in Text_PassageView.
2023-12-28 16:40:26 +09:00
Bill Currie
dc8ee14f50 [ruamoko] Use a single dstring for (v)sprintf
Rather than creating and destroying one every call. Didn't make any real
difference to the memory leaks, but it should make the calls
fractionally faster and reduce fragmentation.
2023-12-28 16:31:00 +09:00
Bill Currie
0a7042f318 [sys] Don't use va_copy in Sys_Error
It shouldn't be necessary since Sys_Error can restart args itself.
2023-12-28 16:11:06 +09:00
Bill Currie
4c704e9a2e [ecs] Give registries a name
This makes debugging a little easier when there are multiple ECS
registries. Currently, the name parameter must be a stable pointer.
2023-12-28 16:08:40 +09:00
Bill Currie
1a5b421933 [ruamoko] Share registry between gui and imui
I can't say I like there being a hard-coded registry, but gui and imui
need to agree on all aspects of the ECS registry they use.
2023-12-28 16:06:47 +09:00
Bill Currie
6b6c91e993 [alsa] Fix a missing \n in a message
I guess I had thought it was Sys_Error instead of Sys_Printf (or maybe I
changed it).
2023-12-27 16:05:24 +09:00
Bill Currie
d5b0a51b6e [dstring] Use va_copy correctly
Every use of va_copy needs a corresponding call to va_end. I had somehow
missed that when getting _dvsprintf to work properly. This seems to plug
a memory leak (certainly doesn't make things worse).
2023-12-27 16:03:05 +09:00
Bill Currie
75171743a4 [ecs] Destroy component pools in reverse order
This seems to be the best solution for interlinked entities/components,
the idea being that components with higher indices can "own" those with
lower (eg, imui_reference can "own" a view_href, but not the other way)
and makes it relatively easy to manage (components that can own others
get added to the registry later), and might even allow validation at a
later stage.
2023-12-26 11:10:07 +09:00
Bill Currie
767f4ff02e [ui] Plug a hierarchy reference leak
I'm not entirely sure what's going on yet, but deleting the referenced
view via its entity rather than the view results in a corrupted href in
the component pool (with a null entity id in the dense array) and then
an href component leak (as well as some very weird numbers when dumping
canvas bounds). I suspect Hierref_DestroyComponent is missing a few
steps (though I do need to verify that it's getting called in this
particular case).
2023-12-24 02:22:46 +09:00
Bill Currie
dd11a7b378 [vulkan] Apply 2d scale to clipping bounds
It was a little off-putting getting an incorrectly clipped console when
using non-unitary scale (especially since I was trying to show abbator
something).
2023-12-24 02:14:24 +09:00
Bill Currie
101c50e3e1 [ui] Sort out most of the nested canvas layout issues
Draw order is now stable and sizing is mostly correct.
2023-12-23 19:25:30 +09:00
Bill Currie
a50c1d0f81 [ui] Implement nested canvases
This is for scroll boxes (the nesting of canvases is for the clipping
they provide). There are some issues with automatic layout, but this
gets things mostly working, in particular the management of the link
between hierarchies as a canvas is always the root of its hierarchy.
2023-12-23 14:36:57 +09:00
Bill Currie
6faa78eaa1 [ui] Change draw order from 16-bit to 32-bit
With the scroll box work I'm doing, I realized 16 bits is a little
cramped. Although I doubt it would be that much of a problem, switching
to 32 bits turned out to be free because of alignment.
2023-12-23 14:31:58 +09:00
Bill Currie
86326c8179 [ui] Clip rendering to canvas bounds
This causes minor problems when the window gets too small, but it will
allow for scrollable regions.
2023-12-22 18:27:23 +09:00
Bill Currie
00d9f039fc [vulkan] Set debug windows to auto_fit
I'd missed this earlier, thus the vulkan debug windows wound up a tad
small.
2023-12-22 18:25:04 +09:00
Bill Currie
7f1c20afa9 [ui] Implement window resizing
There are some rather iffy parts (windows can get too small), and the
drag bars are a little odd, but the concepts are working.
2023-12-22 18:22:21 +09:00
Bill Currie
650ea052ea [vulkan] Support clipping rectangles via scissor
Seems to work well. The other renderers have stubs because I don't feel
like implementing clipping for them. The gl and glsl wouldn't be too
difficult (need to handle the draw queues), but sw needs a fair bit of
work and I'm not sure it's worth the effort.
2023-12-22 18:17:09 +09:00
Bill Currie
f3eebae9bc [vulkan] Destroy the tracy GPU contexts
I had forgotten about doing so because I was doing my profiling without
validation layers.
2023-12-22 13:44:31 +09:00
Bill Currie
dc0b4880e3 [vulkan] Use VkValidationFeatureEnableEXT
It's currently unused as it does flag a pile of things I need to fix,
but I don't want to deal with them right now (though I have fixed a
few).
2023-12-22 12:29:59 +09:00
Bill Currie
1ca655c0d8 [ui] Clean up a lot of duplicate code
Much of the state handling was highly redundant (in particular, handling
entity and old_entity). This should make it easier to get dragable items
for window resizing.
2023-12-21 19:59:40 +09:00
Bill Currie
a300e2330d [ui] Make windows respect their size fields
If auto_fit is true, then the old behavior is retained.

This is actually better than the set size thing, but that's probably
still useful.
2023-12-21 19:57:02 +09:00
Bill Currie
f80f265a07 [ui] Support pixel sizing of im views
This will allow for user-controllable window sizes.
2023-12-21 17:02:59 +09:00
Bill Currie
4483368319 [ruamoko] Add bindings for imui
Things are a little clunky, but I've got a little window I can
manipulate in my test scene :)
2023-12-21 16:11:30 +09:00
Bill Currie
866cdcf068 [renderer] Reset fov when fisheye disabled
This fixes the badly stretched view after disabling fisheye.
2023-12-21 13:28:52 +09:00
Bill Currie
c5d27f5162 [client] Merge sbar into hud
This cleans up a lot of the twisted code between the two files. With the
rewrite of hud/sbar last year, there's really no separation between the
two.
2023-12-21 12:35:02 +09:00
Bill Currie
fc6c426241 [console] Clean up bitrot surrounding inputline
pr_argc no longer works for all functions (only for varargs). Fixes a
segfault when hitting enter in an input line in the menus. Also fix the
cursor.
2023-12-21 10:27:47 +09:00