point entities recognition is malformed in general
leak is about point entities, detection by origin key presence is weak, because there may exist entity w/o this key at 0 0 0
group entities may have origin too
detection by primitives presence haven't been working for _decal, as its primitive gets freed at this point
New code produces same result without loop at all, so
it cannot fall in infinite loop, and it is faster in
use cases requiring more than one loop in previous code.
The Unvanquished vega map is known to trigger the bug:
https://github.com/UnvanquishedAssets/map-vega_src.dpkdir
I reproduced it multiple time on various hardware (8 core FX-9590,
12 core/24 thread Ryzen 9 3900X) with commit af40508 and using
final compilation profile edited to use -fastbounce instead
of -fast option.
The symptom is simple, q3map2 stucks there:
--- Radiosity (bounce 1 of 8) ---
--- RadCreateDiffuseLights ---
0...1...2...3..
Or somewhere else in that progression bar given your hardware
and the amount of core your CPU has.
When stuck, all the CPU cores are running 100% but the thread
never returns (a strace can reveals it, a gdb backtrace too).
Thanks to @slipher for the precious advices and improving my first
attempt to fix it.
For more information on the issue, I asked:
> which negative value never can become positive
> when incremented infinitely?
slipher said:
> for a double, any value less than -2^53 would have this property
> don't know for float off the top of my head
But then, it means that's theorically verified this loop was able
to run forever in some case.
I don't know what this code is doing anyway, but at least we can
keep the behaviour without requiring to understand it.
Correct math requires the ambient component of the lightgrid to be zero
in that case. However, q3 ignores lightgrid cells with all zero ambient
value, EVEN if the directed value is nonzero.
This change sets the ambient value to #010101 if it'd be pitch black. This
should be a minimal change without affecting light hue that fixes
lightgrid rendering. In engines like DarkPlaces, almost no map should
look different from this.
Fixes https://gitlab.com/xonotic/netradiant/-/issues/137
q3map2: fix inconsistency, introduced in d92c32d453
(_remap result could depend on _remap keys order, e.g. remapping src: moo/rock, moo/sand-rock by: rock, sand-rock suffix matches; rock could be used for moo/sand-rock)
fix -bsp crash with .bsp sent as map path
* fix: qer_editorimage, q3map_lightImage etc work with file names, containing period
(i.e. 'file.name.ext' names; don't StripExtension() twice in ImageLoad() for that)
The arrays were always meant to be variably sized, and objects are only ever allocated dynamically. Object size computations are simplified with this change.
Flexible arrays were introduced in C99, so this change means that we will require a C99-conforming compiler henceforth.
Move -keeplights help from -light stage to -bsp. Add other ~40 arguments
that were missing from help. My main focus was on the -convert stage
but I tried to document the rest as well. Some descriptions are copied
from message when enabling the option.
Running `q3map2 -fs_forbiddenpath -v mapname.map` would crash because
-v gets replaced with NULL in main().
Running `q3map2 -threads` would crash because missing next argument
for number of threads.
similar to -lightmapsize N: Size of lightmaps to generate (must be a power of two)
but instead of native external lightmaps enables hack to reference them in autogenerated shader (for vanilla Q3 etc)
The arrays were always meant to be variably sized, and objects are only ever allocated dynamically. Object size computations are simplified with this change.
Flexible arrays were introduced in C99, so this change means that we will require a C99-conforming compiler henceforth.
AAS_LoadAASLump will return 0/NULL in an error case. However it will also
return the input buffer pointer if length is 0, and the input buffer pointer
may be 0/NULL in the case where AAS_LoadAASLump is meant to allocate memory.
This means that it can return 0/NULL in a perfectly legal case where the lump
length is 0. Since AAS_LoadAASFile inteprets this as a fatal error, that's
bad.
I'm not sure how to best disambiguate this, but a low-touch fix is for the
caller of AAS_LoadAASLump to be OK with a returned NULL pointer if the lump
length is 0.
Also: added a missing break statement to avoid a spurious "don't know what to
do" message when using the aasinfo switch.
The settings in cfgq3.c had diverged from the actual fields and defaults in
these ways:
- extra field phys_maxacceleration
- missing fields phys_walkaccelerate, phys_swimaccelerate, rs_maxfallheight
- different defaults for phys_airaccelerate, phys_maxstep, phys_maxwaterjump
Also the code in aas_cfg.[ch] for reading the settings was missing
rs_maxfallheight.
It's brittle to require multiple different files to agree on these fields, but
rather than fix that issue this is just a band-aid to bring things back into
alignment so that custom configs based on the example file can be used again.
* brushexport plugin fix: invert Y during YZ swap; invert V of UV coords (correct texturing)
* brushexport plugin: default to 'Don't collapse' option
q3map2: * obj export: save in popular 'Y = Up, -Z = Forward' format
* picomodel::obj: load as popular 'Y = Up, -Z = Forward' format
* picomodel::obj: fix support of back references in faces
misc...
* fix scaling for doom3 brush format
* Pointfile function: try to also load .pts leak line file (q1), if .lin isn't found
* snap transform origin for flip commands
* change light intensity save format from %f to %g to prevent .99999 on transforms
* support 'stupid quake bug' (invert pitch in angles)(generic and miscmodel ents)(cfg: entities="quake" in .game)
* clipper: place 1st and 2nd points far, 3rd near to ease 3 points clipping
* fix: parsing of /* */ comments, having * or / inside
Radiant:
misc...
encapsulate RETURN_FALSE_IF_FAIL macros with do while 0: minus warnings
* button to call color selector from ents inspector color entry
* explanatory text on initial engine path configuration
* don't show Global preferences by default, except first start
* activate {xyview, camera, texbro glwidget} on mouse button press and scroll, so {texbro treeview and console} hotkeys do not override global ones
* activate windows, containing xyview, camera, texbro on mouse scroll
* fix: autoapplying trigger texture on entity creation is undoable
* fix: texbro m1/2 x2 work, when some tag is loaded
* bold key and spawnflags names in entity inspector entity description
* fix: +CameraFreeMove* command, +shift, -CameraFreeMove*, -shift = still moving (reason: caps letter)
* -backsplash (float)scale (float)distance: scale area lights backsplash fraction + set distance globally
(distance < -900 to omit distance setting); def = 1 23; real area lights have no backsplash (scale = 0)
q3map_backsplash shader keyword overrides this setting
Radiant:
binds...
* alt + m1 click/drag in component modes: select objects
misc...
* fix: selected entity and brush numbers display in 'Find brush' dialog
* prefer to display texture width and height in status bar over name (PANGO_ELLIPSIZE_START)
* allow search shortcut (ctr+f in win) in entity inspector -> entity class list
* fix: don't save empty group entities (but worldspawn)
binds...
* ctrl + shift + m1 (in texbro): open shader in external editor
misc...
* fix: do not unmaximize external shader editor on win
* fix: blank cursor in radiant after calling external shader editor on win
* fix shader editors stuff for non uindowses
* 'Shader Editor Command' preference is available on win (is used, if set; otherwise try default os action for file)
* fix: 'Shader Editor Command' preference allows selecting executable via dialog
* GDK_HAND2 cursor in clipper tool mode
* fix: clipper points have numeric labels
* '2d zoom in to mouse pointer' option works for alt + m2 zoom
* '3d zoom in to mouse pointer' option (def = yes)
* new slightly less careful, but much faster lightmaps packing algorithm (allocating... process)
* -slowallocate switch to enable old lightmaps packing algorithm
* Subsampling...collapsing...sorting...allocating...storing...projecting... timers
* new area lights backsplash algorithm ( by Jelvan ), hijacking temp area lights ( to simulate volumetric behavior of source ones )
* fix: create backsplash for area lights, while q3map_lightsubdivide'ing too
* no backsplash for area lights, if surf == sky
* report patches count in -info
* -exportents to exports entities to a .ent file
* unvanquished game support
* -fs_basepath: can be used more than once to look in multiple paths (Sets the given path as main directory of the game)
* -fs_game: can be used more than once (Sets a different game directory name (default for Q3A: baseq3))
* -fs_pakpath <dir>: Specify additional custom path to assets (can be used more than once to look in multiple paths)
* fix undocumented unexpected LokiInitPaths
* -help option (-h, --help)
* _setmaxstdio(2048) for windows
* game_qfusion update
Radiant:
misc...
* wrap long command lines in build menu -> customize
* map info dialog: + Total patches, Ingame entities, Group entities, Ingame group entities counts
* fix: map info dialog -> sort by count works
* fix of: minimize main wnd, close, start = cam, cons, texbro null size