light: bounce: multithread MakeBounceLights
This commit is contained in:
parent
2bca34265c
commit
ebf04ceb24
|
|
@ -31,6 +31,7 @@
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <mutex>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
@ -826,6 +827,7 @@ GetDirectLighting(const vec3_t origin, const vec3_t normal, vec3_t colorout)
|
||||||
|
|
||||||
std::vector<patch_t *> triangleIndexToPatch;
|
std::vector<patch_t *> triangleIndexToPatch;
|
||||||
std::unordered_map<int, std::vector<patch_t *>> facenumToPatches;
|
std::unordered_map<int, std::vector<patch_t *>> facenumToPatches;
|
||||||
|
mutex facenumToPatches_mutex;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=============
|
=============
|
||||||
|
|
@ -908,6 +910,7 @@ void SavePatch (const bsp2_t *bsp, const bsp2_dface_t *sourceface, winding_t *w)
|
||||||
}
|
}
|
||||||
|
|
||||||
// save
|
// save
|
||||||
|
unique_lock<mutex> lck { facenumToPatches_mutex };
|
||||||
facenumToPatches[i].push_back(p);
|
facenumToPatches[i].push_back(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -957,10 +960,16 @@ void DicePatch (const bsp2_t *bsp, const bsp2_dface_t *sourceface, winding_t *w,
|
||||||
DicePatch(bsp, sourceface, o2, subdiv);
|
DicePatch(bsp, sourceface, o2, subdiv);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MakeBounceLights (const bsp2_t *bsp)
|
static void *
|
||||||
|
MakeBounceLightsThread (void *arg)
|
||||||
{
|
{
|
||||||
const dmodel_t *model = &bsp->dmodels[0];
|
const bsp2_t *bsp = (const bsp2_t *)arg;
|
||||||
for (int i=model->firstface; i<model->firstface + model->numfaces; i++) {
|
|
||||||
|
while (1) {
|
||||||
|
int i = GetThreadWork();
|
||||||
|
if (i == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
const bsp2_dface_t *face = &bsp->dfaces[i];
|
const bsp2_dface_t *face = &bsp->dfaces[i];
|
||||||
if (bsp->texinfo[face->texinfo].flags & TEX_SPECIAL) {
|
if (bsp->texinfo[face->texinfo].flags & TEX_SPECIAL) {
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -970,7 +979,17 @@ void MakeBounceLights (const bsp2_t *bsp)
|
||||||
DicePatch(bsp, face, winding, 1024);
|
DicePatch(bsp, face, winding, 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
int patches =0;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MakeBounceLights (const bsp2_t *bsp)
|
||||||
|
{
|
||||||
|
logprint("--- MakeBounceLights ---\n");
|
||||||
|
|
||||||
|
const dmodel_t *model = &bsp->dmodels[0];
|
||||||
|
RunThreadsOn(model->firstface, model->firstface + model->numfaces, MakeBounceLightsThread, (void *)bsp);
|
||||||
|
|
||||||
|
int patches = 0;
|
||||||
|
|
||||||
for (auto mapentry : facenumToPatches) {
|
for (auto mapentry : facenumToPatches) {
|
||||||
for (auto patch : mapentry.second) {
|
for (auto patch : mapentry.second) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue