really fix the confusion with game entity and refentity numbers
for any natural number M, the following is logical as a whole:
- the array size for refentities is M;
- the refentity number limit is M-1, ie., each refentity number is in [0..M-1];
- the special number for the world is M.
before r1429, the code was roughly the following:
// constants related to the game, should not be used by the renderer
// renderer stuff
refEntity_t refEntities[MAX_ENTITIES];
int numRefEntities = 0;
void addRefEntity(refEntity_t re)
{
if (numRefEntities >= ENTITYNUM_WORLD)
return; // full
refEntities[numRefEntities++] = re;
}
void render(int num)
{
if (num == ENTITYNUM_WORLD)
renderWorld();
else
renderRefEntity(refEntities[num]);
}
so before r1429,
- the array size for refentities was 1023;
- the refentity number limit was 1021, ie., each refentity number was in [0..1021]; and
- the special number for the world entity was 1022.
this was a small waste of memory, as the last array element wasn't used.
r1429 changed
if (numRefEntities >= ENTITYNUM_WORLD)
to
if (numRefEntities >= MAX_ENTITIES).
this creates the following configuration:
- the array size for refentities is 1023;
- the refentity number limit is 1022, ie., each refentity number is in [0..1022]; and
- the special number for the world entity is 1022.
r1429 just makes things worse: it allows 1 more refentity to be added, but that entity doesn't get drawn anyway, as its number will be equal to the special number for the world. this is a small waste of not only memory, but also processing time.
perhaps in XreaL,
ENTITYNUM_WORLD is a game entity constant, and has nothing to do with refentities. a new REFENTITYNUM_WORLD constant should be added to denote the special number for the world, and that constant should be used in the renderer code in place of ENTITYNUM_WORLD. so define such a constant, and let it be equal to MAX_ENTITIES, which is 1023.
- tidy up top of tr_types.h a bit, change flags to hex representation
- make ROM cvar enforcing really work
- remove cg_stereoSeparation from cgame as it is obsolete.
- Add CG_DrawCrosshair3D so people see crosshair correctly when stereoseparation is enabled
* Revert to using literal function pointers for GL extensions rather than PFN*
typedefs as some platforms' headers are broken enough that they prevent
SDL_opengl.h from fixing things up if the PFN* typedefs are missing
- Uses motion jpeg codec by default
- Use cl_avidemo to set a framerate
- \video [filename] to start capture
- \stopvideo to stop capture
- Audio capture is a bit ropey
* Updated TODO
* Moved ChangeLog to root
* Updated ChangeLog
* s/Foobar/Quake III Arena Source Code/
* Biggest patch EVAR. I wonder how many mail boxes this will fill...