- added the main vertex buffer and some code to maintain it on systems where persistent mapping is not possible.

All games combined there's 11(!!!) scene render blocks, not counting the sub-blocks for ROR and mirrors.
Does it surprise anyone that most of these sub-blocks do not feature all engine capabilities?
This commit is contained in:
Christoph Oelckers 2020-01-12 20:28:07 +01:00
parent 661431df87
commit 95f917a408
17 changed files with 299 additions and 68 deletions

View file

@ -832,6 +832,7 @@ set (PCH_SOURCES
common/rendering/gl/system/gl_debug.cpp common/rendering/gl/system/gl_debug.cpp
common/rendering/gl/system/gl_framebuffer.cpp common/rendering/gl/system/gl_framebuffer.cpp
common/rendering/gl_load/gl_interface.cpp common/rendering/gl_load/gl_interface.cpp
common/rendering/hwrenderer/data/flatvertices.cpp
common/rendering/hwrenderer/postprocessing/hw_postprocess.cpp common/rendering/hwrenderer/postprocessing/hw_postprocess.cpp
common/rendering/hwrenderer/postprocessing/hw_postprocess_cvars.cpp common/rendering/hwrenderer/postprocessing/hw_postprocess_cvars.cpp
common/rendering/hwrenderer/utility/hw_shaderpatcher.cpp common/rendering/hwrenderer/utility/hw_shaderpatcher.cpp

View file

@ -64,6 +64,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "menu/menu.h" #include "menu/menu.h"
#include "gstrings.h" #include "gstrings.h"
#include "v_2ddrawer.h" #include "v_2ddrawer.h"
#include "v_video.h"
CVARD(Bool, hud_powerupduration, true, CVAR_ARCHIVE|CVAR_FRONTEND_BLOOD, "enable/disable displaying the remaining seconds for power-ups") CVARD(Bool, hud_powerupduration, true, CVAR_ARCHIVE|CVAR_FRONTEND_BLOOD, "enable/disable displaying the remaining seconds for power-ups")
@ -3226,6 +3227,7 @@ void viewDrawScreen(void)
} }
else if (v4 && gNetPlayers > 1) else if (v4 && gNetPlayers > 1)
{ {
int tmp = ((int)totalclock / 240) % (gNetPlayers - 1); int tmp = ((int)totalclock / 240) % (gNetPlayers - 1);
int i = connecthead; int i = connecthead;
while (1) while (1)
@ -3245,6 +3247,7 @@ void viewDrawScreen(void)
} }
renderSetTarget(4079, 128, 128); renderSetTarget(4079, 128, 128);
renderSetAspect(65536, 78643); renderSetAspect(65536, 78643);
screen->BeginScene();
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;
@ -3307,6 +3310,7 @@ void viewDrawScreen(void)
memcpy(gotpic + 510, bakMirrorGotpic, 2); memcpy(gotpic + 510, bakMirrorGotpic, 2);
viewProcessSprites(vd8, vd4, vd0, v50, gInterpolate); viewProcessSprites(vd8, vd4, vd0, v50, gInterpolate);
renderDrawMasks(); renderDrawMasks();
screen->FinishScene();
renderRestoreTarget(); renderRestoreTarget();
} }
else else
@ -3347,6 +3351,7 @@ void viewDrawScreen(void)
} }
nSprite = nextspritestat[nSprite]; nSprite = nextspritestat[nSprite];
} }
screen->BeginScene();
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;
@ -3400,6 +3405,7 @@ void viewDrawScreen(void)
sub_557C4(cX, cY, gInterpolate); sub_557C4(cX, cY, gInterpolate);
renderDrawMasks(); renderDrawMasks();
gView->pSprite->cstat = bakCstat; gView->pSprite->cstat = bakCstat;
screen->FinishScene();
if (v78 || bDelirium) if (v78 || bDelirium)
{ {

View file

@ -45,6 +45,7 @@
#include "gl/system/gl_framebuffer.h" #include "gl/system/gl_framebuffer.h"
#include "gl/renderer/gl_renderer.h" #include "gl/renderer/gl_renderer.h"
#include "gl/renderer/gl_renderbuffers.h" #include "gl/renderer/gl_renderbuffers.h"
#include "hwrenderer/data/flatvertices.h"
/* /*
#include "gl/textures/gl_samplers.h" #include "gl/textures/gl_samplers.h"
#include "hwrenderer/utility/hw_clock.h" #include "hwrenderer/utility/hw_clock.h"
@ -105,8 +106,8 @@ OpenGLFrameBuffer::~OpenGLFrameBuffer()
{ {
PPResource::ResetAll(); PPResource::ResetAll();
#ifdef IMPLEMENT_IT
if (mVertexData != nullptr) delete mVertexData; if (mVertexData != nullptr) delete mVertexData;
#ifdef IMPLEMENT_IT
if (mSkyData != nullptr) delete mSkyData; if (mSkyData != nullptr) delete mSkyData;
if (mViewpoints != nullptr) delete mViewpoints; if (mViewpoints != nullptr) delete mViewpoints;
if (mLights != nullptr) delete mLights; if (mLights != nullptr) delete mLights;
@ -171,8 +172,8 @@ void OpenGLFrameBuffer::InitializeState()
SetViewportRects(nullptr); SetViewportRects(nullptr);
#ifdef IMPLEMENT_IT
mVertexData = new FFlatVertexBuffer(GetWidth(), GetHeight()); mVertexData = new FFlatVertexBuffer(GetWidth(), GetHeight());
#ifdef IMPLEMENT_IT
mSkyData = new FSkyVertexBuffer; mSkyData = new FSkyVertexBuffer;
mViewpoints = new HWViewpointBuffer; mViewpoints = new HWViewpointBuffer;
mLights = new FLightBuffer(); mLights = new FLightBuffer();
@ -305,6 +306,7 @@ FModelRenderer *OpenGLFrameBuffer::CreateModelRenderer(int mli)
{ {
return new FHWModelRenderer(nullptr, gl_RenderState, mli); return new FHWModelRenderer(nullptr, gl_RenderState, mli);
} }
#endif
IVertexBuffer *OpenGLFrameBuffer::CreateVertexBuffer() IVertexBuffer *OpenGLFrameBuffer::CreateVertexBuffer()
{ {
@ -315,7 +317,6 @@ IIndexBuffer *OpenGLFrameBuffer::CreateIndexBuffer()
{ {
return new GLIndexBuffer; return new GLIndexBuffer;
} }
#endif
IDataBuffer *OpenGLFrameBuffer::CreateDataBuffer(int bindingpoint, bool ssbo, bool needsresize) IDataBuffer *OpenGLFrameBuffer::CreateDataBuffer(int bindingpoint, bool ssbo, bool needsresize)
{ {

View file

@ -37,10 +37,8 @@ public:
void BeginFrame() override; void BeginFrame() override;
//void SetViewportRects(IntRect *bounds) override; //void SetViewportRects(IntRect *bounds) override;
void BlurScene(float amount) override; void BlurScene(float amount) override;
#ifdef IMPLEMENT_IT
IVertexBuffer *CreateVertexBuffer() override; IVertexBuffer *CreateVertexBuffer() override;
IIndexBuffer *CreateIndexBuffer() override; IIndexBuffer *CreateIndexBuffer() override;
#endif
IDataBuffer *CreateDataBuffer(int bindingpoint, bool ssbo, bool needsresize) override; IDataBuffer *CreateDataBuffer(int bindingpoint, bool ssbo, bool needsresize) override;
// Retrieves a buffer containing image data for a screenshot. // Retrieves a buffer containing image data for a screenshot.

View file

@ -0,0 +1,138 @@
/*
** hw_flatvertices.cpp
** Creates flat vertex data for hardware rendering.
**
**---------------------------------------------------------------------------
** Copyright 2010-2020 Christoph Oelckers
** All rights reserved.
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions
** are met:
**
** 1. Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** 2. Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
** 3. The name of the author may not be used to endorse or promote products
** derived from this software without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**---------------------------------------------------------------------------
**
*/
#include "c_cvars.h"
#include "flatvertices.h"
#include "v_video.h"
#include "cmdlib.h"
#include "hwrenderer/data/buffers.h"
//==========================================================================
//
//
//
//==========================================================================
FFlatVertexBuffer::FFlatVertexBuffer(int width, int height)
{
vbo_shadowdata.Resize(NUM_RESERVED);
// the first quad is reserved for handling coordinates through uniforms.
vbo_shadowdata[0].Set(0, 0, 0, 0, 0);
vbo_shadowdata[1].Set(1, 0, 0, 0, 0);
vbo_shadowdata[2].Set(2, 0, 0, 0, 0);
vbo_shadowdata[3].Set(3, 0, 0, 0, 0);
// and the second one for the fullscreen quad used for blend overlays.
vbo_shadowdata[4].Set(0, 0, 0, 0, 0);
vbo_shadowdata[5].Set(0, (float)height, 0, 0, 1);
vbo_shadowdata[6].Set((float)width, 0, 0, 1, 0);
vbo_shadowdata[7].Set((float)width, (float)height, 0, 1, 1);
// and this is for the postprocessing copy operation
vbo_shadowdata[8].Set(-1.0f, -1.0f, 0, 0.0f, 0.0f);
vbo_shadowdata[9].Set(-1.0f, 1.0f, 0, 0.0f, 1.f);
vbo_shadowdata[10].Set(1.0f, -1.0f, 0, 1.f, 0.0f);
vbo_shadowdata[11].Set(1.0f, 1.0f, 0, 1.f, 1.f);
// The next two are the stencil caps.
vbo_shadowdata[12].Set(-32767.0f, 32767.0f, -32767.0f, 0, 0);
vbo_shadowdata[13].Set(-32767.0f, 32767.0f, 32767.0f, 0, 0);
vbo_shadowdata[14].Set(32767.0f, 32767.0f, 32767.0f, 0, 0);
vbo_shadowdata[15].Set(32767.0f, 32767.0f, -32767.0f, 0, 0);
vbo_shadowdata[16].Set(-32767.0f, -32767.0f, -32767.0f, 0, 0);
vbo_shadowdata[17].Set(-32767.0f, -32767.0f, 32767.0f, 0, 0);
vbo_shadowdata[18].Set(32767.0f, -32767.0f, 32767.0f, 0, 0);
vbo_shadowdata[19].Set(32767.0f, -32767.0f, -32767.0f, 0, 0);
mVertexBuffer = screen->CreateVertexBuffer();
mIndexBuffer = screen->CreateIndexBuffer();
unsigned int bytesize = BUFFER_SIZE * sizeof(FFlatVertex);
mVertexBuffer->SetData(bytesize, nullptr, false);
static const FVertexBufferAttribute format[] = {
{ 0, VATTR_VERTEX, VFmt_Float3, (int)myoffsetof(FFlatVertex, x) },
{ 0, VATTR_TEXCOORD, VFmt_Float2, (int)myoffsetof(FFlatVertex, u) }
};
mVertexBuffer->SetFormat(1, 2, sizeof(FFlatVertex), format);
mIndex = mCurIndex = 0;
mNumReserved = NUM_RESERVED;
Copy(0, NUM_RESERVED);
}
//==========================================================================
//
//
//
//==========================================================================
FFlatVertexBuffer::~FFlatVertexBuffer()
{
delete mIndexBuffer;
delete mVertexBuffer;
mIndexBuffer = nullptr;
mVertexBuffer = nullptr;
}
//==========================================================================
//
//
//
//==========================================================================
void FFlatVertexBuffer::OutputResized(int width, int height)
{
vbo_shadowdata[4].Set(0, 0, 0, 0, 0);
vbo_shadowdata[5].Set(0, (float)height, 0, 0, 1);
vbo_shadowdata[6].Set((float)width, 0, 0, 1, 0);
vbo_shadowdata[7].Set((float)width, (float)height, 0, 1, 1);
Copy(4, 4);
}
//==========================================================================
//
//
//
//==========================================================================
void FFlatVertexBuffer::Copy(int start, int count)
{
Map();
memcpy(GetBuffer(start), &vbo_shadowdata[0], count * sizeof(FFlatVertex));
Unmap();
}

View file

@ -0,0 +1,98 @@
#ifndef _HW__VERTEXBUFFER_H
#define _HW__VERTEXBUFFER_H
#include "tarray.h"
#include "hwrenderer/data/buffers.h"
#include <atomic>
#include <mutex>
class FRenderState;
struct secplane_t;
struct subsector_t;
struct FFlatVertex
{
float x, z, y; // world position
float u, v; // texture coordinates
void Set(float xx, float zz, float yy, float uu, float vv)
{
x = xx;
z = zz;
y = yy;
u = uu;
v = vv;
}
};
class FFlatVertexBuffer
{
TArray<FFlatVertex> vbo_shadowdata;
TArray<uint32_t> ibo_data;
IVertexBuffer *mVertexBuffer;
IIndexBuffer *mIndexBuffer;
unsigned int mIndex;
std::atomic<unsigned int> mCurIndex;
unsigned int mNumReserved;
static const unsigned int BUFFER_SIZE = 2000000;
static const unsigned int BUFFER_SIZE_TO_USE = 1999500;
public:
enum
{
QUAD_INDEX = 0,
FULLSCREEN_INDEX = 4,
PRESENT_INDEX = 8,
STENCILTOP_INDEX = 12,
STENCILBOTTOM_INDEX = 16,
NUM_RESERVED = 20
};
FFlatVertexBuffer(int width, int height);
~FFlatVertexBuffer();
void OutputResized(int width, int height);
std::pair<IVertexBuffer *, IIndexBuffer *> GetBufferObjects() const
{
return std::make_pair(mVertexBuffer, mIndexBuffer);
}
void Copy(int start, int count);
FFlatVertex *GetBuffer(int index) const
{
FFlatVertex *ff = (FFlatVertex*)mVertexBuffer->Memory();
return &ff[index];
}
FFlatVertex *GetBuffer() const
{
return GetBuffer(mCurIndex);
}
std::pair<FFlatVertex *, unsigned int> AllocVertices(unsigned int count);
void Reset()
{
mCurIndex = mIndex;
}
void Map()
{
mVertexBuffer->Map();
}
void Unmap()
{
mVertexBuffer->Unmap();
}
};
#endif

View file

@ -49,8 +49,8 @@
/* /*
#include "hwrenderer/scene/hw_portal.h" #include "hwrenderer/scene/hw_portal.h"
#include "hwrenderer/utility/hw_clock.h" #include "hwrenderer/utility/hw_clock.h"
#include "hwrenderer/data/flatvertices.h"
*/ */
#include "hwrenderer/data/flatvertices.h"
#include <chrono> #include <chrono>
#include <thread> #include <thread>
@ -189,7 +189,7 @@ void DFrameBuffer::Update()
{ {
SetVirtualSize(clientWidth, clientHeight); SetVirtualSize(clientWidth, clientHeight);
V_OutputResized(clientWidth, clientHeight); V_OutputResized(clientWidth, clientHeight);
//mVertexData->OutputResized(clientWidth, clientHeight); mVertexData->OutputResized(clientWidth, clientHeight);
} }
} }
@ -364,3 +364,21 @@ void DFrameBuffer::FPSLimit()
} }
#endif #endif
} }
void DFrameBuffer::BeginScene()
{
if (videoGetRenderMode() < REND_POLYMOST) return;
assert(BufferLock >= 0);
if (BufferLock++ == 0)
{
mVertexData->Map();
}
}
void DFrameBuffer::FinishScene()
{
if (videoGetRenderMode() < REND_POLYMOST) return;
assert(BufferLock > 0);
if (--BufferLock == 0)
mVertexData->Unmap();
}

View file

@ -178,6 +178,7 @@ class FFont;
struct FRemapTable; struct FRemapTable;
class player_t; class player_t;
typedef uint32_t angle_t; typedef uint32_t angle_t;
struct RenderScene;
// //
@ -219,6 +220,7 @@ protected:
private: private:
int Width = 0; int Width = 0;
int Height = 0; int Height = 0;
int BufferLock = 0;
protected: protected:
int clipleft = 0, cliptop = 0, clipwidth = -1, clipheight = -1; int clipleft = 0, cliptop = 0, clipwidth = -1, clipheight = -1;
@ -233,7 +235,7 @@ public:
const char *vendorstring; // We have to account for some issues with particular vendors. const char *vendorstring; // We have to account for some issues with particular vendors.
//FPortalSceneState *mPortalState; // global portal state. //FPortalSceneState *mPortalState; // global portal state.
//FSkyVertexBuffer *mSkyData = nullptr; // the sky vertex buffer //FSkyVertexBuffer *mSkyData = nullptr; // the sky vertex buffer
//FFlatVertexBuffer *mVertexData = nullptr; // Global vertex data FFlatVertexBuffer *mVertexData = nullptr; // Global vertex data
//HWViewpointBuffer *mViewpoints = nullptr; // Viewpoint render data. //HWViewpointBuffer *mViewpoints = nullptr; // Viewpoint render data.
//FLightBuffer *mLights = nullptr; // Dynamic lights //FLightBuffer *mLights = nullptr; // Dynamic lights
//IShadowMap mShadowMap; //IShadowMap mShadowMap;
@ -313,6 +315,9 @@ public:
void Begin2D() { isIn2D = true; } void Begin2D() { isIn2D = true; }
void End2D() { isIn2D = false; } void End2D() { isIn2D = false; }
void BeginScene();
void FinishScene();
void End2DAndUpdate() void End2DAndUpdate()
{ {
DrawRateStuff(); DrawRateStuff();

View file

@ -725,6 +725,7 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
"other values are reserved.\n"); "other values are reserved.\n");
#endif #endif
screen->BeginScene();
#ifdef LEGACY_ROR #ifdef LEGACY_ROR
G_SE40(smoothRatio); G_SE40(smoothRatio);
#endif #endif
@ -737,6 +738,7 @@ 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();
screen->FinishScene();
} }
} }
else else
@ -981,6 +983,7 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
OSD_Printf(OSD_ERROR "ERROR: EVENT_DISPLAYROOMS return value must be 0 or 1, " OSD_Printf(OSD_ERROR "ERROR: EVENT_DISPLAYROOMS return value must be 0 or 1, "
"other values are reserved.\n"); "other values are reserved.\n");
#endif #endif
screen->BeginScene();
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();
@ -1010,6 +1013,7 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
#endif #endif
renderDrawMasks(); renderDrawMasks();
#endif #endif
screen->FinishScene();
} }
if (g_screenCapture) if (g_screenCapture)

View file

@ -42,6 +42,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "quotemgr.h" #include "quotemgr.h"
#include "mapinfo.h" #include "mapinfo.h"
#include "version.h" #include "version.h"
#include "v_video.h"
#include "debugbreak.h" #include "debugbreak.h"
@ -1214,6 +1215,7 @@ 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);
screen->BeginScene();
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
@ -1228,6 +1230,7 @@ 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();
screen->FinishScene();
G_RestoreInterpolations(); G_RestoreInterpolations();
G_UpdateScreenArea(); G_UpdateScreenArea();
renderSetAspect(viewingRange, yxAspect); renderSetAspect(viewingRange, yxAspect);

View file

@ -28,6 +28,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "printf.h" #include "printf.h"
#include "secrets.h" #include "secrets.h"
#include "v_video.h"
BEGIN_DUKE_NS BEGIN_DUKE_NS
@ -399,6 +400,7 @@ static void G_SetupCamTile(int spriteNum, int tileNum, int smoothRatio)
OSD_Printf(OSD_ERROR "ERROR: EVENT_DISPLAYROOMSCAMERATILE return value must be 0 or 1, " OSD_Printf(OSD_ERROR "ERROR: EVENT_DISPLAYROOMSCAMERATILE return value must be 0 or 1, "
"other values are reserved.\n"); "other values are reserved.\n");
#endif #endif
screen->BeginScene();
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));
@ -408,6 +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();
screen->FinishScene();
finishTileSetup: finishTileSetup:
renderRestoreTarget(); renderRestoreTarget();

View file

@ -36,6 +36,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "engine.h" #include "engine.h"
#include "trigdat.h" #include "trigdat.h"
#include "runlist.h" #include "runlist.h"
#include "v_video.h"
#include <string.h> #include <string.h>
BEGIN_PS_NS BEGIN_PS_NS
@ -530,9 +531,11 @@ void DrawView(int smoothRatio)
} }
} }
screen->BeginScene();
renderDrawRoomsQ16(nCamerax, nCameray, viewz, nCameraa, nCamerapan, nSector); renderDrawRoomsQ16(nCamerax, nCameray, viewz, nCameraa, nCamerapan, nSector);
analyzesprites(); analyzesprites();
renderDrawMasks(); renderDrawMasks();
screen->FinishScene();
if (HavePLURemap()) if (HavePLURemap())
{ {

View file

@ -1280,6 +1280,7 @@ 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));
screen->BeginScene();
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)
@ -1409,6 +1410,7 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
#endif #endif
renderDrawMasks(); renderDrawMasks();
#endif #endif
screen->FinishScene();
if (g_screenCapture) if (g_screenCapture)
{ {

View file

@ -26,6 +26,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "duke3d.h" #include "duke3d.h"
#include "secrets.h" #include "secrets.h"
#include "v_video.h"
BEGIN_RR_NS BEGIN_RR_NS
@ -505,6 +506,7 @@ 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);
screen->BeginScene();
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));
@ -514,6 +516,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();
screen->FinishScene();
renderRestoreTarget(); renderRestoreTarget();
squarerotatetile(tileNum); squarerotatetile(tileNum);

View file

@ -58,6 +58,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
#include "menu/menu.h" #include "menu/menu.h"
#include "swcvar.h" #include "swcvar.h"
#include "v_2ddrawer.h" #include "v_2ddrawer.h"
#include "v_video.h"
BEGIN_SW_NS BEGIN_SW_NS
@ -2183,6 +2184,7 @@ drawscreen(PLAYERp pp)
if (FAF_DebugView) if (FAF_DebugView)
videoClearViewableArea(255L); videoClearViewableArea(255L);
screen->BeginScene();
OverlapDraw = TRUE; OverlapDraw = TRUE;
DrawOverlapRoom(tx, ty, tz, tang, thoriz, tsectnum); DrawOverlapRoom(tx, ty, tz, tang, thoriz, tsectnum);
OverlapDraw = FALSE; OverlapDraw = FALSE;
@ -2203,6 +2205,7 @@ drawscreen(PLAYERp pp)
analyzesprites(tx, ty, tz, FALSE); analyzesprites(tx, ty, tz, FALSE);
post_analyzesprites(); post_analyzesprites();
renderDrawMasks(); renderDrawMasks();
screen->FinishScene();
if (r_usenewaspect) if (r_usenewaspect)
{ {
@ -2439,29 +2442,9 @@ DrawCompass(PLAYERp pp)
} }
void ScreenTileLock(void)
{
}
void ScreenTileUnLock(void)
{
}
int
ScreenLoadSaveSetup(PLAYERp pp)
{
int tx, ty, tz,thoriz,pp_siz;
short tang,tsectnum;
short i;
// lock and allocate memory
ScreenTileLock();
TileFiles.tileCreate(SAVE_SCREEN_TILE, SAVE_SCREEN_XSIZE, SAVE_SCREEN_YSIZE);
return SAVE_SCREEN_TILE;
}
#if 0
int int
ScreenSaveSetup(PLAYERp pp) ScreenSaveSetup(PLAYERp pp)
{ {
@ -2479,6 +2462,7 @@ ScreenSaveSetup(PLAYERp pp)
return SAVE_SCREEN_TILE; return SAVE_SCREEN_TILE;
} }
#endif

View file

@ -45,6 +45,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
#include "lists.h" #include "lists.h"
#include "pal.h" #include "pal.h"
#include "parent.h" #include "parent.h"
#include "v_video.h"
BEGIN_SW_NS BEGIN_SW_NS
@ -472,10 +473,12 @@ void drawroomstotile(int daposx, int daposy, int daposz,
TileFiles.tileCreate(tilenume, tilesiz[tilenume].x, tilesiz[tilenume].y); TileFiles.tileCreate(tilenume, tilesiz[tilenume].x, tilesiz[tilenume].y);
renderSetTarget(tilenume, tilesiz[tilenume].x, tilesiz[tilenume].y); renderSetTarget(tilenume, tilesiz[tilenume].x, tilesiz[tilenume].y);
screen->BeginScene();
drawrooms(daposx, daposy, daposz, daang, dahoriz, dacursectnum); drawrooms(daposx, daposy, daposz, daang, dahoriz, dacursectnum);
analyzesprites(daposx, daposy, daposz, FALSE); analyzesprites(daposx, daposy, daposz, FALSE);
renderDrawMasks(); renderDrawMasks();
screen->FinishScene();
renderRestoreTarget(); renderRestoreTarget();

View file

@ -90,15 +90,6 @@ extern SWBOOL sumowasseen;
extern SWBOOL zillawasseen; extern SWBOOL zillawasseen;
extern short BossSpriteNum[3]; extern short BossSpriteNum[3];
void ScreenTileLock(void);
void ScreenTileUnLock(void);
int ScreenSaveSetup(PLAYERp pp);
void ScreenSave(MFILE_WRITE fout);
int ScreenLoadSaveSetup(PLAYERp pp);
void ScreenLoad(MFILE_READ fin);
#define PANEL_SAVE 1 #define PANEL_SAVE 1
#define ANIM_SAVE 1 #define ANIM_SAVE 1
@ -255,12 +246,6 @@ bool GameInterface::SaveGame(FSaveGameNode *sv)
MWRITE(&Level,sizeof(Level),1,fil); MWRITE(&Level,sizeof(Level),1,fil);
MWRITE(&Skill,sizeof(Skill),1,fil); MWRITE(&Skill,sizeof(Skill),1,fil);
ScreenSaveSetup(&Player[myconnectindex]);
ScreenSave(fil);
ScreenTileUnLock();
MWRITE(&numplayers,sizeof(numplayers),1,fil); MWRITE(&numplayers,sizeof(numplayers),1,fil);
MWRITE(&myconnectindex,sizeof(myconnectindex),1,fil); MWRITE(&myconnectindex,sizeof(myconnectindex),1,fil);
MWRITE(&connecthead,sizeof(connecthead),1,fil); MWRITE(&connecthead,sizeof(connecthead),1,fil);
@ -794,10 +779,6 @@ bool GameInterface::LoadGame(FSaveGameNode* sv)
MREAD(&Level,sizeof(Level),1,fil); MREAD(&Level,sizeof(Level),1,fil);
MREAD(&Skill,sizeof(Skill),1,fil); MREAD(&Skill,sizeof(Skill),1,fil);
ScreenLoadSaveSetup(Player + myconnectindex);
ScreenLoad(fil);
ScreenTileUnLock();
MREAD(&numplayers, sizeof(numplayers),1,fil); MREAD(&numplayers, sizeof(numplayers),1,fil);
MREAD(&myconnectindex,sizeof(myconnectindex),1,fil); MREAD(&myconnectindex,sizeof(myconnectindex),1,fil);
MREAD(&connecthead,sizeof(connecthead),1,fil); MREAD(&connecthead,sizeof(connecthead),1,fil);
@ -1287,24 +1268,4 @@ bool GameInterface::LoadGame(FSaveGameNode* sv)
return true; return true;
} }
void
ScreenSave(MFILE_WRITE fout)
{
// int num;
MWRITE((void *)tileData(SAVE_SCREEN_TILE), SAVE_SCREEN_XSIZE * SAVE_SCREEN_YSIZE, 1, fout);
// ASSERT(num == 1);
}
void
ScreenLoad(MFILE_READ fin)
{
int num;
renderSetTarget(SAVE_SCREEN_TILE, SAVE_SCREEN_YSIZE, SAVE_SCREEN_XSIZE);
num = MREAD(tileData(SAVE_SCREEN_TILE), SAVE_SCREEN_XSIZE * SAVE_SCREEN_YSIZE, 1, fin);
renderRestoreTarget();
}
END_SW_NS END_SW_NS