fixed hyperspace rendering

This commit is contained in:
myT 2019-11-12 04:23:49 +01:00
parent cb0ef3aab8
commit 0cbfe60d86
5 changed files with 29 additions and 26 deletions

View File

@ -687,4 +687,13 @@ void RB_PopShader()
{
tess.shader = prevShader;
tess.xstages = prevStages;
}
}
// used when a player has predicted a teleport, but hasn't arrived yet
float RB_HyperspaceColor()
{
const float c = 0.25f + 0.5f * sinf(M_PI * (backEnd.refdef.time & 0x01FF) / 0x0200);
return c;
}

View File

@ -2307,19 +2307,17 @@ static void GAL_Begin3D()
memcpy(d3d.projectionMatrix, backEnd.viewParms.projectionMatrix, sizeof(d3d.projectionMatrix));
ApplyViewportAndScissor(backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight, glConfig.vidHeight);
d3d.context->ClearDepthStencilView(d3d.depthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);
if(backEnd.refdef.rdflags & RDF_HYPERSPACE)
{
const FLOAT c = 0.25 + 0.5 * sin(M_PI * (backEnd.refdef.time & 0x01FF) / 0x0200);
const FLOAT c = RB_HyperspaceColor();
const FLOAT clearColor[4] = { c, c, c, 1.0f };
d3d.context->ClearRenderTargetView(d3d.backBufferRTView, clearColor);
return;
d3d.context->ClearRenderTargetView(d3d.renderTargetViewMS, clearColor);
}
d3d.context->ClearDepthStencilView(d3d.depthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);
if(r_fastsky->integer && !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL))
else if(r_fastsky->integer && !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL))
{
const FLOAT clearColor[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
d3d.context->ClearRenderTargetView(d3d.backBufferRTView, clearColor);
d3d.context->ClearRenderTargetView(d3d.renderTargetViewMS, clearColor);
}
if(backEnd.viewParms.isPortal)

View File

@ -1141,16 +1141,6 @@ static void GL_State( unsigned long stateBits )
}
// a player has predicted a teleport, but hasn't arrived yet
static void RB_Hyperspace()
{
float c = 0.25 + 0.5 * sin( M_PI * (backEnd.refdef.time & 0x01FF) / 0x0200 );
glClearColor( c, c, c, 1 );
glClear( GL_COLOR_BUFFER_BIT );
}
static void ApplyViewportAndScissor()
{
glMatrixMode(GL_PROJECTION);
@ -1191,8 +1181,11 @@ static void GAL_Begin3D()
// clear relevant buffers
clearBits = GL_DEPTH_BUFFER_BIT;
if ( r_fastsky->integer && !( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) )
{
if ( backEnd.refdef.rdflags & RDF_HYPERSPACE ) {
const float c = RB_HyperspaceColor();
clearBits |= GL_COLOR_BUFFER_BIT;
glClearColor( c, c, c, 1.0f );
} else if ( r_fastsky->integer && !( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) ) {
clearBits |= GL_COLOR_BUFFER_BIT;
// tr.sunLight could have colored fastsky properly for the last 9 years,
// ... if the code had actually been right >:( but, it's a bad idea to trust mappers anyway
@ -1200,11 +1193,6 @@ static void GAL_Begin3D()
}
glClear( clearBits );
if ( backEnd.refdef.rdflags & RDF_HYPERSPACE ) {
RB_Hyperspace();
return;
}
glState.faceCulling = -1; // force face culling to set next time
// clip to the plane of the portal

View File

@ -2283,7 +2283,13 @@ static void GAL_Begin3D()
ApplyState(GLS_DEFAULT, CT_TWO_SIDED, qfalse);
GLbitfield clearBits = GL_DEPTH_BUFFER_BIT;
if(r_fastsky->integer && (backEnd.refdef.rdflags & RDF_NOWORLDMODEL) != 0)
if(backEnd.refdef.rdflags & RDF_HYPERSPACE)
{
clearBits |= GL_COLOR_BUFFER_BIT;
const float c = RB_HyperspaceColor();
glClearColor(c, c, c, 1.0f);
}
else if(r_fastsky->integer && (backEnd.refdef.rdflags & RDF_NOWORLDMODEL) != 0)
{
clearBits |= GL_COLOR_BUFFER_BIT;
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

View File

@ -1563,6 +1563,8 @@ void RB_ExecuteRenderCommands( const void *data );
void RB_PushSingleStageShader( int stateBits, cullType_t cullType );
void RB_PopShader();
float RB_HyperspaceColor();
void RB_DrawSky();
void R_BuildCloudData();