diff --git a/libs/video/renderer/gl/gl_rmain.c b/libs/video/renderer/gl/gl_rmain.c index b45ea5acf..36a7ed133 100644 --- a/libs/video/renderer/gl/gl_rmain.c +++ b/libs/video/renderer/gl/gl_rmain.c @@ -240,20 +240,6 @@ R_DrawViewModel (void) qfglDepthRange (gldepthmin, gldepthmax); } -static void -gl_R_SetupFrame (void) -{ - R_AnimateLight (); - EntQueue_Clear (r_ent_queue); - r_framecount++; - - vec4f_t position = r_refdef.frame.position; - - R_SetFrustum (); - - r_refdef.viewleaf = Mod_PointInLeaf (&position[0], r_refdef.worldmodel); -} - static void MYgluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar) @@ -336,7 +322,6 @@ R_RenderScene (void) if (r_timegraph->int_val || r_speeds->int_val || r_dspeeds->int_val) r_time1 = Sys_DoubleTime (); - gl_R_SetupFrame (); R_SetupGL (); gl_Fog_EnableGFog (); diff --git a/libs/video/renderer/glsl/glsl_main.c b/libs/video/renderer/glsl/glsl_main.c index e90578ad1..54cef78b2 100644 --- a/libs/video/renderer/glsl/glsl_main.c +++ b/libs/video/renderer/glsl/glsl_main.c @@ -93,20 +93,6 @@ glsl_R_ViewChanged (void) mmulf (proj, depth_range, proj); } -static void -glsl_R_SetupFrame (void) -{ - R_AnimateLight (); - EntQueue_Clear (r_ent_queue); - r_framecount++; - - vec4f_t position = r_refdef.frame.position; - - R_SetFrustum (); - - r_refdef.viewleaf = Mod_PointInLeaf (&position[0], r_refdef.worldmodel); -} - static void R_SetupView (void) { @@ -188,7 +174,6 @@ glsl_R_RenderView (void) if (speeds) t[0] = Sys_DoubleTime (); - glsl_R_SetupFrame (); R_SetupView (); if (speeds) t[1] = Sys_DoubleTime (); diff --git a/libs/video/renderer/r_screen.c b/libs/video/renderer/r_screen.c index 938b5f3a8..611ba885f 100644 --- a/libs/video/renderer/r_screen.c +++ b/libs/video/renderer/r_screen.c @@ -48,6 +48,7 @@ #include "QF/sys.h" #include "QF/va.h" +#include "QF/scene/entity.h" #include "QF/scene/transform.h" #include "QF/ui/view.h" @@ -160,13 +161,15 @@ SCR_UpdateScreen (transform_t *camera, double realtime, SCR_Func *scr_funcs) return; } + refdef_t *refdef = r_data->refdef; if (camera) { - Transform_GetWorldMatrix (camera, r_data->refdef->camera); - Transform_GetWorldInverse (camera, r_data->refdef->camera_inverse); + Transform_GetWorldMatrix (camera, refdef->camera); + Transform_GetWorldInverse (camera, refdef->camera_inverse); } else { - mat4fidentity (r_data->refdef->camera); - mat4fidentity (r_data->refdef->camera_inverse); + mat4fidentity (refdef->camera); + mat4fidentity (refdef->camera_inverse); } + // FIXME pre-rotate the camera 90 degrees about the z axis such that the // camera forward vector (camera Y) points along the world +X axis and the // camera right vector (camera X) points along the world -Y axis. This @@ -174,10 +177,15 @@ SCR_UpdateScreen (transform_t *camera, double realtime, SCR_Func *scr_funcs) // AngleQuat for compatibility) treating X as forward and Y as left (or -Y // as right). Fixing this would take an audit of the usage of both, but is // probably worthwhile in the long run. - r_data->refdef->frame.mat[0] = -r_data->refdef->camera[1]; - r_data->refdef->frame.mat[1] = r_data->refdef->camera[0]; - r_data->refdef->frame.mat[2] = r_data->refdef->camera[2]; - r_data->refdef->frame.mat[3] = r_data->refdef->camera[3]; + refdef->frame.mat[0] = -refdef->camera[1]; + refdef->frame.mat[1] = refdef->camera[0]; + refdef->frame.mat[2] = refdef->camera[2]; + refdef->frame.mat[3] = refdef->camera[3]; + + //FIXME breaks fisheye as it calls the view render many times + EntQueue_Clear (r_ent_queue); + r_framecount++; + R_SetFrustum (); r_data->realtime = realtime; scr_copytop = r_data->scr_copyeverything = 0; @@ -186,6 +194,13 @@ SCR_UpdateScreen (transform_t *camera, double realtime, SCR_Func *scr_funcs) SCR_CalcRefdef (); } + R_AnimateLight (); + refdef->viewleaf = 0; + if (refdef->worldmodel) { + vec4f_t position = refdef->frame.position; + refdef->viewleaf = Mod_PointInLeaf (&position[0], refdef->worldmodel); + } + r_funcs->begin_frame (); r_funcs->render_view (); r_funcs->set_2d (0); diff --git a/libs/video/renderer/sw/sw_rmisc.c b/libs/video/renderer/sw/sw_rmisc.c index 91728168b..f7d41734f 100644 --- a/libs/video/renderer/sw/sw_rmisc.c +++ b/libs/video/renderer/sw/sw_rmisc.c @@ -176,23 +176,14 @@ R_SetupFrame (void) vrect_t vrect; float w, h; - R_AnimateLight (); - EntQueue_Clear (r_ent_queue); - r_framecount++; - numbtofpolys = 0; // build the transformation matrix for the given view angles VectorCopy (r_refdef.frame.position, modelorg); - vec4f_t position = r_refdef.frame.position; VectorCopy (r_refdef.frame.right, vright); VectorCopy (r_refdef.frame.forward, vfwd); VectorCopy (r_refdef.frame.up, vup); - R_SetFrustum (); - - // current viewleaf - r_refdef.viewleaf = Mod_PointInLeaf (&position[0], r_refdef.worldmodel); r_dowarpold = r_dowarp; r_dowarp = r_waterwarp->int_val && (r_refdef.viewleaf->contents <= diff --git a/libs/video/renderer/vulkan/vulkan_main.c b/libs/video/renderer/vulkan/vulkan_main.c index fe5ee3c29..bf26856dc 100644 --- a/libs/video/renderer/vulkan/vulkan_main.c +++ b/libs/video/renderer/vulkan/vulkan_main.c @@ -63,19 +63,6 @@ #include "r_internal.h" #include "vid_vulkan.h" -static void -setup_frame (vulkan_ctx_t *ctx) -{ - R_AnimateLight (); - EntQueue_Clear (r_ent_queue); - r_framecount++; - - R_SetFrustum (); - - vec4f_t position = r_refdef.frame.position; - r_refdef.viewleaf = Mod_PointInLeaf (&position[0], r_refdef.worldmodel); -} - static void Vulkan_RenderEntities (qfv_renderframe_t *rFrame) { @@ -137,7 +124,6 @@ Vulkan_RenderView (qfv_renderframe_t *rFrame) if (speeds) t[0] = Sys_DoubleTime (); - setup_frame (ctx); if (speeds) t[1] = Sys_DoubleTime (); R_MarkLeaves ();