Commit graph

13681 commits

Author SHA1 Message Date
Bill Currie
4471a40494 [vulkan] Get the forward renderer passing validation
It looks horrible due to the lack of lighting etc, but it's good enough
for basic testing, especially of my render job design (that passed with
flying colors).
2023-07-02 19:58:56 +09:00
Bill Currie
260a10d75c [vulkan] Add a very basic forward rendering pass
It's not fully compliant yet, but it sorta kinda maybe worked on my
pinebook (still slow, but no hardware vulkan :( )
2023-07-02 18:31:22 +09:00
Bill Currie
1caa9ed8c3 [build] Ensure generated progs headers get installed 2023-07-02 17:23:44 +09:00
Bill Currie
a6a0b6cb63 [ui] Use View_Delete to delete the view
It's there for a reason :P. Fixes most of the really bad behavior after
disabling some widgets (re-layout isn't working at all, though, and
adding the widgets back again puts them in the wrong place).
2023-07-02 16:40:05 +09:00
Bill Currie
7c17921277 [ui] Remove view from hash table when pruning
Fixes a segfault after removing some widgets. Otherwise, it seems
pruning is working.
2023-07-02 16:10:27 +09:00
Bill Currie
3aceccf4aa [ui] Use the same key algorithm for Hash_Find
Using label + key_offset in both imui_state_getkey and the call to
Hash_Find greatly simplifies the logic of using the correct key. Fixes
an ever-growing set of buttons when using separators (hmm, I think this
means pruning isn't working correctly).
2023-07-02 15:14:21 +09:00
Bill Currie
68e155448d [ui] Position text correctly in its view
It turns out text positioning was a little more complicated than I
remembered. The Y offset is relative to the baseline with Y going down.
2023-07-02 15:11:11 +09:00
Bill Currie
e98cd1355d [ui] Implement auto-layout
TextContent seems redundant at this stage since a text view is always
sized to its content, and PercentOfParent doesn't work yet. Pixels
definitely works and Null seems to work in that it does no sizing or
positioning. Vertical layout is supported but not yet tested, similar
for ChildrenSum, but I can have two buttons side by side.
2023-07-02 15:04:22 +09:00
Bill Currie
153958a51f [ui] Clean up unused view states before drawing
Used states are tracked by simply updating their last-used frame count
and any that don't match the current frame count when drawing are
deleted.
2023-07-02 12:12:03 +09:00
Bill Currie
85fd3c34cc [ui] Set text view height to font height
Text_StringView sets the view bounds to the bounds of the glyphs in the
view. This has its advantages, but is not suitable for automatic UI
sizing. However, the view is positioned correctly, so nothing needs to
be done there. Now full height glyphs (eg, C) look balanced in the view,
and glyphs with descenders (g) brush the bottom of the view.
2023-07-02 03:02:13 +09:00
Bill Currie
ed5ef3a5fb [ui] Implement event handling in imui
Button presses work nicely thanks to both Casey Muratori and Darian (for
clearing up some of Casey's comments about `hot`).
2023-07-02 01:25:27 +09:00
Bill Currie
e89b5a88fa [input] Add a shift enum element for numlock
I don't know why I missed this one.
2023-07-02 01:23:28 +09:00
Bill Currie
5099633bc8 [console] Start work on a debug UI
It does almost nothing (just puts a non-function button on the screen),
but it will help develop the IMUI code and, of course, come to help with
debugging in general.
2023-07-01 20:00:26 +09:00
Bill Currie
0257165b7d [ui] Add the beginnings of an immediate mode UI
Based on the articles on Hidden Grove
(https://www.rfleury.com/archive?sort=new). So far, I can get a
non-functional button on the screen :)
2023-07-01 19:55:19 +09:00
Bill Currie
4eef11c329 [ui] Add visibility control to canvases 2023-07-01 19:53:26 +09:00
Bill Currie
c1cd81222d [ui] Add font text drawing to canvas
Both passage and simple text are supported, but only simple text has
been tested at this stage. However, as passage text was taken directly
from rua_gui.c and formed the basis for simple text rendering, I expect
it's at least close to working.
2023-07-01 19:49:49 +09:00
Bill Currie
32346b6123 [ui] Add support for simple text strings
The same underlying mechanism is used for both simple text strings and
passages, but without the intervening hierarchy of paragraphs etc.
Results in only the one view for a simple text string.
2023-07-01 19:42:02 +09:00
Bill Currie
5fcc743d1a [ui] Use fontconfig to find system fonts
I'm not sure I like fontconfig (docs are...), but it is pretty standard,
and I was able to find some reasonable examples on stackexchange
(https://stackoverflow.com/questions/10542832/how-to-use-fontconfig-to-get-font-list-c-c).
Currently, only the one font is handled, no font sets for fall backs
etc. It's meant for the debug UI I'm working on, so that shouldn't be a
big deal.
2023-07-01 19:15:22 +09:00
Bill Currie
31151ec5d5 [ui] Rename Text_View to Text_PassageView
It works with passages but I want to be able to create simple text views
from strings, so Text_View was kind of polluting the namespace.
2023-07-01 14:40:20 +09:00
Bill Currie
09f257cdcb [cexpr] Fix bool printing and support int casts
Strangely, valid pointers are always true. Also, bool now accepts 0 for
false and non-0 for true (doing a proper conversion to bool).
2023-06-30 21:48:22 +09:00
Bill Currie
0b0271ee76 [console] Provide control of cursor visibility
It's usually desirable to hide the cursor when playing quake, but when
using the console, or in various other states, being able to see the
cursor can be quite important.
2023-06-30 14:57:04 +09:00
Bill Currie
759e67bb7c [x11] Implement mouse visibility control
That was nicely easy.
2023-06-30 14:53:47 +09:00
Bill Currie
ec0c6ad906 [vid] Add an api function to control mouse visibility
It's currently very simplistic (visible, not visible), but it gets
things started for making QF more usable in a windowed environment (not
having a visible cursor was fine in DOS, or when full screen, but not
when windowed (and not actively playing).
2023-06-30 14:50:47 +09:00
Bill Currie
c834516c3c [vulkan] Drop the id buffer for now
I've decided to just get things working the usual way for now, and I
wasn't too happy about mixing the id writing into irrelevant shaders.
2023-06-30 12:19:46 +09:00
Bill Currie
e2b6e0728e [vulkan] Render object id to a buffer
Currently the instance id is written (with the idea that it can be
mapped back to entity in C). The plan is to use it for mouse picking.
2023-06-30 03:34:16 +09:00
Bill Currie
d45b76313c [vulkan] Use correct type for parsing int32
Using size_t doesn't work too well for -1.
2023-06-30 03:31:52 +09:00
Bill Currie
665d88c353 [vulkan] Default a view's format to that of its image
Just one less thing to duplicate.
2023-06-30 03:03:21 +09:00
Bill Currie
154d1cbfcb [vkgen] Handle int32_t correctly
I'm not sure why parse_basic doesn't work for int, but I'm not too
worried about it right now.
2023-06-30 03:00:15 +09:00
Bill Currie
fdeb294c58 [qfcc] Update ptraliasenc test for new format
With the use of the full type for encoding type aliases, ptraliasenc's
simple check became invalid (it's purpose is to ensure the encoding
doesn't have "null" in it, not the exact encoding itself, but this is
good enough).
2023-06-30 02:45:49 +09:00
Bill Currie
7ce475b114 [qfcc] Use full type for encoding alias types
This is needed for distinguishing type aliases when only the name
changes.
2023-06-30 02:42:28 +09:00
Bill Currie
dc61d15340 [qfcc] Add failing test for array-typedef interaction
Two variables declared as arrays (same size) of different typedefs to
the same base type have their type encodings both pointing to the same
short alias.

From vkgen:

    51d3  ty_array  [4={int32_t>i}]      207f  0 4
    51d9  ty_array  [4=i]                1035  0 4
    51df  ty_alias  {>[4=i]}              16  51d9  51e6
    51e6  ty_array  [4={uint32_t>i}]     2063  0 4
    51ec  ty_union  {tag VkClearColorValue-} tag VkClearColorValue
	    4ca0     0 float32
	    51df     0 int32
	    51df     0 uint32

uint32 should use 51e6 and int32 should use 513d,
2023-06-30 02:39:51 +09:00
Bill Currie
56d33d1b98 [qfcc] Remove 8 argument limit from ruamoko function calls
That hasn't been an issue for over a year thanks to the stack.
2023-06-29 21:17:25 +09:00
Bill Currie
4adb7dfbd1 [vkgen] Support custom parsers for .parse blocks
This let me keep clearValue's simple default rgba float interpretation,
but also have full control over access to the float32, int32 and uint32
fields.
2023-06-29 18:41:18 +09:00
Bill Currie
2b2398b193 [bspfile] Correct some typos in the documentation 2023-06-29 11:31:24 +09:00
Bill Currie
2a9e700c92 [sw] Separate draw frames from render frames
This is necessary because fisheye rendering draws the scene up to 6
times per frame, which results in many of the limits being hit
prematurely, but updating r_framecount that often breaks dynamic lights.
2023-06-29 01:26:54 +09:00
Bill Currie
585f1161db [renderer] Clean up R_MarkLeaves
Really? More to clean up before (vulkan) bsp rendering is thread-safe?
However, R_MarkLeaves was pretty close: just oldviewleaf and
visframecount, but that's still too much. Also, the reliance on
r_refdef.worldmodel irked me.
2023-06-29 00:49:14 +09:00
Bill Currie
ecb9a15946 [model] Clean up the brush leaf api a little
Those functions now all take mod_brush_t since they don't work with any
other type of model.
2023-06-28 21:45:41 +09:00
Bill Currie
d7e312ab8b [vulkan] Don't sort brush model entities
I really don't remember why I sorted them (perhaps to ease debugging),
but it's an unnecessary cost.
2023-06-28 18:08:43 +09:00
Bill Currie
3bdc4adb4c [vulkan] Use per-pass entity queues
While there will be some GPU resources to sort out for multi-pass bsp
processing, I think this is the last piece required before shadow passes
can be implemented.
2023-06-28 17:57:41 +09:00
Bill Currie
afa84afc79 [vulkan] Abandon light splats
They were an interesting idea and might be useful in the future, but
they don't work as well as I had hoped for quake's maps due to the
overlapping light volumes causing contention while doing the additive
blends in the frame buffer. The cause was made obvious when testing in
the marcher map: most of its over 400 lights have infinite radius thus
require full screen passes: all those passes fighting for the frame
buffer did very nasty things to performance. However, light splats might be
useful for many small, non-overlapping light volumes, thus the code is
being kept (and I like the cleanups that came with it).
2023-06-28 13:26:37 +09:00
Bill Currie
49dab2af85 [vulkan] Prepare to abandon light splats
Move things around a bit so I can restore the previous behavior of doing
all lights in a single full screen pass but keep the code improvements
from trying to do splatted lighting.
2023-06-28 12:53:58 +09:00
Bill Currie
b113e8a46c [vulkan] Add debug lines for light splats
Disabled, but all that's needed is to uncomment the debug pipeline in
the compose subpass.
2023-06-28 11:47:26 +09:00
Bill Currie
85128a3e86 [vulkan] Rework lighting to use splats
It's currently slower, and the cone splats are buggy, but the lighting
code itself got some nice cleanups.
2023-06-28 01:01:56 +09:00
Bill Currie
03cfd2530b [vulkan] Ensure staging buffer packets align to 16 bytes
Unaligned packets make it rather unsafe to use vector instructions to
transfer data to them (which optimizing compilers like to do these
days).
2023-06-28 00:27:51 +09:00
Bill Currie
2bf52e748a Merge branch 'wip-shadow' 2023-06-26 18:21:37 +09:00
Bill Currie
4932987b08 [vulkan] Hook up the view model again
And with that, the vulkan renderer is fully back to where it was before
this mini-project (and even a little ahead). Time for shadows (finally).
2023-06-26 18:14:38 +09:00
Bill Currie
614ca744ab [vulkan] Support multi-layer OIT rendering
This fixes fisheye rendering. I'm not too happy with always allocating
the cube OIT heads buffer, but that's for another day.
2023-06-26 18:00:46 +09:00
Bill Currie
8f1de6865f [vulkan] Get fisheye working except for translucency
The OIT heads buffer is only a single-layer image, which breaks cube
map rendering, but once this is sorted, it looks like fisheye will work
well.
2023-06-26 14:03:19 +09:00
Bill Currie
7ba347cb6c [vulkan] Get water warp and fisheye mostly working
Water warp works quite well, but fisheye is having a little trouble
(current issue is framebuffer size mismatch).
2023-06-26 12:07:22 +09:00
Bill Currie
ab4ea1b333 [vulkan] Fix incorrect reference to imageviews
The old system used just "views", but I had at some time decided that I
might want to support specifying buffers and buffer views, but forgot to
change the name in vkparse.c.
2023-06-26 11:55:15 +09:00