reQuiem is a custom OpenGL Quake engine for Windows and Linux. It's designed for maximum compatibility with all things Quake - past, present and future. It's fast, reliable, and easy to configure. In short: it fixes what was broken, improves what needed improving, and leaves the rest alone. It was developed by jdhack.
skychain is a linked list (through texturechain pointers) of surfaces. Surfaces are appended to skychain while processing cl_visedicts. If there are duplicates in cl_visedicts then loops can be formed in the skychain. If there are loops in the skychain then R_DrawSky will never terminate. (This is all contingent on certain cvars used to choose the sky style, but this is the default behavior.)
Solution:
Dups in cl_visedicts are generally bad, so let's eliminate those. This will also fix the skychain issue.
Things other than R_StoreEfrags that modify cl_visedicts all happen under _Host_Frame:
_Host_Frame
CL_ReadFromServer (if connected)
CL_RelinkEntities resets cl_numvisedicts and then adds to cl_visedicts
CL_LinkProjectiles (if qw) adds to cl_visedicts
CL_UpdateStreams (if hexen2) adds to cl_visedicts
CL_UpdateEffects (if hexen2 and connected) adds to cl_visedicts
That's all cool!
Then there's R_StoreEfrags. It is down the callstack from SCR_UpdateScreen.
SCR_UpdateScreen is called from: _Host_Frame, Con_Keydown, Con_Print, Movie_TestFPS, SCR_BeginLoadingPlaque, and SCR_ModalMessage.
The only time we actually want R_StoreEfrags to add to cl_visedicts is in the case where SCR_UpdateScreen is called from _Host_Frame. So let's enforce that with a global flag.
This change fixes the specific reported issue with czg07. Giving it some burn-in testing now to see if it causes (or solves?) other issues.
Resolves issue #9.
Summary:
skychain is a linked list (through texturechain pointers) of surfaces. Surfaces are appended to skychain while processing cl_visedicts. If there are duplicates in cl_visedicts then loops can be formed in the skychain. If there are loops in the skychain then R_DrawSky will never terminate. (This is all contingent on certain cvars used to choose the sky style, but this is the default behavior.)
Solution:
Dups in cl_visedicts are generally bad, so let's eliminate those. This will also fix the skychain issue.
Things other than R_StoreEfrags that modify cl_visedicts all happen under _Host_Frame:
That's all cool!
Then there's R_StoreEfrags. It is down the callstack from SCR_UpdateScreen.
SCR_UpdateScreen is called from: _Host_Frame, Con_Keydown, Con_Print, Movie_TestFPS, SCR_BeginLoadingPlaque, and SCR_ModalMessage.
The only time we actually want R_StoreEfrags to add to cl_visedicts is in the case where SCR_UpdateScreen is called from _Host_Frame. So let's enforce that with a global flag.
This change fixes the specific reported issue with czg07. Giving it some burn-in testing now to see if it causes (or solves?) other issues.