Commit Graph

11082 Commits

Author SHA1 Message Date
Bill Currie 3230270ae3 [entity] Start work on a new entity library
The plan is to have a fully component based entity system. This adds
hierarchical transforms. Not particularly useful for quake itself at
this stage, but it will allow for much more flexibility later on,
especially when QuakeForge becomes more general-purpose.
2021-03-09 11:39:41 +09:00
Bill Currie 2c5742a076 [renderer] Remove some variable warts
Ugh, Hungarian notation is still lurking...
2021-03-09 11:37:47 +09:00
Bill Currie 941a1267bc [util] Fix a count error when resizing darrays
Turns out I had never fully tested inserts.
2021-03-09 11:35:18 +09:00
Bill Currie 14bc560624 [build] Add option to enable gcov data generation
Nice to be able to check how good the tests are (or aren't, as the case
may be).
2021-03-07 17:39:22 +09:00
Bill Currie 4a97bc3ba5 [util] Create simd quaternion to matrix function
This seems to be pretty close to as fast as it gets (might be able to do
better with some shuffles of the negation constants instead of loading
separate constants).
2021-03-04 17:45:10 +09:00
Bill Currie 0366b72d4a [vulkan] remove the fps printing
Now that pixels are rendered, there's no need to print the fps
separately as the in-game display works quite nicely.
2021-03-03 18:16:27 +09:00
Bill Currie 4d8ce22c17 [vulkan] Load the map's lights into an array
It's not used yet as work needs to be done to better support generic
entities, but this is the next step to real-time lighting (though, to be
honest, I expect it will be too slow to be usable).
2021-03-03 18:14:16 +09:00
Bill Currie 0da3b35ef5 [util] Add macro for using vectors with scanf 2021-03-03 18:11:59 +09:00
Bill Currie 2cc30f9dfd [headers] Fix a doxygen warning 2021-03-03 18:10:58 +09:00
Bill Currie e3762d8f38 [util] Make plist mostly null-safe
The main purpose is to allow fluent-style:
    const char *targetname = PL_String (PL_ObjectForKey (entity, "targetname"));
    if (targetname && !PL_ObjectForKey (targets, targetname)) {
        PL_D_AddObject (targets, targetname, entity);
    }

[note: the above is iffy due to ownership of entity, but the code from
which the above comes works around the issue]
2021-03-03 18:01:35 +09:00
Bill Currie 60348ab458 [headers] Fix some inconsistent include guards 2021-03-03 16:41:05 +09:00
Bill Currie eb0aa2dcea [renderer] Clean up most globals in efrags
There's still the memory management itself to clean up, but the main
code no longer uses any static/global variables (holdover from when the
function was recursive rather).
2021-03-03 16:34:16 +09:00
Bill Currie 45c0255643 [util] Add simd 4x4 matrix functions
Currently just add, subtract, multiply (m m and m v).
2021-03-03 16:34:16 +09:00
Bill Currie 9617bbef97 [build] Create static libs for render targets
The static libs are used to build the plugins, but make it easy to use
only those modules needed for tests. Fixes the link error when running
"make check" with non-static plugins.
2021-03-03 16:34:16 +09:00
Bill Currie 22c0bec03a [build] Clean up obsolete QF_PROCESS_NEED_DIRS
Its need went away with the shift to non-recursive make. The macro is
still available just in case.
2021-03-03 13:02:35 +09:00
Bill Currie 407ea15e35 [util] Fix some test bitrot 2021-03-02 15:05:19 +09:00
Bill Currie fd97bb1456 [vulkan] Implement linear falloff
It's possibly too bright, but it might be the lights themselves. Still,
it looks better than the no-falloff implementation.
2021-02-25 16:11:47 +09:00
Bill Currie 33575f93d5 [vulkan] Implement deferred lighting for dlights
Static lights are yet to come (so the screen is black most of the time),
but dynamic lights work very nicely (and look very good) despite the
falloff being incorrect.
2021-02-25 15:51:54 +09:00
Bill Currie 918c3af095 [vulkan] Add a position buffer to the g-buffer
While I could reconstruct the position from the screen coords and depth,
this is easier and good enough for now. Reconstruction is an
optimization thing.
2021-02-25 13:46:33 +09:00
Bill Currie 4eb07220cd [util] Make plists more const-correct 2021-02-25 11:55:25 +09:00
Bill Currie f8961e4376 [qflight] Fix some typos in comments 2021-02-25 10:12:19 +09:00
Bill Currie 6c1d6666b4 [vulkan] Actually write the alias g-buffer commands
It seems to help for some reason.
2021-02-24 20:24:46 +09:00
Bill Currie 10a1b99a92 [vulkan] Implement lighting and compose passes
Lighting doesn't actually do lights yet, but it's producing pixels.
Translucent seems to be working (2d draw uses it), and compose seems to
be working.
2021-02-24 19:58:31 +09:00
Bill Currie 9229b67633 [vulkan] Clean up the new render pass and framebuffers 2021-02-24 16:27:56 +09:00
Bill Currie e6ecf5e855 [vulkan] Fix up commands for deferred rendering
Nothing gets output yet (lighting and composite passes not implemented),
but everything passes validation until exit (not destroying everything).
2021-02-23 15:43:02 +09:00
Bill Currie 82eabb5ca2 [vulkan] Parse clear values
And get the render pass working in general. Note that this is only the
render pass and frame buffers: actual commands still have problems.
2021-02-23 14:37:48 +09:00
Bill Currie 0cd2ece38e [util] Correct element order for vector expressions 2021-02-23 14:37:13 +09:00
Bill Currie cbc8ad271a [vulkan] Convert bsp and draw to deferred
This has bsp and draw passing muster with the validation layers.
2021-02-19 11:14:54 +09:00
Bill Currie 4245c6ad3b [vulkan] Specify subpass number in pipeline def
This gets the alias model render pass and pipeline passing validation.

I don't know why I didn't add the subpass field to the
VkGraphicsPipelineCreateInfo parser def, though it could be I simply
missed it, or I thought I wouldn't need it at the time.
2021-02-17 13:50:36 +09:00
Bill Currie 64740b0f73 [vulkan] Create shaders for alias deferred rendering
A simple (no uv output) vertex shader that still blends the two frames,
and the relevant g-buffer fragment shader.
2021-02-17 13:35:19 +09:00
Bill Currie b08c3881b9 [vulkan] Add a comment about using size_t
Due to wanting to access array sizes when parsing uint32_t type values,
parse_uint32_t needs to handle size_t values even though it throws out
any excess bits.
2021-02-17 13:32:04 +09:00
Bill Currie 4bda49d798 [util] Correct the lex priority for int constants
The actual need to specify unsigned int constant is a bit of a pain, but
not being able to do so due to lex priority errors is even more of a
pain.
2021-02-17 13:29:53 +09:00
Bill Currie a94949c009 [vulkan] Start moving towards a deferred renderer
After getting lights even vaguely working for alias models, I realized
that it just wasn't going to be feasible to do nice lighting with
forward rendering. This gets the bulk of the work done for deferred
rendering, but still need to sort out the shaders before any real
testing can be done.
2021-02-14 11:35:06 +09:00
Bill Currie 121425a75b [vulkan] Allow all struct objects to be referenced 2021-02-14 11:32:57 +09:00
Bill Currie cffd48434c [vulkan] Move the shaders into their own directory 2021-02-10 17:43:11 +09:00
Bill Currie 55104ac430 [util] Allow "any type" results for cexpr
Setting the result type cexpr_exprval tells cexpr to simply return whoe
exprval object rather than the referenced value, thus allowing the
caller to check the type when the expression is context sensitive.
2021-02-09 19:30:30 +09:00
Bill Currie 35f12c36ff [util] Catch some more cexpr errors 2021-02-09 19:29:48 +09:00
Bill Currie 5535d1f8e6 [util] Keep track of plist dictionary key order
The order in which keys are added to the dictionary object is
maintained. Adding a key after removing an old key adds the new key to
the end of the list rather than reusing the old key's spot.
2021-02-09 17:03:33 +09:00
Bill Currie 0dcd946063 [util] Add plist parser for dictionary -> array
PL_ParseLabeledArray works the same way as PL_ParseArray, but instead
takes a dictionary object. The keys of the items are ignored, and the
order is not preserved (at this stage), but this is a cleaner solution
to getting an array of objects when the definitions of those objects
need to be accessible by name as well.
2021-02-09 15:24:28 +09:00
Bill Currie bc763da9f6 [qfcc] Fix a typo in the man page 2021-02-09 15:02:22 +09:00
Bill Currie 14e4fd9f6a [util] Pass context to the plist array/symtab parser allocator 2021-02-09 15:01:55 +09:00
Bill Currie a408fd40da [util] Make plist more const-correct 2021-02-09 14:56:48 +09:00
Bill Currie c8afbdf0f5 [util] Add an object-based fixed array allocator 2021-02-09 14:56:11 +09:00
Bill Currie fdba822809 [util] Fix a code-comment disagreement
And the comment was correct :P
2021-02-09 14:43:45 +09:00
Bill Currie 8664a5b969 [util] Enable parser debugging for cexpr
Not actually turned on in the code, but cexpr_yydebug is present.
2021-02-09 10:02:04 +09:00
Bill Currie dfa7af03c6 [util] Plug a thread-safety hole in plists 2021-02-09 09:57:07 +09:00
Bill Currie 84dc73da2c [test] Get the tests building again
They happen to all pass, which is nice :)
2021-02-05 21:43:12 +09:00
Bill Currie f023675f8c [vulkan] Clean up draw's memory handling a little
Use cmem for pic and cachpic name allocations. If nothing else, it at
least keeps memory a little less fragmented.
2021-02-05 16:25:08 +09:00
Bill Currie c536a363ec [vulkan] Remove namehack.h
Never really wanted in the first place (back when I did the plugin
renderers), but I didn't feel like doing the required work to avoid it
at the time. At least with Vulkan being a fresh start in an environment
that's already plugin-friendly, there was no real work involved. I'll
get to the other renderers eventually (especially now that I know gdb
does the right thing when there are multiple functions with the same
name).
2021-02-05 11:10:43 +09:00
Bill Currie f633a846a1 [vulkan] Make the frames in flight configurable 2021-02-05 11:06:18 +09:00