Commit Graph

544 Commits

Author SHA1 Message Date
Garux a17bf05f5c more information in "StrList overflow" error 2021-02-07 07:23:46 +03:00
Garux 54f7daa887 more PathExtensionless use 2021-02-07 07:18:10 +03:00
Garux 5fd7b340df * discard excess portals in the void (great optimization for maps with void areas in between of playable areas and non rectangular maps)
(excess portals there are effect of _blocksize)
	* optimize FloodPortals() (also fix stack depth crash in debug mode due to recursive calls)
	* fix xml_Select() of leaked entity (was selecting last map entity always)
	* xml_Select() leaked entity exactly in the beginning of leak line
2021-02-06 22:22:59 +03:00
Garux e729f7b898 prevent stack overflow 2021-02-02 00:26:21 +03:00
Garux 2bf53ef643 fix overlook introduced in 36b63e1d2c 2021-01-30 16:50:40 +03:00
Garux 99a5ef0416 refactor entity key values routines 2021-01-30 16:23:31 +03:00
Garux 8425ce3c3e refactor foliage_t 2021-01-29 22:40:09 +03:00
Garux 762699287e refactor surfaceModel_t 2021-01-29 21:11:56 +03:00
Garux 276d1f5875 safe string in indexMap_t 2021-01-29 20:46:06 +03:00
Garux 40ab7fa26c remove excess string overflow checks, fix warnings 2021-01-29 05:14:33 +03:00
Garux 623163ae9c remove unused markers 2021-01-28 02:12:15 +03:00
Garux e11aede11a refactor surfaceType_t enum 2021-01-27 19:43:53 +03:00
Garux 1efff8cdfe refactor enum vstatus_t 2021-01-27 11:53:32 +03:00
Garux 62a0ae5623 prevent string overflows 2021-01-26 22:31:19 +03:00
Garux 3ff224cbdf fix texture projection decompilation
in C this check was equal to
abs((int)dist) >= distanceEpsilon
comparing float dist to distanceEpsilon is not sufficient, as points are not precise enough, plus they are snapped
2021-01-25 08:36:16 +03:00
Garux d0dcce342b use LightFlags::FastActual shortcut 2021-01-25 07:29:46 +03:00
Garux bdfd864670 refactor enums
credits for class BitFlags go to Jelvan <3
2021-01-25 01:33:56 +03:00
Garux 7297e8758b remove unused light_shadows.cpp 2021-01-25 01:11:26 +03:00
Garux 20b908e31b remove excess typedef struct declarations 2021-01-23 19:26:50 +03:00
Garux 54c38610bf use std::list<epair_t> 2021-01-23 17:25:47 +03:00
Garux 36b63e1d2c turn entities array to std::vector<entity_t> 2021-01-23 15:39:42 +03:00
Garux b0e62198ba use safe strings more 2021-01-21 18:41:16 +03:00
Garux 0ab896b84a remove MAC_STATIC hack 2021-01-21 16:17:23 +03:00
Garux f3c26c791f use safe strings more 2021-01-21 16:08:53 +03:00
Garux 8b204ac054 add and use class PathExtensionless 2021-01-21 15:15:07 +03:00
Garux 15e4b8e850 manage model shaders remapping 2021-01-21 07:19:15 +03:00
Garux fe5c0879b4 remove -tmpin & -tmpout switches, as at best they were prepending tmp/ to absolute path 2021-01-20 12:48:10 +03:00
Garux 3b39a5754d prevent filename overflow in model .skin loader
strip model extension during filename construction
add variadic template operator to StringOutputStream for inline strings creation
2021-01-20 11:59:16 +03:00
Garux cfa502df6e safe string for globalCelShader 2021-01-19 22:40:58 +03:00
Garux cbeccc7e3a use safe string in GetIndexedShader
fix custom shader overflow check
2021-01-19 22:12:53 +03:00
Garux c3437b7833 use safe strings in shaderInfo_s
turn ImageLoad() to expect extensionless path as input
2021-01-19 18:58:18 +03:00
Garux 9590d602d3 use String64 for shaderInfo_s::skyParmsImageBase
add variadic template operator to StringFixedSize for inline strings creation
2021-01-19 17:21:54 +03:00
Garux da3b05728c use safe string for shaderInfo_t.shader 2021-01-19 01:24:21 +03:00
Garux 3578370061 fix the build 2021-01-16 17:52:33 +03:00
Garux 13524d59ef fix the build 2021-01-16 15:10:59 +03:00
Garux fafa271a46 turn quake3 tools to cpp 2021-01-15 01:37:23 +03:00
Garux b2bc2077e5 prevent division by zero, which spreads darkness during bounces
source of the problem is located somewhere else
2021-01-05 01:34:55 +03:00
Garux d074634463 SetupGrid() after _ambient key read 2021-01-01 17:41:11 +03:00
Garux 97f0e61ccc initialize rawGridPoints.ambient correctly 2021-01-01 17:40:06 +03:00
Garux e1f3b25bc6 consider _decal in leak detection
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
2020-12-14 08:36:55 +03:00
Garux db07c3459d * packer, repacker: handle nodraw patches correctly; warn on visible surface, having shader w/o maps (typically watercaulk) 2020-12-08 03:03:42 +03:00
Garux 5cedd26c75 * -repack -analyze switch: only analyze bsps and exit (to dump bsp resource calls) 2020-12-08 02:45:48 +03:00
Garux dd3db2f147 bump -repack bsp list size 2020-12-08 02:34:55 +03:00
Garux f30ee07376 * packer, repacker: also handle fogs without drawsurfaces 2020-11-25 10:29:49 +03:00
Garux d346f1ee07 packer, repacker: emit warning on "model2" key been found 2020-11-24 20:33:33 +03:00
Garux 06267e67cb repacker: fix odd WARNING3: %s : about to include shader for excluded texture
when repack.exclude has texture = shader from game.exclude
2020-11-24 19:59:51 +03:00
Garux 103ac6931e * fix -fixaas 2020-11-08 13:04:29 +03:00
Garux af71efc0e6 * no shaderlist.txt or empty one = load all shaders 2020-10-25 09:07:29 +03:00
Thomas Debesse 1cf7b72e6b q3map2/light_bounce: prevent infinite loop on obscure bias compute
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.
2020-08-19 08:32:36 +03:00
Garux 4bcce46a59 q3map2: -onlyents: support *.ent as map file param 2020-06-30 13:15:10 +03:00