1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-04 03:40:14 +00:00

Merge branch 'light_tweaks' into 'master'

[Postprocessing] Tweaks to light collection

See merge request OpenMW/openmw!1928
This commit is contained in:
psi29a 2022-05-25 07:51:17 +00:00
commit a14285bff5
3 changed files with 19 additions and 8 deletions

View File

@ -86,7 +86,7 @@ int omw_GetPointLightCount()
return omw_PointLightsCount;
}
vec3 omw_GetPointLightViewPos(int index)
vec3 omw_GetPointLightWorldPos(int index)
{
return omw_PointLights[(index * 3)].xyz;
}

View File

@ -635,6 +635,9 @@ namespace SceneUtil
cv->pushStateSet(stateset);
traverse(node, cv);
cv->popStateSet();
if (node->getPPLightsBuffer() && cv->getCurrentCamera()->getName() == Constants::SceneCamera)
node->getPPLightsBuffer()->updateCount(cv->getTraversalNumber());
}
};
@ -1141,12 +1144,15 @@ namespace SceneUtil
if (mPPLightBuffer && it->first->getName() == Constants::SceneCamera)
{
const auto* light = l.mLightSource->getLight(frameNum);
mPPLightBuffer->setLight(frameNum, light->getPosition() * (*viewMatrix),
light->getDiffuse(),
light->getConstantAttenuation(),
light->getLinearAttenuation(),
light->getQuadraticAttenuation(),
l.mLightSource->getRadius());
if (light->getDiffuse().x() >= 0.f)
{
mPPLightBuffer->setLight(frameNum, light->getPosition(),
light->getDiffuse(),
light->getConstantAttenuation(),
light->getLinearAttenuation(),
light->getQuadraticAttenuation(),
l.mLightSource->getRadius());
}
}
}
}

View File

@ -29,7 +29,7 @@ namespace SceneUtil
class PPLightBuffer
{
public:
inline static constexpr auto sMaxPPLights = 30;
inline static constexpr auto sMaxPPLights = 40;
inline static constexpr auto sMaxPPLightsArraySize = sMaxPPLights * 3;
PPLightBuffer()
@ -75,6 +75,11 @@ namespace SceneUtil
mUniformBuffers[frameId]->setElement(i + 2, osg::Vec4f(ac, al, aq, radius));
mIndex[frameId]++;
}
void updateCount(size_t frame)
{
size_t frameId = frame % 2;
mUniformCount[frameId]->set(static_cast<int>(mIndex[frameId]));
}