Fix inventory doll when ripple fragment shader path is used

Basically don't abuse OSG as badly. We need to let it know we've bound a shader program so it doesn't assume the FFP is still used, but it doesn't have a built-in way to apply the uniforms when doing so, so we need to do it manually.
pull/3236/head
AnyOldName3 3 months ago
parent 95a1183ad3
commit bd8386459a

@ -206,8 +206,14 @@ namespace MWRender
}; };
// PASS: Blot in all ripple spawners // PASS: Blot in all ripple spawners
state.pushStateSet(frameState.mStateset);
state.apply();
state.applyAttribute(mProgramBlobber); state.applyAttribute(mProgramBlobber);
state.apply(frameState.mStateset); for (const auto& [name, stack] : state.getUniformMap())
{
if (!stack.uniformVec.empty())
state.getLastAppliedProgramObject()->apply(*(stack.uniformVec.back().first));
}
if (mUseCompute) if (mUseCompute)
{ {
@ -226,7 +232,11 @@ namespace MWRender
// PASS: Wave simulation // PASS: Wave simulation
state.applyAttribute(mProgramSimulation); state.applyAttribute(mProgramSimulation);
state.apply(frameState.mStateset); for (const auto& [name, stack] : state.getUniformMap())
{
if (!stack.uniformVec.empty())
state.getLastAppliedProgramObject()->apply(*(stack.uniformVec.back().first));
}
if (mUseCompute) if (mUseCompute)
{ {
@ -242,6 +252,8 @@ namespace MWRender
state.applyTextureAttribute(0, mTextures[1]); state.applyTextureAttribute(0, mTextures[1]);
osg::Geometry::drawImplementation(renderInfo); osg::Geometry::drawImplementation(renderInfo);
} }
state.popStateSet();
} }
osg::Texture* RipplesSurface::getColorTexture() const osg::Texture* RipplesSurface::getColorTexture() const

Loading…
Cancel
Save