mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-20 19:39:41 +00:00
disable water effects for spherical screenshots
This commit is contained in:
parent
5698d70806
commit
f60840754f
3 changed files with 31 additions and 13 deletions
|
@ -644,7 +644,7 @@ namespace MWRender
|
|||
|
||||
for (int j = 0; j < h; ++j)
|
||||
for (int i = 0; i < w; ++i)
|
||||
dest->setColor(getColorByDirection(smallPlanetCoords(i / ((float) w), j / ((float) h))),i,j);
|
||||
dest->setColor(getColorByDirection(sphericalCoords(i / ((float) w), j / ((float) h))),i,j);
|
||||
}
|
||||
|
||||
osg::Vec3d cylindricalCoords(double x, double y)
|
||||
|
@ -766,12 +766,6 @@ namespace MWRender
|
|||
{
|
||||
osg::Image *sideImage = s.getImage(i);
|
||||
screenshot(sideImage,w,w,directions[i]);
|
||||
|
||||
// if (i == 0)
|
||||
//image->allocateImage(resultW,resultH,sideImage->r(),sideImage->getPixelFormat(),sideImage->getDataType());
|
||||
//image->allocateImage(6 * w,w,sideImage->r(),sideImage->getPixelFormat(),sideImage->getDataType());
|
||||
|
||||
// osg::copyImage(sideImage,0,0,0,sideImage->s(),sideImage->t(),sideImage->r(),image,w * i,0,0);
|
||||
}
|
||||
|
||||
if (mCamera->isFirstPerson())
|
||||
|
@ -795,8 +789,6 @@ namespace MWRender
|
|||
mViewer->getCamera()->getViewMatrix() * osg::Matrixd::rotate(osg::Vec3(0,0,-1),direction)
|
||||
);
|
||||
|
||||
// TODO: water reflections have to be transformed as well!!!!!
|
||||
|
||||
rttCamera->setViewport(0, 0, w, h);
|
||||
|
||||
osg::ref_ptr<osg::Texture2D> texture (new osg::Texture2D);
|
||||
|
@ -823,10 +815,14 @@ namespace MWRender
|
|||
// at the time this function is called we are in the middle of a frame,
|
||||
// so out of order calls are necessary to get a correct frameNumber for the next frame.
|
||||
// refer to the advance() and frame() order in Engine::go()
|
||||
mWater->setEffectsEnabled(false);
|
||||
|
||||
mViewer->eventTraversal();
|
||||
mViewer->updateTraversal();
|
||||
mViewer->renderingTraversals();
|
||||
|
||||
mWater->setEffectsEnabled(true);
|
||||
|
||||
callback->waitTillDone();
|
||||
|
||||
// now that we've "used up" the current frame, get a fresh framenumber for the next frame() following after the screenshot is completed
|
||||
|
|
|
@ -207,7 +207,6 @@ osg::ref_ptr<osg::Image> readPngImage (const std::string& file)
|
|||
return result.getImage();
|
||||
}
|
||||
|
||||
|
||||
class Refraction : public osg::Camera
|
||||
{
|
||||
public:
|
||||
|
@ -221,7 +220,7 @@ public:
|
|||
setSmallFeatureCullingPixelSize(Settings::Manager::getInt("small feature culling pixel size", "Water"));
|
||||
setName("RefractionCamera");
|
||||
|
||||
setCullMask(Mask_Effect|Mask_Scene|Mask_Terrain|Mask_Actor|Mask_ParticleSystem|Mask_Sky|Mask_Sun|Mask_Player|Mask_Lighting);
|
||||
setupCullMask(true);
|
||||
setNodeMask(Mask_RenderToTexture);
|
||||
setViewport(0, 0, rttSize, rttSize);
|
||||
|
||||
|
@ -262,6 +261,12 @@ public:
|
|||
attach(osg::Camera::DEPTH_BUFFER, mRefractionDepthTexture);
|
||||
}
|
||||
|
||||
void setupCullMask(bool enabled)
|
||||
{
|
||||
setCullMask(!enabled ? 0 :
|
||||
Mask_Effect|Mask_Scene|Mask_Terrain|Mask_Actor|Mask_ParticleSystem|Mask_Sky|Mask_Sun|Mask_Player|Mask_Lighting);
|
||||
}
|
||||
|
||||
void setScene(osg::Node* scene)
|
||||
{
|
||||
if (mScene)
|
||||
|
@ -304,9 +309,9 @@ public:
|
|||
setSmallFeatureCullingPixelSize(Settings::Manager::getInt("small feature culling pixel size", "Water"));
|
||||
setName("ReflectionCamera");
|
||||
|
||||
bool reflectActors = Settings::Manager::getBool("reflect actors", "Water");
|
||||
mReflectActors = Settings::Manager::getBool("reflect actors", "Water");
|
||||
|
||||
setCullMask(Mask_Effect|Mask_Scene|Mask_Terrain|Mask_ParticleSystem|Mask_Sky|Mask_Player|Mask_Lighting|(reflectActors ? Mask_Actor : 0));
|
||||
setupCullMask(true);
|
||||
setNodeMask(Mask_RenderToTexture);
|
||||
|
||||
unsigned int rttSize = Settings::Manager::getInt("rtt size", "Water");
|
||||
|
@ -334,6 +339,12 @@ public:
|
|||
addChild(mClipCullNode);
|
||||
}
|
||||
|
||||
void setupCullMask(bool enabled)
|
||||
{
|
||||
setCullMask(!enabled ? 0 :
|
||||
Mask_Effect|Mask_Scene|Mask_Terrain|Mask_ParticleSystem|Mask_Sky|Mask_Player|Mask_Lighting|(mReflectActors ? Mask_Actor : 0));
|
||||
}
|
||||
|
||||
void setWaterLevel(float waterLevel)
|
||||
{
|
||||
setViewMatrix(osg::Matrix::scale(1,1,-1) * osg::Matrix::translate(0,0,2 * waterLevel));
|
||||
|
@ -357,6 +368,7 @@ private:
|
|||
osg::ref_ptr<osg::Texture2D> mReflectionTexture;
|
||||
osg::ref_ptr<ClipCullNode> mClipCullNode;
|
||||
osg::ref_ptr<osg::Node> mScene;
|
||||
bool mReflectActors;
|
||||
};
|
||||
|
||||
/// DepthClampCallback enables GL_DEPTH_CLAMP for the current draw, if supported.
|
||||
|
@ -697,4 +709,13 @@ void Water::clearRipples()
|
|||
mSimulation->clear();
|
||||
}
|
||||
|
||||
void Water::setEffectsEnabled(bool enabled)
|
||||
{
|
||||
if (mReflection)
|
||||
mReflection->setupCullMask(enabled);
|
||||
|
||||
if (mRefraction)
|
||||
mRefraction->setupCullMask(enabled);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -106,6 +106,7 @@ namespace MWRender
|
|||
void removeCell(const MWWorld::CellStore* store); ///< remove all emitters in this cell
|
||||
|
||||
void clearRipples();
|
||||
void setEffectsEnabled(bool enabled);
|
||||
|
||||
void changeCell(const MWWorld::CellStore* store);
|
||||
void setHeight(const float height);
|
||||
|
|
Loading…
Reference in a new issue