ValveSoftware / source-sdk-2013

The 2013 edition of the Source SDK
https://developer.valvesoftware.com/wiki/SDK2013_GettingStarted
Other
3.84k stars 2.02k forks source link

Incorrect usage of FLT_MIN #519

Open Kefta opened 3 years ago

Kefta commented 3 years ago

Reposting from https://github.com/ValveSoftware/source-sdk-2013/issues/518 since the creator is banned. These usages from FLT_MIN should be replaced with std::numeric_limits<float>::lowest(), and FLT_MAX with std::numeric_limit<float>::max() for consistency though these are standard to be equivalent. Here are all the incorrect usages in the public repo: https://github.com/ValveSoftware/source-sdk-2013/blob/0d8dceea4310fde5706b3ce1c70609d72a38efdf/sp/src/public/builddisp.cpp#L2779 https://github.com/ValveSoftware/source-sdk-2013/blob/0d8dceea4310fde5706b3ce1c70609d72a38efdf/sp/src/utils/vrad/vrad_dispcoll.cpp#L868 https://github.com/ValveSoftware/source-sdk-2013/blob/0d8dceea4310fde5706b3ce1c70609d72a38efdf/sp/src/utils/vrad/vrad_dispcoll.cpp#L1017 https://github.com/ValveSoftware/source-sdk-2013/blob/0d8dceea4310fde5706b3ce1c70609d72a38efdf/sp/src/game/client/c_effects.cpp#L1678

This has been (incorrectly but passably) fixed in Garry's Mod as of Aug 6: https://commits.facepunch.com/388626

Paradise-floor commented 3 years ago

Yes, need to punish the developers who made this mistake!

punishman commented 3 years ago

I think Valve has no active developers. Or no money for fixing errors)

SC1040-TS2 commented 3 years ago

Replying to https://github.com/ValveSoftware/source-sdk-2013/issues/519#issue-962826784

Hang on, are there also Source SDK MP analogues for these, or were these only found in the Singleplayer branch?

Voltstro commented 3 years ago

@SC1040-TS2 They are also in the MP branch.

Kefta commented 3 years ago

The code for these portions is identical between MP and SP.

SC1040-TS2 commented 3 years ago

Understood. Just clarifying that given MP entries were not posted.

On a different relevant note, I noticed that the vecMin values are specified as FLT_MAX, while the vecMax values are specified as FLT_MIN. Is this correct, or also an incorrect usage that must be swapped to fix?

Kefta commented 3 years ago

It is a correct usage - they are used in a loop to pick the min/max values from a range, so everything less than FLT_MAX/greater than std::numeric_limits::lowest() respectively should be considered. If they were swapped, the checks would never pass and thus the vectors would always keep their extreme values.

SC1040-TS2 commented 3 years ago

It is a correct usage - they are used in a loop to pick the min/max values from a range, so everything less than FLT_MAX/greater than std::numeric_limits::lowest() respectively should be considered. If they were swapped, the checks would never pass and thus the vectors would always keep their extreme values.

Understood. Just making sure that was the case, for my own understanding's sake.

punishman commented 3 years ago

I think it will not be correct usage. Need init values with first value, and FLT_MIN/FLT_MAX not be used????