diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 933cf35eb..19f6382bf 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -989,7 +989,6 @@ static void HWR_RenderViewpoint(player_t *player, boolean drawSkyTexture, boolea if (timing) { - ps_hw_spritesorttime = I_GetPreciseTime(); } @@ -1059,6 +1058,23 @@ void HWR_RollTransform(FTransform *tr, angle_t roll) } } +// -----------------+ +// HWR_ClearView : clear the viewwindow, with maximum z value. also clears stencil buffer. +// -----------------+ +static inline void HWR_ClearView(void) +{ + // set window position + HWR_ShiftViewPort(); + + GL_GClipRect((INT32)gl_viewwindowx, + (INT32)gl_viewwindowy, + (INT32)(gl_viewwindowx + gl_viewwidth), + (INT32)(gl_viewwindowy + gl_viewheight), + ZCLIP_PLANE); + + GL_ClearBuffer(false, true, true, NULL); +} + void HWR_RenderPlayerView(void) { player_t * player = &players[displayplayers[viewssnum]]; @@ -1080,7 +1096,10 @@ void HWR_RenderPlayerView(void) ps_hw_skyboxtime = I_GetPreciseTime(); if (skybox) // If there's a skybox and we should be drawing the sky, draw the skybox + { + HWR_ClearView(); HWR_RenderSkyboxView(player); // This is drawn before everything else so it is placed behind + } ps_hw_skyboxtime = I_GetPreciseTime() - ps_hw_skyboxtime; if (!HWR_ShouldUsePaletteRendering()) @@ -1095,18 +1114,9 @@ void HWR_RenderPlayerView(void) #endif } - // set window position - HWR_ShiftViewPort(); - // Reset the shader state. HWR_SetShaderState(); - GL_GClipRect((INT32)gl_viewwindowx, - (INT32)gl_viewwindowy, - (INT32)(gl_viewwindowx + gl_viewwidth), - (INT32)(gl_viewwindowy + gl_viewheight), - ZCLIP_PLANE); - // note: sets viewangle, viewx, viewy, viewz R_SetupFrame(viewssnum, skybox); framecount++; // timedemo @@ -1114,6 +1124,8 @@ void HWR_RenderPlayerView(void) // Check for new console commands. NetUpdate(); + HWR_ClearView(); + HWR_RenderViewpoint(player, !skybox, // Don't draw the regular sky if there's a skybox false, diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 4d74bfec6..6da624800 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -923,7 +923,7 @@ static void SetNoTexture(GLenum texture) } } -static void GLPerspective(GLfloat fovy, GLfloat aspect) +static void GL_Perspective(GLfloat fovy, GLfloat aspect) { GLfloat m[4][4] = { @@ -1033,7 +1033,7 @@ void SetModelView(GLint w, GLint h) pglMatrixMode(GL_MODELVIEW); pglLoadIdentity(); - GLPerspective(fov, ASPECT_RATIO); + GL_Perspective(fov, ASPECT_RATIO); //pglScalef(1.0f, 320.0f/200.0f, 1.0f); // gl_scalefrustum (ORIGINAL_ASPECT) // added for new coronas' code (without depth buffer) @@ -1339,7 +1339,7 @@ void GL_GClipRect(INT32 minx, INT32 miny, INT32 maxx, INT32 maxy, float nearclip //pglScissor(minx, screen_height-maxy, maxx-minx, maxy-miny); pglMatrixMode(GL_PROJECTION); pglLoadIdentity(); - GLPerspective(fov, ASPECT_RATIO); + GL_Perspective(fov, ASPECT_RATIO); pglMatrixMode(GL_MODELVIEW); // added for new coronas' code (without depth buffer) @@ -1368,6 +1368,7 @@ void GL_ClearBuffer(FBOOLEAN ColorMask, ClearColor->alpha); ClearMask |= GL_COLOR_BUFFER_BIT; } + if (DepthMask) { pglClearDepth(1.0f); //Hurdler: all that are permanen states @@ -1375,6 +1376,7 @@ void GL_ClearBuffer(FBOOLEAN ColorMask, pglDepthFunc(GL_LEQUAL); ClearMask |= GL_DEPTH_BUFFER_BIT; } + if (StencilMask) ClearMask |= GL_STENCIL_BUFFER_BIT; @@ -2926,7 +2928,7 @@ void GL_DrawModel(model_t *model, INT32 frameIndex, float duration, float tics, // -----------------+ void GL_SetTransform(FTransform *stransform) { - static boolean special_splitscreen; + boolean special_splitscreen = false; boolean shearing = false; float used_fov; @@ -2986,11 +2988,11 @@ void GL_SetTransform(FTransform *stransform) if (special_splitscreen) { used_fov = (atanf(tanf(used_fov * (float)M_PI / 360.0f) * 0.8f) * 360.0f / (float)M_PI); - GLPerspective(used_fov, 2*ASPECT_RATIO); + GL_Perspective(used_fov, 2*ASPECT_RATIO); } else { - GLPerspective(used_fov, ASPECT_RATIO); + GL_Perspective(used_fov, ASPECT_RATIO); } pglGetFloatv(GL_PROJECTION_MATRIX, projMatrix); // added for new coronas' code (without depth buffer) @@ -3000,7 +3002,7 @@ void GL_SetTransform(FTransform *stransform) } -INT32 GL_GetTextureUsed(void) +INT32 GL_GetTextureUsed(void) { FTextureInfo *tmp = TexCacheHead; INT32 res = 0;