- Collect all PVS information first so that processing the individual sectors can be done on multiple threads
This commit is contained in:
parent
4101e9bf1d
commit
7a1274ab76
30 changed files with 630 additions and 265 deletions
|
|
@ -54,7 +54,6 @@ PolyRenderer *PolyRenderer::Instance()
|
|||
|
||||
PolyRenderer::PolyRenderer()
|
||||
{
|
||||
DrawQueue = std::make_shared<DrawerCommandQueue>(&FrameMemory);
|
||||
}
|
||||
|
||||
void PolyRenderer::RenderView(player_t *player)
|
||||
|
|
@ -75,12 +74,11 @@ void PolyRenderer::RenderView(player_t *player)
|
|||
CameraLight *cameraLight = CameraLight::Instance();
|
||||
if (cameraLight->ShaderColormap() && RenderTarget->IsBgra() && !(r_shadercolormaps && screen->Accel2D))
|
||||
{
|
||||
DrawQueue->Push<ApplySpecialColormapRGBACommand>(cameraLight->ShaderColormap(), screen);
|
||||
Threads.MainThread()->DrawQueue->Push<ApplySpecialColormapRGBACommand>(cameraLight->ShaderColormap(), screen);
|
||||
}
|
||||
|
||||
DrawerThreads::Execute(DrawQueue);
|
||||
Threads.MainThread()->FlushDrawQueue();
|
||||
DrawerThreads::WaitForWorkers();
|
||||
DrawQueue->Clear();
|
||||
}
|
||||
|
||||
void PolyRenderer::RenderViewToCanvas(AActor *actor, DCanvas *canvas, int x, int y, int width, int height, bool dontmaplines)
|
||||
|
|
@ -98,7 +96,7 @@ void PolyRenderer::RenderViewToCanvas(AActor *actor, DCanvas *canvas, int x, int
|
|||
canvas->Lock(true);
|
||||
|
||||
RenderActorView(actor, dontmaplines);
|
||||
DrawerThreads::Execute(DrawQueue);
|
||||
Threads.MainThread()->FlushDrawQueue();
|
||||
DrawerThreads::WaitForWorkers();
|
||||
|
||||
canvas->Unlock();
|
||||
|
|
@ -141,9 +139,9 @@ void PolyRenderer::RenderActorView(AActor *actor, bool dontmaplines)
|
|||
SetupPerspectiveMatrix();
|
||||
MainPortal.SetViewpoint(WorldToClip, PolyClipPlane(0.0f, 0.0f, 0.0f, 1.0f), GetNextStencilValue());
|
||||
MainPortal.Render(0);
|
||||
Skydome.Render(WorldToClip);
|
||||
Skydome.Render(Threads.MainThread(), WorldToClip);
|
||||
MainPortal.RenderTranslucent(0);
|
||||
PlayerSprites.Render();
|
||||
PlayerSprites.Render(Threads.MainThread());
|
||||
|
||||
Viewpoint.camera->renderflags = savedflags;
|
||||
interpolator.RestoreInterpolations ();
|
||||
|
|
@ -158,7 +156,7 @@ void PolyRenderer::RenderRemainingPlayerSprites()
|
|||
|
||||
void PolyRenderer::ClearBuffers()
|
||||
{
|
||||
FrameMemory.Clear();
|
||||
Threads.Clear();
|
||||
PolyStencilBuffer::Instance()->Clear(RenderTarget->GetWidth(), RenderTarget->GetHeight(), 0);
|
||||
PolyZBuffer::Instance()->Resize(RenderTarget->GetPitch(), RenderTarget->GetHeight());
|
||||
NextStencilValue = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue