Commit graph

12834 commits

Author SHA1 Message Date
Bill Currie
3b72c9847a [vulkan] Add list of views to qfv_output_t
I'm not sure I like it, but it was an easy solution to dealing with
per-frame views when setting up a renderpass that has a framebuffer
spec.
2022-09-22 09:35:57 +09:00
Bill Currie
e1c4428c8e [vulkan] Set source item for cexpr errors
It's always nice getting at least line numbers from an error message
(even if I still have to hunt for the right source "file").
2022-09-22 09:35:56 +09:00
Bill Currie
3603fa75cd [vulkan] Make Vulkan_CreateRenderPass more generally useful
It now lives in vulkan_renderpass.c and takes most of its parameters
from plist configs (just the name (which is used to find the config),
output spec, and draw function from C). Even the debug colors and names
are taken from the config.
2022-09-22 09:35:56 +09:00
Bill Currie
e14e8050dc [vulkan] Remove vkparse.hinc from vkparse.h
Kind of silly having the vkparse_internal define when it was just
bypassed anyway.
2022-09-22 09:35:56 +09:00
Bill Currie
08f33d2f3a [vulkan] Rename the renderpass files
I plan on moving the current hard-coded render pass creation from
vulkan_vid_common and this maintains the (possibly silly) naming
convention).
2022-09-22 09:35:56 +09:00
Bill Currie
6a7c2cb2a1 [vulkan] Clean out the old render pass creation code
QFV_CreateRenderPass is no longer used, and QFV_CreateFramebuffer hasn't
been used for a long time. The C file is still there for now but is
basically empty.
2022-09-22 09:35:56 +09:00
Bill Currie
78437c2c90 [vulkan] Parse VkRenderPass directly
QFV_CreateRenderPass doesn't support pNext and I don't particularly feel
like making it do so at this stage (tempted to remove it).
2022-09-22 09:35:56 +09:00
Bill Currie
f04108ae3e [vulkan] Switch to using vkGetPhysicalDeviceProperties2
Necessary for getting VkPhysicalDeviceMultiviewProperties (and others,
but not at this time).
2022-09-22 09:35:56 +09:00
Bill Currie
e5932d1f92 [vulkan] Support Vulkan's pNext in vkparse/vkgen
The real reason for the delay in implementing support for pNext is I
didn't know how to approach it at the time, but with the experience I've
gained using and modifying vkparse, the solution turned out to be fairly
simple. This allows for the use of various extensions (eg, multiview,
which was used for testing, though none of the hookup is in this
commit). No checking is done on the struct type being valid other than
it must be of a chainable type (ie, have its own pNext).
2022-09-22 09:35:56 +09:00
Bill Currie
125821fcdd [render] Add basic 2d line drawing
The software renderer uses Bresenham's line slice algorithm as presented
by Michael Abrash in his Graphics Programming Black Book Special Edition
with the serial numbers filed off (as such, more just so *I* can read
the code easily), along with the Chen-Sutherland line clipping
algorithm. The other renderers were more or less trivial in comparison.
2022-09-22 09:35:56 +09:00
Bill Currie
ea781c9dcc [qfmap] Fix some blender bit-rot. 2022-09-22 09:35:56 +09:00
Bill Currie
6e8a3b8153 [qfmap] Parse field info from quaked comments
Id's comments are a little inconsistent, but for the most part usable
info can be extracted. While not yet supported, Arcane Dimensions'
comments are extremely consistent (just some issues with hyphen counts
in separators), so parsing out usable info will be fairly easy. The hard
part will be presenting it.
2022-09-22 09:35:56 +09:00
Bill Currie
2e14300a11 [client] Auto-detect light color range
Some mappers use 0-255 and others use 0-1. Detection method adapted from
ericw light (seems to be a good bet as it seems to be popular).
2022-09-22 09:35:44 +09:00
Bill Currie
c6d73eaf64 [vulkan] Add light count display
Enabled by 'developer lighting'. It was good for confirming that the
lights in ad_e1m1 (Doom Hangar 16) were actually being output (over 600
of them sometimes, ouch). Turned out to be the color scale ambiguity.
2022-09-22 09:31:04 +09:00
Bill Currie
fb4bb22048 [client] Add cl_(min|max)(pitch|roll) cvars
The pitch cvars are taken from quakespasm because I ran into a button I
couldn't shoot with the 80 degree limit, but I figured I'd add roll
limits while I was at it.
2022-09-22 09:31:04 +09:00
Bill Currie
3603f90718 [vulkan] Implement BSP surface transparency
Surfaces marked with SURF_DRAWALPHA but not SURF_DRAWTURB are put in a
separate queue for the water shader and run with a turb scale of 0.
Also, entities with colormod alpha < 1 are marked to go in the same
queue as SURF_DRAWALPHA surfaces (ie, no SURF_DRAWTURB unless the
model's texture indicated such).
2022-09-22 09:31:04 +09:00
Bill Currie
a936336e84 [model] Support the transparent texture marker
Textures whose names start with a { are meant to be rendered with
transparency. Surfaces using those textures are marked with
SURF_DRAWALPHA.

Unfortunately, the mip levels of ad_tears' transparent textures use the
wrong color so only the highest LOD works properly, but those textures
are meant to be loaded from external files anyway, it seems.
2022-09-22 09:31:04 +09:00
Bill Currie
3a03cc9fda [sw] Use vid instead of dev for a debug print 2022-09-22 01:49:18 +09:00
Bill Currie
918d648053 [client] Fix sbar hud resizing with window size
hud_view has an extra layer that hid its missing resize_x
2022-09-22 01:40:30 +09:00
Bill Currie
f758f5fb70 [renderer] Respond to window size changes
Currently, only gl, glsl and sw are working, vulkan needs its swapchain
to be rebuilt, and there are minor issues with the hud and console
resizing.
2022-09-22 01:15:06 +09:00
Bill Currie
ef8b267826 [x11] Allow the window to be resized
There's no maximum size, but the minimum size is currently 32x20.
2022-09-22 01:09:27 +09:00
Bill Currie
d149457241 [vid] Add a listener for window size changes
A listener is used instead of (really, as well as) ie_app_window events
because systems that need to know about windows sizes may not have
anything to do with input and the event system.
2022-09-22 01:07:54 +09:00
Bill Currie
fdfdf9056a [renderer] Add function to destroy frame buffers
Needed for window resizing for fisheye and warp buffers (main buffers
will be taken care of by the drivers).
2022-09-21 23:47:14 +09:00
Bill Currie
4578b1af0d [vid] Remove console view from viddef_t
This breaks console scaling for now (con_width and con_height are gone),
but is a major step towards window resize support as console stuff
should never have been in viddef_t in the first place.

The client screen init code now sets up a screen view (actually the
renderer's scr_view) that is passed to the client console so it can know
the size of the screen. The same view is used by the status bar code.

Also, the ram/cache/paused icon drawing is moved into the client screen
update code. A bit of duplication, but I do plan on merging that
eventually.
2022-09-21 17:31:18 +09:00
Bill Currie
2473584759 [vid] Clean out an unused variable from context_win
It's dead, Jim.
2022-09-21 12:37:55 +09:00
Bill Currie
0921235aa6 [console] Fix a lot of the console view placement issues
Things seem to be at least close to the right place now.

Input line handling has been made more object-oriented in that the
collection of objects required for a single input line (command, say,
say_team) are bundled into one object with just one set of handlers for
resize and draw. Much tidier.
2022-09-21 12:37:55 +09:00
Bill Currie
230e23db5d [console] Update a little for event handling
Con_CheckResize is no longer necessary thanks to the ie_app_window
event, and the client doesn't need C_ProcessInput so that is now
optional.
2022-09-21 12:13:06 +09:00
Bill Currie
8be5d35b0d [ui] Add support for setting view data early
view_new sets the geometry, but any setgeometry that need a valid data
pointer would get null. It might be better to always have the data
pointer, but I didn't feel like doing such a change at this stage as
there are quite a lot of calls to view_new. Thus view_new_data which
sets the data pointer before calling setgeometry.
2022-09-21 11:53:49 +09:00
Bill Currie
e407cfa918 [cl_menu] Reorder menu pic loading for better layout
The scrap allocator works better if taller rects are allocated first (so
long as they're not too tall, more tuning needed) and qplaque is taller
than mainmenu (but draw order is reversed).
2022-09-20 19:43:53 +09:00
Bill Currie
058e919273 [renderer] Use better heuristics for scrap allocation
More tuning is needed on the actual splits as it falls over when the
lower rect gets too low for the subrects being allocated. However, the
scrap allocator itself will prefer exact width/height fits with larger
cutoff over inexact cuts with smaller cutoff. Many thanks to tdb for the
suggestions.

Fixes the fps dropping from ~3700fps down to ~450fps (cumulative due to
loss of POT rounding and very poor splitting layout), with a bonus boost
to about 4900fps (all speeds at 800x450). The 2d sprites were mostly ok,
but the lightmaps forming a capital gamma shape in a 4k texture really
hurt. Now the lightmaps are a nice dense bar at the top of the texture,
and 2d sprites are pretty good (slight improvement coming next).
2022-09-20 19:32:49 +09:00
Bill Currie
1fdedbaf33 [renderer] Report scrap rectangle counts
Stats are good. More stats even better :) I wanted to see just how many
lightmaps were being created in e1m3.
2022-09-20 19:32:41 +09:00
Bill Currie
398405c8d6 [console] Remove old_console_t struct
This replaces old_console_t with con_buffer_t for managing scrollback,
and draw_charbuffer_t for actual character drawing, reducing the number
of calls into the renderer. There are numerous issues with placement and
sizing, but the basics are working nicely.
2022-09-20 16:14:55 +09:00
Bill Currie
d6d45bf07c [console] Add a function to clear the scroll-back buffer
Needed for when the console display is cleared.
2022-09-20 12:14:01 +09:00
Bill Currie
11e978b4db [console] Fix a signed comparison warning
I'm not sure why that didn't trigger in a linux build. Maybe gcc 12
assumed the result would be positive (I think I'm still using 11 for
mxe).
2022-09-20 10:50:15 +09:00
Bill Currie
474f01d321 [renderer] Return count of lines printed to char buffer
This allows users to know the number of terminated lines in the printed
text without having to redundantly count the lines.
2022-09-20 10:27:24 +09:00
Bill Currie
1fa202608e [qfcc] Don't free duplicate method when merging
The method is still held by known_methods, so freeing it causes grief.
However, it may cause a leak thus the free is only commented out. More
investigation is needed. I'm surprised the problem didn't show on linux,
but cygwin-native hit it and valgrind on linux found the spot :)
2022-09-19 16:39:25 +01:00
Bill Currie
1cd6a174fe [build] Correct cygwin system type
cygwin is not windows, so trying to build a win32 app on cygwin-native
doesn't work too well.
2022-09-19 16:36:29 +01:00
Bill Currie
e36adb07ec [net] Don't include windows.h or winsock.h directly
Including them kills the definition for CMSG_DATA.
2022-09-19 16:32:45 +01:00
Bill Currie
08328f4076 Fix some cygwin portability issues
Cygwin's headers seem to be rather out of date with respect to linux
with regards to signed types, especially ctype.
2022-09-19 16:31:08 +01:00
Bill Currie
fb5477e0ab [build] Remove -no-cygwin from mingw builds
It seems to have been deprecated. This gets --host builds working,
although some libs don't work properly due to having only dlls and I
guess mingw stuff isn'n on any paths.
2022-09-19 14:13:16 +01:00
Bill Currie
ead14d7268 [build] Fix a pile of issues building under cygwin
Many thanks to jdp_ for finding them initially and getting me to take a
look at things.
2022-09-19 13:41:24 +01:00
Bill Currie
745778979a [image] Update stub WritePNG's definition
Fixes some bitrot for when libpng is unavailable
2022-09-19 13:38:58 +01:00
Bill Currie
feba790348 [qfcc] Use _algined_free when using _aligned_malloc
Windows requires the two to be paired. I think this is the first time I
really tested windows qfcc on windows.
2022-09-19 13:37:08 +01:00
Bill Currie
3eceb444d3 [console] Add test for buffer line tracking
Seems to work, so I guess con_buffer is ok now.
2022-09-18 16:07:22 +09:00
Bill Currie
48e5848a41 [console] Rework con_buffer ring buffers to have gaps
I really don't know why I tried to do ring-buffers without gaps, the
code complication is just not worth the tiny savings in memory. In fact,
just the switch from pointers to 32-bit offsets saves more memory than
not having gaps (on 64-bit systems, no change on 32-bit).
2022-09-18 11:35:09 +09:00
Bill Currie
5e8d18a774 [console] Add failing test for adding to full 1-line buffer
I've decided that appending to a full single-line buffer should simply
scroll through the existing text. Unsurprisingly, the existing code
doesn't handle the situation all that well. While I've already got a fix
for it, I think I've got a better idea that will handle full buffers
more gracefully.
2022-09-17 15:31:52 +09:00
Bill Currie
c8c1d2e642 [console] Add a pile of of comments to Con_BufferAddText
And make tail_line setup a little clearer.
2022-09-17 14:22:28 +09:00
Bill Currie
9a92496662 [console] Don't overwrite tail line if same as current line
This fixes the current line object getting corrupted by the tail line
update when the buffer is filled with a single line. There are probably
more tests to write and bugs to fix :)
2022-09-17 13:56:23 +09:00
Bill Currie
d13df6cd37 [console] Add failing unit test for con_buffer
I was looking through the code for Con_BufferAddText trying to figure
out what it was doing (answer: ring buffer for both text and lines) and
got suspicious about its handling of the line objects. I decided an
automated test was in order. It turns out I was right: filling the
buffer with a single long line causes the tail line to trample the
current line, setting its pointer and length to 0 when the final
character is put in the buffer.
2022-09-17 12:59:36 +09:00
Bill Currie
437e447b6b [renderer] Add a buffer print function
It handles basic cursor motion respecting \r \n \f and \t (might be a
problem for id chars), wraps at the right edge, and automatically
scrolls when the cursor tries to pass the bottom of the screen.

Clearing the buffer resets its cursor to the upper left.
2022-09-16 00:58:25 +09:00