- took projection and view matrix out of the render state.

This is a preparation to migrate to GZDoom's HWViewpointUniforms buffer.
This commit is contained in:
Christoph Oelckers 2020-06-04 18:46:44 +02:00
parent 8430658cc5
commit cf6855904d
15 changed files with 62 additions and 68 deletions

View file

@ -3242,7 +3242,6 @@ void viewDrawScreen(bool sceneonly)
} }
r enderSetTarget(4079, 128, 128); r enderSetTarget(4079, 128, 128);
renderSetAspect(65536, 78643); renderSetAspect(65536, 78643);
renderBeginScene();
int vd8 = pOther->pSprite->x; int vd8 = pOther->pSprite->x;
int vd4 = pOther->pSprite->y; int vd4 = pOther->pSprite->y;
int vd0 = pOther->zView; int vd0 = pOther->zView;
@ -3308,7 +3307,6 @@ void viewDrawScreen(bool sceneonly)
memcpy(gotpic+510, bakMirrorGotpic, 2); memcpy(gotpic+510, bakMirrorGotpic, 2);
viewProcessSprites(vd8, vd4, vd0, v50, gInterpolate); viewProcessSprites(vd8, vd4, vd0, v50, gInterpolate);
renderDrawMasks(); renderDrawMasks();
renderFinishScene();
renderRestoreTarget(); renderRestoreTarget();
#endif #endif
} }
@ -3350,7 +3348,6 @@ void viewDrawScreen(bool sceneonly)
} }
nSprite = nextspritestat[nSprite]; nSprite = nextspritestat[nSprite];
} }
renderBeginScene();
g_visibility = (int32_t)(ClipLow(gVisibility - 32 * gView->visibility - unk, 0) * (numplayers > 1 ? 1.f : r_ambientlightrecip)); g_visibility = (int32_t)(ClipLow(gVisibility - 32 * gView->visibility - unk, 0) * (numplayers > 1 ? 1.f : r_ambientlightrecip));
cA = (cA + interpolateangfix16(fix16_from_int(deliriumTurnO), fix16_from_int(deliriumTurn), gInterpolate)) & 0x7ffffff; cA = (cA + interpolateangfix16(fix16_from_int(deliriumTurnO), fix16_from_int(deliriumTurn), gInterpolate)) & 0x7ffffff;
int vfc, vf8; int vfc, vf8;
@ -3405,7 +3402,6 @@ void viewDrawScreen(bool sceneonly)
sub_557C4(cX, cY, gInterpolate); sub_557C4(cX, cY, gInterpolate);
renderDrawMasks(); renderDrawMasks();
gView->pSprite->cstat = bakCstat; gView->pSprite->cstat = bakCstat;
renderFinishScene();
if ((v78 || bDelirium) && !sceneonly) if ((v78 || bDelirium) && !sceneonly)
{ {

View file

@ -2618,6 +2618,7 @@ killsprite:
sortsprites(0, spritesortcnt); sortsprites(0, spritesortcnt);
sortsprites(spritesortcnt, numSprites); sortsprites(spritesortcnt, numSprites);
renderBeginScene();
#ifdef USE_OPENGL #ifdef USE_OPENGL
if (videoGetRenderMode() == REND_POLYMOST) if (videoGetRenderMode() == REND_POLYMOST)
@ -2809,17 +2810,9 @@ killsprite:
} }
debugmask_add(maskwall[maskwallcnt], thewall[maskwall[maskwallcnt]]); debugmask_add(maskwall[maskwallcnt], thewall[maskwall[maskwallcnt]]);
#ifdef USE_OPENGL
if (videoGetRenderMode() == REND_POLYMOST)
GLInterface.SetClamp(0);
#endif
renderDrawMaskedWall(maskwallcnt); renderDrawMaskedWall(maskwallcnt);
} }
#ifdef USE_OPENGL
if (videoGetRenderMode() == REND_POLYMOST)
GLInterface.SetClamp(1+2);
#endif
while (spritesortcnt) while (spritesortcnt)
{ {
--spritesortcnt; --spritesortcnt;
@ -2830,14 +2823,10 @@ killsprite:
tspriteptr[spritesortcnt] = NULL; tspriteptr[spritesortcnt] = NULL;
} }
} }
#ifdef USE_OPENGL renderFinishScene();
if (videoGetRenderMode() == REND_POLYMOST) GLInterface.SetDepthMask(true);
{ GLInterface.SetClamp(0);
GLInterface.SetDepthMask(true); GLInterface.SetDepthBias(0, 0);
GLInterface.SetClamp(0);
GLInterface.SetDepthBias(0, 0);
}
#endif
} }

View file

@ -208,7 +208,7 @@ static void resizeglcheck(void)
m[2][2] = (farclip + nearclip) / (farclip - nearclip); m[2][2] = (farclip + nearclip) / (farclip - nearclip);
m[2][3] = 1.f; m[2][3] = 1.f;
m[3][2] = -(2.f * farclip * nearclip) / (farclip - nearclip); m[3][2] = -(2.f * farclip * nearclip) / (farclip - nearclip);
GLInterface.SetMatrix(Matrix_Projection, &m[0][0]); renderSetProjectionMatrix(&m[0][0]);
GLInterface.SetIdentityMatrix(Matrix_Model); GLInterface.SetIdentityMatrix(Matrix_Model);
} }
@ -283,7 +283,7 @@ static void polymost_updaterotmat(void)
0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 0.f, 1.f,
}; };
multiplyMatrix4f(matrix, tiltmatrix); multiplyMatrix4f(matrix, tiltmatrix);
GLInterface.SetMatrix(Matrix_View, matrix); renderSetViewMatrix(matrix);
} }
static void polymost_flatskyrender(vec2f_t const* const dpxy, int32_t const n, int32_t method, const vec2_16_t& tilesiz); static void polymost_flatskyrender(vec2f_t const* const dpxy, int32_t const n, int32_t method, const vec2_16_t& tilesiz);
@ -3279,6 +3279,8 @@ void polymost_drawrooms()
grhalfxdown10x = grhalfxdown10; grhalfxdown10x = grhalfxdown10;
renderBeginScene();
if (inpreparemirror) if (inpreparemirror)
{ {
// see engine.c: INPREPAREMIRROR_NO_BUNCHES // see engine.c: INPREPAREMIRROR_NO_BUNCHES
@ -3295,6 +3297,7 @@ void polymost_drawrooms()
} }
} }
while (numbunches > 0) while (numbunches > 0)
{ {
Bmemset(ptempbuf,0,numbunches+3); ptempbuf[0] = 1; Bmemset(ptempbuf,0,numbunches+3); ptempbuf[0] = 1;
@ -3327,6 +3330,7 @@ void polymost_drawrooms()
bunchfirst[closest] = bunchfirst[numbunches]; bunchfirst[closest] = bunchfirst[numbunches];
bunchlast[closest] = bunchlast[numbunches]; bunchlast[closest] = bunchlast[numbunches];
} }
renderFinishScene();
GLInterface.SetDepthFunc(Depth_LessEqual); GLInterface.SetDepthFunc(Depth_LessEqual);
} }
@ -3601,6 +3605,7 @@ void polymost_prepareMirror(int32_t dax, int32_t day, int32_t daz, fix16_t daang
polymost_updaterotmat(); polymost_updaterotmat();
grhalfxdown10x = grhalfxdown10; grhalfxdown10x = grhalfxdown10;
renderBeginScene();
//POGO: write the mirror region to the stencil buffer to allow showing mirrors & skyboxes at the same time //POGO: write the mirror region to the stencil buffer to allow showing mirrors & skyboxes at the same time
GLInterface.EnableStencilWrite(1); GLInterface.EnableStencilWrite(1);
GLInterface.EnableAlphaTest(false); GLInterface.EnableAlphaTest(false);
@ -3608,6 +3613,7 @@ void polymost_prepareMirror(int32_t dax, int32_t day, int32_t daz, fix16_t daang
polymost_drawmaskwallinternal(mirrorWall); polymost_drawmaskwallinternal(mirrorWall);
GLInterface.EnableAlphaTest(true); GLInterface.EnableAlphaTest(true);
GLInterface.EnableDepthTest(true); GLInterface.EnableDepthTest(true);
renderFinishScene();
//POGO: render only to the mirror region //POGO: render only to the mirror region
GLInterface.EnableStencilTest(1); GLInterface.EnableStencilTest(1);

View file

@ -679,7 +679,6 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
"other values are reserved.\n"); "other values are reserved.\n");
#endif #endif
renderBeginScene();
#ifdef LEGACY_ROR #ifdef LEGACY_ROR
G_SE40(smoothRatio); G_SE40(smoothRatio);
#endif #endif
@ -692,7 +691,6 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
yax_drawrooms(G_DoSpriteAnimations, pSprite->sectnum, 0, smoothRatio); yax_drawrooms(G_DoSpriteAnimations, pSprite->sectnum, 0, smoothRatio);
G_DoSpriteAnimations(pSprite->x, pSprite->y, pSprite->z - ZOFFSET6, fix16_to_int(CAMERA(q16ang)), smoothRatio); G_DoSpriteAnimations(pSprite->x, pSprite->y, pSprite->z - ZOFFSET6, fix16_to_int(CAMERA(q16ang)), smoothRatio);
renderDrawMasks(); renderDrawMasks();
renderFinishScene();
} }
} }
else else
@ -844,7 +842,6 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
Printf(TEXTCOLOR_RED "ERROR: EVENT_DISPLAYROOMS return value must be 0 or 1, " Printf(TEXTCOLOR_RED "ERROR: EVENT_DISPLAYROOMS return value must be 0 or 1, "
"other values are reserved.\n"); "other values are reserved.\n");
#endif #endif
renderBeginScene();
G_HandleMirror(CAMERA(pos.x), CAMERA(pos.y), CAMERA(pos.z), CAMERA(q16ang), CAMERA(q16horiz), smoothRatio); G_HandleMirror(CAMERA(pos.x), CAMERA(pos.y), CAMERA(pos.z), CAMERA(q16ang), CAMERA(q16horiz), smoothRatio);
G_ClearGotMirror(); G_ClearGotMirror();
@ -874,7 +871,6 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
#endif #endif
renderDrawMasks(); renderDrawMasks();
#endif #endif
renderFinishScene();
} }
} }

View file

@ -1218,7 +1218,6 @@ LUNATIC_EXTERN void G_ShowView(vec3_t vec, fix16_t a, fix16_t horiz, int sect, i
renderSetAspect(viewingRange, yxAspect); renderSetAspect(viewingRange, yxAspect);
int const smoothratio = calc_smoothratio(totalclock, ototalclock); int const smoothratio = calc_smoothratio(totalclock, ototalclock);
G_DoInterpolations(smoothratio); G_DoInterpolations(smoothratio);
renderBeginScene();
if (!display_mirror) if (!display_mirror)
G_HandleMirror(vec.x, vec.y, vec.z, a, horiz, smoothratio); G_HandleMirror(vec.x, vec.y, vec.z, a, horiz, smoothratio);
#ifdef POLYMER #ifdef POLYMER
@ -1233,7 +1232,6 @@ LUNATIC_EXTERN void G_ShowView(vec3_t vec, fix16_t a, fix16_t horiz, int sect, i
G_DoSpriteAnimations(vec.x, vec.y, vec.z, fix16_to_int(a), smoothratio); G_DoSpriteAnimations(vec.x, vec.y, vec.z, fix16_to_int(a), smoothratio);
display_mirror = 0; display_mirror = 0;
renderDrawMasks(); renderDrawMasks();
renderFinishScene();
G_RestoreInterpolations(); G_RestoreInterpolations();
G_UpdateScreenArea(); G_UpdateScreenArea();
renderSetAspect(viewingRange, yxAspect); renderSetAspect(viewingRange, yxAspect);

View file

@ -401,7 +401,6 @@ static void G_SetupCamTile(int spriteNum, int tileNum, int smoothRatio)
Printf(TEXTCOLOR_RED "ERROR: EVENT_DISPLAYROOMSCAMERATILE return value must be 0 or 1, " Printf(TEXTCOLOR_RED "ERROR: EVENT_DISPLAYROOMSCAMERATILE return value must be 0 or 1, "
"other values are reserved.\n"); "other values are reserved.\n");
#endif #endif
renderBeginScene();
yax_preparedrawrooms(); yax_preparedrawrooms();
drawrooms(camera.x, camera.y, camera.z, SA(spriteNum), 100 + sprite[spriteNum].shade, SECT(spriteNum)); drawrooms(camera.x, camera.y, camera.z, SA(spriteNum), 100 + sprite[spriteNum].shade, SECT(spriteNum));
@ -411,8 +410,7 @@ static void G_SetupCamTile(int spriteNum, int tileNum, int smoothRatio)
G_DoSpriteAnimations(camera.x, camera.y, camera.z, SA(spriteNum), smoothRatio); G_DoSpriteAnimations(camera.x, camera.y, camera.z, SA(spriteNum), smoothRatio);
display_mirror = saveMirror; display_mirror = saveMirror;
renderDrawMasks(); renderDrawMasks();
renderFinishScene();
finishTileSetup: finishTileSetup:
renderRestoreTarget(); renderRestoreTarget();
} }

View file

@ -494,11 +494,9 @@ void DrawView(int smoothRatio, bool sceneonly)
} }
} }
renderBeginScene();
renderDrawRoomsQ16(nCamerax, nCameray, viewz, nCameraa, nCamerapan, nSector); renderDrawRoomsQ16(nCamerax, nCameray, viewz, nCameraa, nCamerapan, nSector);
analyzesprites(); analyzesprites();
renderDrawMasks(); renderDrawMasks();
renderFinishScene();
if (HavePLURemap()) if (HavePLURemap())
{ {

View file

@ -53,8 +53,10 @@
#include "build.h" #include "build.h"
#include "v_draw.h" #include "v_draw.h"
#include "v_font.h" #include "v_font.h"
#include "hw_viewpointuniforms.h"
F2DDrawer twodpsp; F2DDrawer twodpsp;
static int BufferLock = 0;
float shadediv[MAXPALOOKUPS]; float shadediv[MAXPALOOKUPS];
@ -187,13 +189,13 @@ static GLint primtypes[] ={ GL_POINTS, GL_LINES, GL_TRIANGLES, GL_TRIANGLE_FAN,
void GLInstance::Draw(EDrawType type, size_t start, size_t count) void GLInstance::Draw(EDrawType type, size_t start, size_t count)
{ {
assert (BufferLock > 0);
applyMapFog(); applyMapFog();
renderState.vindex = start; renderState.vindex = start;
renderState.vcount = count; renderState.vcount = count;
renderState.primtype = type; renderState.primtype = type;
rendercommands.Push(renderState); rendercommands.Push(renderState);
clearMapFog(); clearMapFog();
SetIdentityMatrix(Matrix_Texture);
renderState.StateFlags &= ~(STF_CLEARCOLOR | STF_CLEARDEPTH | STF_VIEWPORTSET | STF_SCISSORSET); renderState.StateFlags &= ~(STF_CLEARCOLOR | STF_CLEARDEPTH | STF_VIEWPORTSET | STF_SCISSORSET);
} }
@ -232,12 +234,17 @@ void GLInstance::DoDraw()
int GLInstance::SetMatrix(int num, const VSMatrix *mat) int GLInstance::SetMatrix(int num, const VSMatrix *mat)
{ {
int r = renderState.matrixIndex[num]; int r = renderState.matrixIndex[num];
if (num == Matrix_Projection) mProjectionM5 = mat->get()[5];
renderState.matrixIndex[num] = matrixArray.Size(); renderState.matrixIndex[num] = matrixArray.Size();
matrixArray.Push(*mat); matrixArray.Push(*mat);
return r; return r;
} }
void GLInstance::SetIdentityMatrix(int num)
{
renderState.matrixIndex[num] = 0;
}
void GLInstance::ReadPixels(int xdim, int ydim, uint8_t* buffer) void GLInstance::ReadPixels(int xdim, int ydim, uint8_t* buffer)
{ {
glReadPixels(0, 0, xdim, ydim, GL_RGB, GL_UNSIGNED_BYTE, buffer); glReadPixels(0, 0, xdim, ydim, GL_RGB, GL_UNSIGNED_BYTE, buffer);
@ -492,10 +499,6 @@ void PolymostRenderState::Apply(PolymostShader* shader, GLState &oldState)
shader->TintModulate.Set(hictint); shader->TintModulate.Set(hictint);
shader->TintOverlay.Set(hictint_overlay); shader->TintOverlay.Set(hictint_overlay);
shader->FullscreenTint.Set(fullscreenTint); shader->FullscreenTint.Set(fullscreenTint);
if (matrixIndex[Matrix_View] != -1)
shader->RotMatrix.Set(matrixArray[matrixIndex[Matrix_View]].get());
if (matrixIndex[Matrix_Projection] != -1)
shader->ProjectionMatrix.Set(matrixArray[matrixIndex[Matrix_Projection]].get());
if (matrixIndex[Matrix_Model] != -1) if (matrixIndex[Matrix_Model] != -1)
shader->ModelMatrix.Set(matrixArray[matrixIndex[Matrix_Model]].get()); shader->ModelMatrix.Set(matrixArray[matrixIndex[Matrix_Model]].get());
if (matrixIndex[Matrix_Texture] != -1) if (matrixIndex[Matrix_Texture] != -1)
@ -569,12 +572,32 @@ void WriteSavePic(FileWriter* file, int width, int height)
} }
static int BufferLock = 0; static HWViewpointUniforms vp;
void renderSetProjectionMatrix(const float* p)
{
if (p)
{
vp.mProjectionMatrix.loadMatrix(p);
GLInterface.mProjectionM5 = p[5];
}
else vp.mProjectionMatrix.loadIdentity();
}
void renderSetViewMatrix(const float* p)
{
if (p) vp.mViewMatrix.loadMatrix(p);
else vp.mViewMatrix.loadIdentity();
}
void renderBeginScene() void renderBeginScene()
{ {
if (videoGetRenderMode() < REND_POLYMOST) return; if (videoGetRenderMode() < REND_POLYMOST) return;
assert(BufferLock >= 0); assert(BufferLock == 0);
GLInterface.polymostShader->ProjectionMatrix.Set(vp.mProjectionMatrix.get());
GLInterface.polymostShader->RotMatrix.Set(vp.mViewMatrix.get());
if (BufferLock++ == 0) if (BufferLock++ == 0)
{ {
screen->mVertexData->Map(); screen->mVertexData->Map();
@ -584,7 +607,7 @@ void renderBeginScene()
void renderFinishScene() void renderFinishScene()
{ {
if (videoGetRenderMode() < REND_POLYMOST) return; if (videoGetRenderMode() < REND_POLYMOST) return;
assert(BufferLock > 0); assert(BufferLock == 1);
if (--BufferLock == 0) if (--BufferLock == 0)
{ {
screen->mVertexData->Unmap(); screen->mVertexData->Unmap();

View file

@ -117,13 +117,13 @@ class GLInstance
// Cached GL state. // Cached GL state.
GLState lastState; GLState lastState;
float mProjectionM5 = 1.0f; // needed by ssao
PolymostRenderState renderState; PolymostRenderState renderState;
FShader* activeShader; FShader* activeShader;
PolymostShader* polymostShader;
public: public:
float mProjectionM5 = 1.0f; // needed by ssao
PolymostShader* polymostShader;
glinfo_t glinfo; glinfo_t glinfo;
void Init(int y); void Init(int y);
@ -158,12 +158,7 @@ public:
{ {
return SetMatrix(num, reinterpret_cast<const VSMatrix*>(mat)); return SetMatrix(num, reinterpret_cast<const VSMatrix*>(mat));
} }
int SetIdentityMatrix(int num) void SetIdentityMatrix(int num);
{
auto r = renderState.matrixIndex[num];
renderState.matrixIndex[num] = 0;
return r;
}
void RestoreMatrix(int num, int index) void RestoreMatrix(int num, int index)
{ {
renderState.matrixIndex[num] = index; renderState.matrixIndex[num] = index;
@ -504,6 +499,8 @@ public:
extern GLInstance GLInterface; extern GLInstance GLInterface;
void renderSetProjectionMatrix(const float* p);
void renderSetViewMatrix(const float* p);
void renderBeginScene(); void renderBeginScene();
void renderFinishScene(); void renderFinishScene();
void DrawRateStuff(); void DrawRateStuff();

View file

@ -102,10 +102,15 @@ void polymost_dorotatesprite(int32_t sx, int32_t sy, int32_t z, int16_t a, int16
void GLInstance::Draw2D(F2DDrawer *drawer) void GLInstance::Draw2D(F2DDrawer *drawer)
{ {
VSMatrix mat(0); VSMatrix mat(0);
SetIdentityMatrix(Matrix_View); renderSetViewMatrix(nullptr);
SetIdentityMatrix(Matrix_Model);
mat.ortho(0, xdim, ydim, 0, -1, 1); mat.ortho(0, xdim, ydim, 0, -1, 1);
SetMatrix(Matrix_Projection, mat.get()); renderSetProjectionMatrix(mat.get());
SetIdentityMatrix(Matrix_Model);
// Temporary hack to set the matrices.
renderBeginScene();
renderFinishScene();
SetViewport(0, 0, xdim, ydim); SetViewport(0, 0, xdim, ydim);
EnableDepthTest(false); EnableDepthTest(false);
EnableMultisampling(false); EnableMultisampling(false);
@ -216,7 +221,6 @@ void GLInstance::Draw2D(F2DDrawer *drawer)
//drawer->mIsFirstPass = false; //drawer->mIsFirstPass = false;
EnableBlend(true); EnableBlend(true);
EnableMultisampling(true); EnableMultisampling(true);
SetIdentityMatrix(Matrix_Projection);
matrixArray.Resize(1); matrixArray.Resize(1);
renderState.Apply(polymostShader, lastState); // actually set the desired state before returning. renderState.Apply(polymostShader, lastState); // actually set the desired state before returning.
} }
@ -227,15 +231,14 @@ extern PalEntry palfadergb;
void DrawFullscreenBlends() void DrawFullscreenBlends()
{ {
GLInterface.SetIdentityMatrix(Matrix_Projection);
GLInterface.SetIdentityMatrix(Matrix_Model); GLInterface.SetIdentityMatrix(Matrix_Model);
GLInterface.SetIdentityMatrix(Matrix_View);
GLInterface.EnableDepthTest(false); GLInterface.EnableDepthTest(false);
GLInterface.EnableAlphaTest(false); GLInterface.EnableAlphaTest(false);
GLInterface.EnableBlend(true); GLInterface.EnableBlend(true);
GLInterface.UseColorOnly(true); GLInterface.UseColorOnly(true);
renderBeginScene();
if (palfadergb.a > 0) if (palfadergb.a > 0)
{ {
// Todo: reroute to the 2D drawer // Todo: reroute to the 2D drawer
@ -257,7 +260,7 @@ void DrawFullscreenBlends()
GLInterface.SetColorub(255, 255, 255, 255); GLInterface.SetColorub(255, 255, 255, 255);
GLInterface.SetRenderStyle(LegacyRenderStyles[STYLE_Translucent]); GLInterface.SetRenderStyle(LegacyRenderStyles[STYLE_Translucent]);
} }
GLInterface.DoDraw(); renderFinishScene();
GLInterface.UseColorOnly(false); GLInterface.UseColorOnly(false);
} }

View file

@ -9,8 +9,6 @@ class FMaterial;
enum EMatrixType enum EMatrixType
{ {
Matrix_View,
Matrix_Projection,
Matrix_Model, Matrix_Model,
Matrix_Texture, Matrix_Texture,
// These are the only ones being used. // These are the only ones being used.
@ -70,7 +68,7 @@ struct PolymostRenderState
float AlphaThreshold = 0.5f; float AlphaThreshold = 0.5f;
bool AlphaTest = true; bool AlphaTest = true;
float Color[4] = { 1,1,1,1 }; float Color[4] = { 1,1,1,1 };
short matrixIndex[NUMMATRICES] = { 0,0,0,0 }; short matrixIndex[NUMMATRICES] = { 0,0 };
PalEntry fullscreenTint = 0xffffff, hictint = 0xffffff, hictint_overlay = 0xffffff; PalEntry fullscreenTint = 0xffffff, hictint = 0xffffff, hictint_overlay = 0xffffff;
int hictint_flags = -1; int hictint_flags = -1;
FDepthBiasState mBias{ }; FDepthBiasState mBias{ };

View file

@ -1133,7 +1133,6 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
CAMERA(q16horiz) = fix16_clamp(CAMERA(q16horiz), F16(HORIZ_MIN), F16(HORIZ_MAX)); CAMERA(q16horiz) = fix16_clamp(CAMERA(q16horiz), F16(HORIZ_MIN), F16(HORIZ_MAX));
renderBeginScene();
G_HandleMirror(CAMERA(pos.x), CAMERA(pos.y), CAMERA(pos.z), CAMERA(q16ang), CAMERA(q16horiz), smoothRatio); G_HandleMirror(CAMERA(pos.x), CAMERA(pos.y), CAMERA(pos.z), CAMERA(q16ang), CAMERA(q16horiz), smoothRatio);
#ifdef LEGACY_ROR #ifdef LEGACY_ROR
if (!RR) if (!RR)
@ -1263,7 +1262,6 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
#endif #endif
renderDrawMasks(); renderDrawMasks();
#endif #endif
renderFinishScene();
} }
G_RestoreInterpolations(); G_RestoreInterpolations();

View file

@ -507,7 +507,6 @@ static void G_SetupCamTile(int spriteNum, int tileNum, int smoothRatio)
int const saveMirror = display_mirror; int const saveMirror = display_mirror;
renderSetTarget(tileNum, tilesiz[tileNum].y, tilesiz[tileNum].x); renderSetTarget(tileNum, tilesiz[tileNum].y, tilesiz[tileNum].x);
renderBeginScene();
yax_preparedrawrooms(); yax_preparedrawrooms();
drawrooms(camera.x, camera.y, camera.z, SA(spriteNum), 100 + sprite[spriteNum].shade, SECT(spriteNum)); drawrooms(camera.x, camera.y, camera.z, SA(spriteNum), 100 + sprite[spriteNum].shade, SECT(spriteNum));
@ -517,7 +516,6 @@ static void G_SetupCamTile(int spriteNum, int tileNum, int smoothRatio)
G_DoSpriteAnimations(camera.x, camera.y, camera.z, SA(spriteNum), smoothRatio); G_DoSpriteAnimations(camera.x, camera.y, camera.z, SA(spriteNum), smoothRatio);
display_mirror = saveMirror; display_mirror = saveMirror;
renderDrawMasks(); renderDrawMasks();
renderFinishScene();
renderRestoreTarget(); renderRestoreTarget();
} }

View file

@ -2174,7 +2174,6 @@ drawscreen(PLAYERp pp)
JS_DrawCameras(pp, tx, ty, tz); JS_DrawCameras(pp, tx, ty, tz);
} }
renderBeginScene();
OverlapDraw = TRUE; OverlapDraw = TRUE;
DrawOverlapRoom(tx, ty, tz, tq16ang, tq16horiz, tsectnum); DrawOverlapRoom(tx, ty, tz, tq16ang, tq16horiz, tsectnum);
OverlapDraw = FALSE; OverlapDraw = FALSE;
@ -2194,7 +2193,6 @@ drawscreen(PLAYERp pp)
analyzesprites(tx, ty, tz, FALSE); analyzesprites(tx, ty, tz, FALSE);
post_analyzesprites(); post_analyzesprites();
renderDrawMasks(); renderDrawMasks();
renderFinishScene();
if (r_usenewaspect) if (r_usenewaspect)
{ {

View file

@ -478,12 +478,10 @@ void drawroomstotile(int daposx, int daposy, int daposz,
TileFiles.MakeCanvas(tilenume, tilesiz[tilenume].x, tilesiz[tilenume].y); TileFiles.MakeCanvas(tilenume, tilesiz[tilenume].x, tilesiz[tilenume].y);
renderSetTarget(tilenume, tilesiz[tilenume].x, tilesiz[tilenume].y); renderSetTarget(tilenume, tilesiz[tilenume].x, tilesiz[tilenume].y);
renderBeginScene();
renderDrawRoomsQ16(daposx, daposy, daposz, daq16ang, daq16horiz, dacursectnum); renderDrawRoomsQ16(daposx, daposy, daposz, daq16ang, daq16horiz, dacursectnum);
analyzesprites(daposx, daposy, daposz, FALSE); analyzesprites(daposx, daposy, daposz, FALSE);
renderDrawMasks(); renderDrawMasks();
renderFinishScene();
renderRestoreTarget(); renderRestoreTarget();
} }