mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-28 23:11:58 +00:00
- Add polyobj support to r_scene_multithreaded
This commit is contained in:
parent
adcc7588ec
commit
4545539045
3 changed files with 24 additions and 18 deletions
|
@ -103,9 +103,9 @@ namespace swrenderer
|
|||
// calls to GetPixels for this to work.
|
||||
|
||||
static std::mutex loadmutex;
|
||||
loadmutex.lock();
|
||||
try
|
||||
{
|
||||
|
||||
std::unique_lock<std::mutex> lock(loadmutex);
|
||||
|
||||
texture->GetPixels();
|
||||
const FTexture::Span *spans;
|
||||
texture->GetColumn(0, &spans);
|
||||
|
@ -114,12 +114,17 @@ namespace swrenderer
|
|||
texture->GetPixelsBgra();
|
||||
texture->GetColumnBgra(0, &spans);
|
||||
}
|
||||
loadmutex.unlock();
|
||||
}
|
||||
catch (...)
|
||||
|
||||
void RenderThread::PreparePolyObject(subsector_t *sub)
|
||||
{
|
||||
loadmutex.unlock();
|
||||
throw;
|
||||
static std::mutex polyobjmutex;
|
||||
|
||||
std::unique_lock<std::mutex> lock(polyobjmutex);
|
||||
|
||||
if (sub->BSP == nullptr || sub->BSP->bDirty)
|
||||
{
|
||||
sub->BuildPolyBSP();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,6 +84,9 @@ namespace swrenderer
|
|||
// Make sure texture can accessed safely
|
||||
void PrepareTexture(FTexture *texture);
|
||||
|
||||
// Setup poly object in a threadsafe manner
|
||||
void PreparePolyObject(subsector_t *sub);
|
||||
|
||||
private:
|
||||
std::unique_ptr<SWTruecolorDrawers> tc_drawers;
|
||||
std::unique_ptr<SWPalDrawers> pal_drawers;
|
||||
|
|
|
@ -390,10 +390,8 @@ namespace swrenderer
|
|||
|
||||
void RenderOpaquePass::AddPolyobjs(subsector_t *sub)
|
||||
{
|
||||
if (sub->BSP == nullptr || sub->BSP->bDirty)
|
||||
{
|
||||
sub->BuildPolyBSP();
|
||||
}
|
||||
Thread->PreparePolyObject(sub);
|
||||
|
||||
if (sub->BSP->Nodes.Size() == 0)
|
||||
{
|
||||
RenderSubsector(&sub->BSP->Subsectors[0]);
|
||||
|
|
Loading…
Reference in a new issue