mirror of
https://github.com/OpenMW/openmw.git
synced 2025-11-29 23:34:42 +00:00
Address various conversion warnings in openmw
This commit is contained in:
parent
9523f46409
commit
b845e07ad6
21 changed files with 91 additions and 86 deletions
|
|
@ -25,7 +25,7 @@ namespace MWGui
|
||||||
|
|
||||||
struct BookTypesetter::Style
|
struct BookTypesetter::Style
|
||||||
{
|
{
|
||||||
virtual ~Style() {}
|
virtual ~Style() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TypesetBookImpl : TypesetBook
|
struct TypesetBookImpl : TypesetBook
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ namespace MWGui
|
||||||
|
|
||||||
void CountDialog::onSliderMoved(MyGUI::ScrollBar* sender, size_t position)
|
void CountDialog::onSliderMoved(MyGUI::ScrollBar* sender, size_t position)
|
||||||
{
|
{
|
||||||
mItemEdit->setValue(position + 1);
|
mItemEdit->setValue(static_cast<int>(position + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CountDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg)
|
bool CountDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg)
|
||||||
|
|
|
||||||
|
|
@ -248,7 +248,7 @@ namespace MWGui
|
||||||
|
|
||||||
void RaceDialog::onHeadRotate(MyGUI::ScrollBar* scroll, size_t position)
|
void RaceDialog::onHeadRotate(MyGUI::ScrollBar* scroll, size_t position)
|
||||||
{
|
{
|
||||||
float angle = (float(position) / (scroll->getScrollRange() - 1) - 0.5f) * osg::PI * 2;
|
float angle = (float(position) / (scroll->getScrollRange() - 1) - 0.5f) * osg::PIf * 2;
|
||||||
mPreview->setAngle(angle);
|
mPreview->setAngle(angle);
|
||||||
|
|
||||||
mCurrentAngle = angle;
|
mCurrentAngle = angle;
|
||||||
|
|
|
||||||
|
|
@ -147,8 +147,9 @@ namespace MWGui::Widgets
|
||||||
}
|
}
|
||||||
if (mAttributeValueWidget)
|
if (mAttributeValueWidget)
|
||||||
{
|
{
|
||||||
int modified = mValue.getModified(), base = mValue.getBase();
|
float modified = mValue.getModified();
|
||||||
mAttributeValueWidget->setCaption(MyGUI::utility::toString(modified));
|
float base = mValue.getBase();
|
||||||
|
mAttributeValueWidget->setCaption(MyGUI::utility::toString(static_cast<int>(modified)));
|
||||||
if (modified > base)
|
if (modified > base)
|
||||||
mAttributeValueWidget->_setWidgetState("increased");
|
mAttributeValueWidget->_setWidgetState("increased");
|
||||||
else if (modified < base)
|
else if (modified < base)
|
||||||
|
|
|
||||||
|
|
@ -18,14 +18,7 @@ namespace MWGui
|
||||||
// Makes it possible to use ItemModel::moveItem to move an item from an inventory to the world.
|
// Makes it possible to use ItemModel::moveItem to move an item from an inventory to the world.
|
||||||
class WorldItemModel : public ItemModel
|
class WorldItemModel : public ItemModel
|
||||||
{
|
{
|
||||||
public:
|
MWWorld::Ptr dropItemImpl(const ItemStack& item, int count, bool copy)
|
||||||
explicit WorldItemModel(float cursorX, float cursorY)
|
|
||||||
: mCursorX(cursorX)
|
|
||||||
, mCursorY(cursorY)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
MWWorld::Ptr dropItemImpl(const ItemStack& item, size_t count, bool copy)
|
|
||||||
{
|
{
|
||||||
MWBase::World& world = *MWBase::Environment::get().getWorld();
|
MWBase::World& world = *MWBase::Environment::get().getWorld();
|
||||||
|
|
||||||
|
|
@ -42,14 +35,21 @@ namespace MWGui
|
||||||
return dropped;
|
return dropped;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit WorldItemModel(float cursorX, float cursorY)
|
||||||
|
: mCursorX(cursorX)
|
||||||
|
, mCursorY(cursorY)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
MWWorld::Ptr addItem(const ItemStack& item, size_t count, bool /*allowAutoEquip*/) override
|
MWWorld::Ptr addItem(const ItemStack& item, size_t count, bool /*allowAutoEquip*/) override
|
||||||
{
|
{
|
||||||
return dropItemImpl(item, count, false);
|
return dropItemImpl(item, static_cast<int>(count), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
MWWorld::Ptr copyItem(const ItemStack& item, size_t count, bool /*allowAutoEquip*/) override
|
MWWorld::Ptr copyItem(const ItemStack& item, size_t count, bool /*allowAutoEquip*/) override
|
||||||
{
|
{
|
||||||
return dropItemImpl(item, count, true);
|
return dropItemImpl(item, static_cast<int>(count), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeItem(const ItemStack& /*item*/, size_t /*count*/) override
|
void removeItem(const ItemStack& /*item*/, size_t /*count*/) override
|
||||||
|
|
|
||||||
|
|
@ -266,14 +266,14 @@ namespace MWInput
|
||||||
{
|
{
|
||||||
mGuiCursorX += xMove;
|
mGuiCursorX += xMove;
|
||||||
mGuiCursorY += yMove;
|
mGuiCursorY += yMove;
|
||||||
mMouseWheel += mouseWheelMove;
|
mMouseWheel += static_cast<int>(mouseWheelMove);
|
||||||
|
|
||||||
const MyGUI::IntSize& viewSize = MyGUI::RenderManager::getInstance().getViewSize();
|
const MyGUI::IntSize& viewSize = MyGUI::RenderManager::getInstance().getViewSize();
|
||||||
mGuiCursorX = std::clamp<float>(mGuiCursorX, 0.f, viewSize.width - 1);
|
mGuiCursorX = std::clamp<float>(mGuiCursorX, 0.f, viewSize.width - 1.f);
|
||||||
mGuiCursorY = std::clamp<float>(mGuiCursorY, 0.f, viewSize.height - 1);
|
mGuiCursorY = std::clamp<float>(mGuiCursorY, 0.f, viewSize.height - 1.f);
|
||||||
|
|
||||||
MyGUI::InputManager::getInstance().injectMouseMove(
|
MyGUI::InputManager::getInstance().injectMouseMove(
|
||||||
static_cast<int>(mGuiCursorX), static_cast<int>(mGuiCursorY), static_cast<int>(mMouseWheel));
|
static_cast<int>(mGuiCursorX), static_cast<int>(mGuiCursorY), mMouseWheel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MouseManager::warpMouse()
|
void MouseManager::warpMouse()
|
||||||
|
|
@ -285,8 +285,8 @@ namespace MWInput
|
||||||
|
|
||||||
void MouseManager::warpMouseToWidget(MyGUI::Widget* widget)
|
void MouseManager::warpMouseToWidget(MyGUI::Widget* widget)
|
||||||
{
|
{
|
||||||
float widgetX = widget->getAbsoluteCoord().left + widget->getWidth() / 2;
|
float widgetX = widget->getAbsoluteCoord().left + widget->getWidth() / 2.f;
|
||||||
float widgetY = widget->getAbsoluteCoord().top + widget->getHeight() / 4;
|
float widgetY = widget->getAbsoluteCoord().top + widget->getHeight() / 4.f;
|
||||||
if (std::abs(mGuiCursorX - widgetX) > 1 || std::abs(mGuiCursorY - widgetY) > 1)
|
if (std::abs(mGuiCursorX - widgetX) > 1 || std::abs(mGuiCursorY - widgetY) > 1)
|
||||||
{
|
{
|
||||||
mGuiCursorX = widgetX;
|
mGuiCursorX = widgetX;
|
||||||
|
|
|
||||||
|
|
@ -279,7 +279,7 @@ namespace MWRender
|
||||||
// such as bip01, bip01 spine1 etc. The child bones of these controllers have their own callback wrapper
|
// such as bip01, bip01 spine1 etc. The child bones of these controllers have their own callback wrapper
|
||||||
// which will call this instance's applyBoneBlend for each child bone. The order of update is important
|
// which will call this instance's applyBoneBlend for each child bone. The order of update is important
|
||||||
// as the blending calculations expect the bone's skeleton matrix to be at the sample point
|
// as the blending calculations expect the bone's skeleton matrix to be at the sample point
|
||||||
float time = nv->getFrameStamp()->getSimulationTime();
|
float time = static_cast<float>(nv->getFrameStamp()->getSimulationTime());
|
||||||
assert(node != nullptr);
|
assert(node != nullptr);
|
||||||
|
|
||||||
if (mBlendTrigger)
|
if (mBlendTrigger)
|
||||||
|
|
@ -308,7 +308,7 @@ namespace MWRender
|
||||||
|
|
||||||
auto [translation, rotation, scale] = mKeyframeTrack->getCurrentTransformation(nv);
|
auto [translation, rotation, scale] = mKeyframeTrack->getCurrentTransformation(nv);
|
||||||
|
|
||||||
float time = nv->getFrameStamp()->getSimulationTime();
|
float time = static_cast<float>(nv->getFrameStamp()->getSimulationTime());
|
||||||
|
|
||||||
if (mBlendTrigger)
|
if (mBlendTrigger)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ namespace MWRender
|
||||||
new osg::PolygonMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::LINE),
|
new osg::PolygonMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::LINE),
|
||||||
osg::StateAttribute::ON);
|
osg::StateAttribute::ON);
|
||||||
stateSet->setAttributeAndModes(new osg::PolygonOffset(
|
stateSet->setAttributeAndModes(new osg::PolygonOffset(
|
||||||
SceneUtil::AutoDepth::isReversed() ? 1.0 : -1.0, SceneUtil::AutoDepth::isReversed() ? 1.0 : -1.0));
|
SceneUtil::AutoDepth::isReversed() ? 1.f : -1.f, SceneUtil::AutoDepth::isReversed() ? 1.f : -1.f));
|
||||||
osg::ref_ptr<osg::Material> material = new osg::Material;
|
osg::ref_ptr<osg::Material> material = new osg::Material;
|
||||||
material->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE);
|
material->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE);
|
||||||
stateSet->setAttribute(material);
|
stateSet->setAttribute(material);
|
||||||
|
|
@ -118,8 +118,8 @@ namespace MWRender
|
||||||
mShapesRoot->removeChildren(0, mShapesRoot->getNumChildren());
|
mShapesRoot->removeChildren(0, mShapesRoot->getNumChildren());
|
||||||
mWorld->debugDrawWorld();
|
mWorld->debugDrawWorld();
|
||||||
showCollisions();
|
showCollisions();
|
||||||
mLinesDrawArrays->setCount(mLinesVertices->size());
|
mLinesDrawArrays->setCount(static_cast<GLsizei>(mLinesVertices->size()));
|
||||||
mTrisDrawArrays->setCount(mTrisVertices->size());
|
mTrisDrawArrays->setCount(static_cast<GLsizei>(mTrisVertices->size()));
|
||||||
mLinesVertices->dirty();
|
mLinesVertices->dirty();
|
||||||
mTrisVertices->dirty();
|
mTrisVertices->dirty();
|
||||||
mLinesColors->dirty();
|
mLinesColors->dirty();
|
||||||
|
|
@ -194,7 +194,8 @@ namespace MWRender
|
||||||
|
|
||||||
void DebugDrawer::drawSphere(btScalar radius, const btTransform& transform, const btVector3& color)
|
void DebugDrawer::drawSphere(btScalar radius, const btTransform& transform, const btVector3& color)
|
||||||
{
|
{
|
||||||
auto* geom = new osg::ShapeDrawable(new osg::Sphere(Misc::Convert::toOsg(transform.getOrigin()), radius));
|
auto* geom = new osg::ShapeDrawable(
|
||||||
|
new osg::Sphere(Misc::Convert::toOsg(transform.getOrigin()), static_cast<float>(radius)));
|
||||||
geom->setColor(osg::Vec4(1, 1, 1, 1));
|
geom->setColor(osg::Vec4(1, 1, 1, 1));
|
||||||
mShapesRoot->addChild(geom);
|
mShapesRoot->addChild(geom);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,7 @@ namespace MWRender
|
||||||
osg::Vec3d focal = mTrackedPosition + focalOffset;
|
osg::Vec3d focal = mTrackedPosition + focalOffset;
|
||||||
focalOffset.z() += 10.f; // Needed to avoid camera clipping through the ceiling because
|
focalOffset.z() += 10.f; // Needed to avoid camera clipping through the ceiling because
|
||||||
// character's head can be a bit higher than the collision area.
|
// character's head can be a bit higher than the collision area.
|
||||||
float offsetLen = focalOffset.length();
|
double offsetLen = focalOffset.length();
|
||||||
if (offsetLen > 0)
|
if (offsetLen > 0)
|
||||||
{
|
{
|
||||||
MWPhysics::RayCastingResult result
|
MWPhysics::RayCastingResult result
|
||||||
|
|
@ -280,9 +280,9 @@ namespace MWRender
|
||||||
osg::Vec2d delta = mFocalPointTargetOffset - mFocalPointCurrentOffset;
|
osg::Vec2d delta = mFocalPointTargetOffset - mFocalPointCurrentOffset;
|
||||||
if (delta.length2() > 0)
|
if (delta.length2() > 0)
|
||||||
{
|
{
|
||||||
float coef = duration * (1.0 + 5.0 / delta.length()) * mFocalPointTransitionSpeedCoef
|
double coef = duration * (1.0 + 5.0 / delta.length()) * mFocalPointTransitionSpeedCoef
|
||||||
* (1.0f - mPreviousTransitionInfluence);
|
* (1.0f - mPreviousTransitionInfluence);
|
||||||
mFocalPointCurrentOffset += delta * std::min(coef, 1.0f);
|
mFocalPointCurrentOffset += delta * std::min(coef, 1.0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -315,7 +315,7 @@ namespace MWRender
|
||||||
void Camera::setYaw(float angle, bool force)
|
void Camera::setYaw(float angle, bool force)
|
||||||
{
|
{
|
||||||
if (!mLockYaw || force)
|
if (!mLockYaw || force)
|
||||||
mYaw = Misc::normalizeAngle(angle);
|
mYaw = static_cast<float>(Misc::normalizeAngle(angle));
|
||||||
if (force)
|
if (force)
|
||||||
mLockYaw = true;
|
mLockYaw = true;
|
||||||
}
|
}
|
||||||
|
|
@ -433,8 +433,9 @@ namespace MWRender
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mDeferredRotation.x() = Misc::normalizeAngle(-ptr.getRefData().getPosition().rot[0] - mPitch);
|
mDeferredRotation.x()
|
||||||
mDeferredRotation.z() = Misc::normalizeAngle(-ptr.getRefData().getPosition().rot[2] - mYaw);
|
= static_cast<float>(Misc::normalizeAngle(-ptr.getRefData().getPosition().rot[0] - mPitch));
|
||||||
|
mDeferredRotation.z() = static_cast<float>(Misc::normalizeAngle(-ptr.getRefData().getPosition().rot[2] - mYaw));
|
||||||
if (!mDeferredRotationAllowed)
|
if (!mDeferredRotationAllowed)
|
||||||
mDeferredRotationDisabled = true;
|
mDeferredRotationDisabled = true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -479,8 +479,8 @@ namespace MWRender
|
||||||
{
|
{
|
||||||
if (!mViewport)
|
if (!mViewport)
|
||||||
return -1;
|
return -1;
|
||||||
float projX = (posX / mViewport->width()) * 2 - 1.f;
|
double projX = (posX / mViewport->width()) * 2 - 1;
|
||||||
float projY = (posY / mViewport->height()) * 2 - 1.f;
|
double projY = (posY / mViewport->height()) * 2 - 1;
|
||||||
// With Intersector::WINDOW, the intersection ratios are slightly inaccurate. Seems to be a
|
// With Intersector::WINDOW, the intersection ratios are slightly inaccurate. Seems to be a
|
||||||
// precision issue - compiling with OSG_USE_FLOAT_MATRIX=0, Intersector::WINDOW works ok.
|
// precision issue - compiling with OSG_USE_FLOAT_MATRIX=0, Intersector::WINDOW works ok.
|
||||||
// Using Intersector::PROJECTION results in better precision because the start/end points and the model matrices
|
// Using Intersector::PROJECTION results in better precision because the start/end points and the model matrices
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ namespace MWRender
|
||||||
osgUtil::RenderBin* bin, osg::RenderInfo& renderInfo, osgUtil::RenderLeaf*& previous)
|
osgUtil::RenderBin* bin, osg::RenderInfo& renderInfo, osgUtil::RenderLeaf*& previous)
|
||||||
{
|
{
|
||||||
osg::State* state = renderInfo.getState();
|
osg::State* state = renderInfo.getState();
|
||||||
size_t frameId = state->getFrameStamp()->getFrameNumber() % 2;
|
unsigned frameId = state->getFrameStamp()->getFrameNumber() % 2;
|
||||||
|
|
||||||
PostProcessor* postProcessor = dynamic_cast<PostProcessor*>(renderInfo.getCurrentCamera()->getUserData());
|
PostProcessor* postProcessor = dynamic_cast<PostProcessor*>(renderInfo.getCurrentCamera()->getUserData());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ namespace MWRender
|
||||||
for (const auto& instanceMatrix : mInstanceMatrices)
|
for (const auto& instanceMatrix : mInstanceMatrices)
|
||||||
{
|
{
|
||||||
osg::Matrix fullMatrix = instanceMatrix * matrix;
|
osg::Matrix fullMatrix = instanceMatrix * matrix;
|
||||||
osg::Vec3 instanceLookVector(-fullMatrix(0, 2), -fullMatrix(1, 2), -fullMatrix(2, 2));
|
osg::Vec3d instanceLookVector(-fullMatrix(0, 2), -fullMatrix(1, 2), -fullMatrix(2, 2));
|
||||||
unsigned int instanceBbCornerFar = (instanceLookVector.x() >= 0 ? 1 : 0)
|
unsigned int instanceBbCornerFar = (instanceLookVector.x() >= 0 ? 1 : 0)
|
||||||
| (instanceLookVector.y() >= 0 ? 2 : 0) | (instanceLookVector.z() >= 0 ? 4 : 0);
|
| (instanceLookVector.y() >= 0 ? 2 : 0) | (instanceLookVector.z() >= 0 ? 4 : 0);
|
||||||
unsigned int instanceBbCornerNear = (~instanceBbCornerFar) & 7;
|
unsigned int instanceBbCornerNear = (~instanceBbCornerFar) & 7;
|
||||||
|
|
@ -146,7 +146,7 @@ namespace MWRender
|
||||||
for (const auto& instanceMatrix : mInstanceMatrices)
|
for (const auto& instanceMatrix : mInstanceMatrices)
|
||||||
{
|
{
|
||||||
osg::Matrix fullMatrix = instanceMatrix * matrix;
|
osg::Matrix fullMatrix = instanceMatrix * matrix;
|
||||||
osg::Vec3 instanceLookVector(-fullMatrix(0, 2), -fullMatrix(1, 2), -fullMatrix(2, 2));
|
osg::Vec3d instanceLookVector(-fullMatrix(0, 2), -fullMatrix(1, 2), -fullMatrix(2, 2));
|
||||||
unsigned int instanceBbCornerFar = (instanceLookVector.x() >= 0 ? 1 : 0)
|
unsigned int instanceBbCornerFar = (instanceLookVector.x() >= 0 ? 1 : 0)
|
||||||
| (instanceLookVector.y() >= 0 ? 2 : 0) | (instanceLookVector.z() >= 0 ? 4 : 0);
|
| (instanceLookVector.y() >= 0 ? 2 : 0) | (instanceLookVector.z() >= 0 ? 4 : 0);
|
||||||
unsigned int instanceBbCornerNear = (~instanceBbCornerFar) & 7;
|
unsigned int instanceBbCornerNear = (~instanceBbCornerFar) & 7;
|
||||||
|
|
@ -217,10 +217,10 @@ namespace MWRender
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < geom.getNumPrimitiveSets(); ++i)
|
for (unsigned int i = 0; i < geom.getNumPrimitiveSets(); ++i)
|
||||||
{
|
{
|
||||||
geom.getPrimitiveSet(i)->setNumInstances(mInstances.size());
|
geom.getPrimitiveSet(i)->setNumInstances(static_cast<int>(mInstances.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
osg::ref_ptr<osg::Vec4Array> transforms = new osg::Vec4Array(mInstances.size());
|
osg::ref_ptr<osg::Vec4Array> transforms = new osg::Vec4Array(static_cast<unsigned>(mInstances.size()));
|
||||||
osg::BoundingBox box;
|
osg::BoundingBox box;
|
||||||
osg::BoundingBox originalBox = geom.getBoundingBox();
|
osg::BoundingBox originalBox = geom.getBoundingBox();
|
||||||
float radius = originalBox.radius();
|
float radius = originalBox.radius();
|
||||||
|
|
@ -238,7 +238,7 @@ namespace MWRender
|
||||||
|
|
||||||
geom.setInitialBound(box);
|
geom.setInitialBound(box);
|
||||||
|
|
||||||
osg::ref_ptr<osg::Vec3Array> rotations = new osg::Vec3Array(mInstances.size());
|
osg::ref_ptr<osg::Vec3Array> rotations = new osg::Vec3Array(static_cast<unsigned>(mInstances.size()));
|
||||||
for (unsigned int i = 0; i < rotations->getNumElements(); i++)
|
for (unsigned int i = 0; i < rotations->getNumElements(); i++)
|
||||||
{
|
{
|
||||||
(*rotations)[i] = mInstances[i].mPos.asRotationVec3();
|
(*rotations)[i] = mInstances[i].mPos.asRotationVec3();
|
||||||
|
|
@ -368,7 +368,7 @@ namespace MWRender
|
||||||
mProgramTemplate->addBindAttribLocation("aRotation", 7);
|
mProgramTemplate->addBindAttribLocation("aRotation", 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
Groundcover::~Groundcover() {}
|
Groundcover::~Groundcover() = default;
|
||||||
|
|
||||||
void Groundcover::collectInstances(InstanceMap& instances, float size, const osg::Vec2f& center)
|
void Groundcover::collectInstances(InstanceMap& instances, float size, const osg::Vec2f& center)
|
||||||
{
|
{
|
||||||
|
|
@ -379,7 +379,8 @@ namespace MWRender
|
||||||
osg::Vec2f maxBound = (center + osg::Vec2f(size / 2.f, size / 2.f));
|
osg::Vec2f maxBound = (center + osg::Vec2f(size / 2.f, size / 2.f));
|
||||||
DensityCalculator calculator(mDensity);
|
DensityCalculator calculator(mDensity);
|
||||||
ESM::ReadersCache readers;
|
ESM::ReadersCache readers;
|
||||||
osg::Vec2i startCell = osg::Vec2i(std::floor(center.x() - size / 2.f), std::floor(center.y() - size / 2.f));
|
osg::Vec2i startCell = osg::Vec2i(static_cast<int>(std::floor(center.x() - size / 2.f)),
|
||||||
|
static_cast<int>(std::floor(center.y() - size / 2.f)));
|
||||||
for (int cellX = startCell.x(); cellX < startCell.x() + size; ++cellX)
|
for (int cellX = startCell.x(); cellX < startCell.x() + size; ++cellX)
|
||||||
{
|
{
|
||||||
for (int cellY = startCell.y(); cellY < startCell.y() + size; ++cellY)
|
for (int cellY = startCell.y(); cellY < startCell.y() + size; ++cellY)
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ namespace
|
||||||
return val * val;
|
return val * val;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<int, int> divideIntoSegments(const osg::BoundingBox& bounds, float mapSize)
|
std::pair<int, int> divideIntoSegments(const osg::BoundingBox& bounds, int mapSize)
|
||||||
{
|
{
|
||||||
osg::Vec2f min(bounds.xMin(), bounds.yMin());
|
osg::Vec2f min(bounds.xMin(), bounds.yMin());
|
||||||
osg::Vec2f max(bounds.xMax(), bounds.yMax());
|
osg::Vec2f max(bounds.xMax(), bounds.yMax());
|
||||||
|
|
@ -76,8 +76,8 @@ namespace MWRender
|
||||||
|
|
||||||
LocalMap::LocalMap(osg::Group* root)
|
LocalMap::LocalMap(osg::Group* root)
|
||||||
: mRoot(root)
|
: mRoot(root)
|
||||||
, mMapResolution(
|
, mMapResolution(static_cast<int>(
|
||||||
Settings::map().mLocalMapResolution * MWBase::Environment::get().getWindowManager()->getScalingFactor())
|
Settings::map().mLocalMapResolution * MWBase::Environment::get().getWindowManager()->getScalingFactor()))
|
||||||
, mMapWorldSize(Constants::CellSizeInUnits)
|
, mMapWorldSize(Constants::CellSizeInUnits)
|
||||||
, mCellDistance(Constants::CellGridRadius)
|
, mCellDistance(Constants::CellGridRadius)
|
||||||
, mAngle(0.f)
|
, mAngle(0.f)
|
||||||
|
|
@ -352,7 +352,7 @@ namespace MWRender
|
||||||
else if (fog->mBounds.mMinX > mBounds.xMin())
|
else if (fog->mBounds.mMinX > mBounds.xMin())
|
||||||
{
|
{
|
||||||
float diff = fog->mBounds.mMinX - mBounds.xMin();
|
float diff = fog->mBounds.mMinX - mBounds.xMin();
|
||||||
xOffset = std::ceil(diff / mMapWorldSize);
|
xOffset = static_cast<int>(std::ceil(diff / mMapWorldSize));
|
||||||
mBounds.xMin() = fog->mBounds.mMinX - xOffset * mMapWorldSize;
|
mBounds.xMin() = fog->mBounds.mMinX - xOffset * mMapWorldSize;
|
||||||
}
|
}
|
||||||
if (fog->mBounds.mMinY < mBounds.yMin())
|
if (fog->mBounds.mMinY < mBounds.yMin())
|
||||||
|
|
@ -362,7 +362,7 @@ namespace MWRender
|
||||||
else if (fog->mBounds.mMinY > mBounds.yMin())
|
else if (fog->mBounds.mMinY > mBounds.yMin())
|
||||||
{
|
{
|
||||||
float diff = fog->mBounds.mMinY - mBounds.yMin();
|
float diff = fog->mBounds.mMinY - mBounds.yMin();
|
||||||
yOffset = std::ceil(diff / mMapWorldSize);
|
yOffset = static_cast<int>(std::ceil(diff / mMapWorldSize));
|
||||||
mBounds.yMin() = fog->mBounds.mMinY - yOffset * mMapWorldSize;
|
mBounds.yMin() = fog->mBounds.mMinY - yOffset * mMapWorldSize;
|
||||||
}
|
}
|
||||||
if (fog->mBounds.mMaxX > mBounds.xMax())
|
if (fog->mBounds.mMaxX > mBounds.xMax())
|
||||||
|
|
@ -388,7 +388,8 @@ namespace MWRender
|
||||||
{
|
{
|
||||||
for (int y = 0; y < segments.second; ++y)
|
for (int y = 0; y < segments.second; ++y)
|
||||||
{
|
{
|
||||||
osg::Vec2f start = min + osg::Vec2f(mMapWorldSize * x, mMapWorldSize * y);
|
osg::Vec2f start
|
||||||
|
= min + osg::Vec2f(static_cast<float>(mMapWorldSize * x), static_cast<float>(mMapWorldSize * y));
|
||||||
osg::Vec2f newcenter = start + osg::Vec2f(mMapWorldSize / 2.f, mMapWorldSize / 2.f);
|
osg::Vec2f newcenter = start + osg::Vec2f(mMapWorldSize / 2.f, mMapWorldSize / 2.f);
|
||||||
|
|
||||||
osg::Vec2f a = newcenter - mCenter;
|
osg::Vec2f a = newcenter - mCenter;
|
||||||
|
|
@ -535,8 +536,8 @@ namespace MWRender
|
||||||
float sqrDist = square((texU + mx * (sFogOfWarResolution - 1)) - u * (sFogOfWarResolution - 1))
|
float sqrDist = square((texU + mx * (sFogOfWarResolution - 1)) - u * (sFogOfWarResolution - 1))
|
||||||
+ square((texV + my * (sFogOfWarResolution - 1)) - v * (sFogOfWarResolution - 1));
|
+ square((texV + my * (sFogOfWarResolution - 1)) - v * (sFogOfWarResolution - 1));
|
||||||
|
|
||||||
const std::uint8_t alpha = std::min<std::uint8_t>(
|
const std::uint8_t alpha = std::min<std::uint8_t>(*data >> 24,
|
||||||
*data >> 24, std::clamp(sqrDist / sqrExploreRadius, 0.f, 1.f) * 255);
|
static_cast<std::uint8_t>(std::clamp(sqrDist / sqrExploreRadius, 0.f, 1.f) * 255));
|
||||||
std::uint32_t val = static_cast<std::uint32_t>(alpha << 24);
|
std::uint32_t val = static_cast<std::uint32_t>(alpha << 24);
|
||||||
if (*data != val)
|
if (*data != val)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -144,7 +144,7 @@ namespace MWRender
|
||||||
static const int sFogOfWarResolution = 32;
|
static const int sFogOfWarResolution = 32;
|
||||||
|
|
||||||
// size of a map segment (for exteriors, 1 cell)
|
// size of a map segment (for exteriors, 1 cell)
|
||||||
float mMapWorldSize;
|
int mMapWorldSize;
|
||||||
|
|
||||||
int mCellDistance;
|
int mCellDistance;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,8 @@ namespace MWRender
|
||||||
void PingPongCull::operator()(osg::Node* node, osgUtil::CullVisitor* cv)
|
void PingPongCull::operator()(osg::Node* node, osgUtil::CullVisitor* cv)
|
||||||
{
|
{
|
||||||
osgUtil::RenderStage* renderStage = cv->getCurrentRenderStage();
|
osgUtil::RenderStage* renderStage = cv->getCurrentRenderStage();
|
||||||
size_t frame = cv->getTraversalNumber();
|
unsigned frame = cv->getTraversalNumber();
|
||||||
size_t frameId = frame % 2;
|
unsigned frameId = frame % 2;
|
||||||
|
|
||||||
if (Stereo::getStereo())
|
if (Stereo::getStereo())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ namespace MWRender
|
||||||
// we can not trust Apple :)
|
// we can not trust Apple :)
|
||||||
mUseCompute = false;
|
mUseCompute = false;
|
||||||
#else
|
#else
|
||||||
constexpr float minimumGLVersionRequiredForCompute = 4.4;
|
constexpr float minimumGLVersionRequiredForCompute = 4.4f;
|
||||||
osg::GLExtensions& exts = SceneUtil::getGLExtensions();
|
osg::GLExtensions& exts = SceneUtil::getGLExtensions();
|
||||||
mUseCompute = exts.glVersion >= minimumGLVersionRequiredForCompute
|
mUseCompute = exts.glVersion >= minimumGLVersionRequiredForCompute
|
||||||
&& exts.glslLanguageVersion >= minimumGLVersionRequiredForCompute;
|
&& exts.glslLanguageVersion >= minimumGLVersionRequiredForCompute;
|
||||||
|
|
@ -183,7 +183,7 @@ namespace MWRender
|
||||||
- osg::Vec3f(mCurrentPlayerPos.x() * sWorldScaleFactor, mCurrentPlayerPos.y() * sWorldScaleFactor, 0.0)
|
- osg::Vec3f(mCurrentPlayerPos.x() * sWorldScaleFactor, mCurrentPlayerPos.y() * sWorldScaleFactor, 0.0)
|
||||||
+ osg::Vec3f(sRTTSize * sWorldScaleFactor / 2, sRTTSize * sWorldScaleFactor / 2, 0.0);
|
+ osg::Vec3f(sRTTSize * sWorldScaleFactor / 2, sRTTSize * sWorldScaleFactor / 2, 0.0);
|
||||||
pos /= sWorldScaleFactor;
|
pos /= sWorldScaleFactor;
|
||||||
positions->setElement(i, pos);
|
positions->setElement(static_cast<unsigned>(i), pos);
|
||||||
}
|
}
|
||||||
positions->dirty();
|
positions->dirty();
|
||||||
|
|
||||||
|
|
@ -217,7 +217,7 @@ namespace MWRender
|
||||||
}
|
}
|
||||||
|
|
||||||
osg::GLExtensions& ext = *state.get<osg::GLExtensions>();
|
osg::GLExtensions& ext = *state.get<osg::GLExtensions>();
|
||||||
const std::size_t contextID = state.getContextID();
|
const unsigned contextID = state.getContextID();
|
||||||
|
|
||||||
const auto bindImage = [&](osg::Texture2D* texture, GLuint index, GLenum access) {
|
const auto bindImage = [&](osg::Texture2D* texture, GLuint index, GLenum access) {
|
||||||
osg::Texture::TextureObject* to = texture->getTextureObject(contextID);
|
osg::Texture::TextureObject* to = texture->getTextureObject(contextID);
|
||||||
|
|
|
||||||
|
|
@ -64,8 +64,8 @@ namespace
|
||||||
stateset->setAttributeAndModes(depth, osg::StateAttribute::ON);
|
stateset->setAttributeAndModes(depth, osg::StateAttribute::ON);
|
||||||
|
|
||||||
osg::ref_ptr<osg::PolygonOffset> polygonOffset(new osg::PolygonOffset);
|
osg::ref_ptr<osg::PolygonOffset> polygonOffset(new osg::PolygonOffset);
|
||||||
polygonOffset->setUnits(SceneUtil::AutoDepth::isReversed() ? 1 : -1);
|
polygonOffset->setUnits(SceneUtil::AutoDepth::isReversed() ? 1.f : -1.f);
|
||||||
polygonOffset->setFactor(SceneUtil::AutoDepth::isReversed() ? 1 : -1);
|
polygonOffset->setFactor(SceneUtil::AutoDepth::isReversed() ? 1.f : -1.f);
|
||||||
stateset->setAttributeAndModes(polygonOffset, osg::StateAttribute::ON);
|
stateset->setAttributeAndModes(polygonOffset, osg::StateAttribute::ON);
|
||||||
|
|
||||||
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
|
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
|
||||||
|
|
@ -84,13 +84,13 @@ namespace
|
||||||
int findOldestParticleAlive(const osgParticle::ParticleSystem* partsys)
|
int findOldestParticleAlive(const osgParticle::ParticleSystem* partsys)
|
||||||
{
|
{
|
||||||
int oldest = -1;
|
int oldest = -1;
|
||||||
float oldestAge = 0.f;
|
double oldestAge = 0.f;
|
||||||
for (int i = 0; i < partsys->numParticles(); ++i)
|
for (int i = 0; i < partsys->numParticles(); ++i)
|
||||||
{
|
{
|
||||||
const osgParticle::Particle* particle = partsys->getParticle(i);
|
const osgParticle::Particle* particle = partsys->getParticle(i);
|
||||||
if (!particle->isAlive())
|
if (!particle->isAlive())
|
||||||
continue;
|
continue;
|
||||||
const float age = particle->getAge();
|
const double age = particle->getAge();
|
||||||
if (oldest == -1 || age > oldestAge)
|
if (oldest == -1 || age > oldestAge)
|
||||||
{
|
{
|
||||||
oldest = i;
|
oldest = i;
|
||||||
|
|
@ -116,7 +116,7 @@ namespace MWRender
|
||||||
|
|
||||||
osgParticle::Particle& particleTemplate = mParticleSystem->getDefaultParticleTemplate();
|
osgParticle::Particle& particleTemplate = mParticleSystem->getDefaultParticleTemplate();
|
||||||
particleTemplate.setSizeRange(osgParticle::rangef(15, 180));
|
particleTemplate.setSizeRange(osgParticle::rangef(15, 180));
|
||||||
particleTemplate.setColorRange(osgParticle::rangev4(osg::Vec4f(1, 1, 1, 0.7), osg::Vec4f(1, 1, 1, 0.7)));
|
particleTemplate.setColorRange(osgParticle::rangev4(osg::Vec4f(1, 1, 1, 0.7f), osg::Vec4f(1, 1, 1, 0.7f)));
|
||||||
particleTemplate.setAlphaRange(osgParticle::rangef(1.f, 0.f));
|
particleTemplate.setAlphaRange(osgParticle::rangef(1.f, 0.f));
|
||||||
particleTemplate.setAngularVelocity(osg::Vec3f(0, 0, Fallback::Map::getFloat("Water_RippleRotSpeed")));
|
particleTemplate.setAngularVelocity(osg::Vec3f(0, 0, Fallback::Map::getFloat("Water_RippleRotSpeed")));
|
||||||
particleTemplate.setLifeTime(Fallback::Map::getFloat("Water_RippleLifetime"));
|
particleTemplate.setLifeTime(Fallback::Map::getFloat("Water_RippleLifetime"));
|
||||||
|
|
@ -169,7 +169,7 @@ namespace MWRender
|
||||||
{
|
{
|
||||||
// Ripple simulation needs to continously apply impulses to keep simulation alive.
|
// Ripple simulation needs to continously apply impulses to keep simulation alive.
|
||||||
// Adding a timer delay will introduce many smaller ripples around actor instead of a smooth wake
|
// Adding a timer delay will introduce many smaller ripples around actor instead of a smooth wake
|
||||||
currentPos.z() = mParticleNode->getPosition().z();
|
currentPos.z() = static_cast<float>(mParticleNode->getPosition().z());
|
||||||
emitRipple(currentPos);
|
emitRipple(currentPos);
|
||||||
}
|
}
|
||||||
else if (emitter.mTimer <= 0.f || (currentPos - emitter.mLastEmitPosition).length() > 10)
|
else if (emitter.mTimer <= 0.f || (currentPos - emitter.mLastEmitPosition).length() > 10)
|
||||||
|
|
@ -177,7 +177,7 @@ namespace MWRender
|
||||||
emitter.mLastEmitPosition = currentPos;
|
emitter.mLastEmitPosition = currentPos;
|
||||||
emitter.mTimer = 1.5f;
|
emitter.mTimer = 1.5f;
|
||||||
|
|
||||||
currentPos.z() = mParticleNode->getPosition().z();
|
currentPos.z() = static_cast<float>(mParticleNode->getPosition().z());
|
||||||
|
|
||||||
emitRipple(currentPos);
|
emitRipple(currentPos);
|
||||||
}
|
}
|
||||||
|
|
@ -258,7 +258,7 @@ namespace MWRender
|
||||||
}
|
}
|
||||||
osgParticle::Particle* p = mParticleSystem->createParticle(nullptr);
|
osgParticle::Particle* p = mParticleSystem->createParticle(nullptr);
|
||||||
p->setPosition(osg::Vec3f(pos.x(), pos.y(), 0.f));
|
p->setPosition(osg::Vec3f(pos.x(), pos.y(), 0.f));
|
||||||
p->setAngle(osg::Vec3f(0, 0, Misc::Rng::rollProbability() * osg::PI * 2 - osg::PI));
|
p->setAngle(osg::Vec3f(0, 0, Misc::Rng::rollProbability() * osg::PIf * 2 - osg::PIf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,15 +65,15 @@ namespace MWRender
|
||||||
}
|
}
|
||||||
void drawImplementation(osg::RenderInfo& renderInfo, const osg::Drawable* /*drawable*/) const override
|
void drawImplementation(osg::RenderInfo& renderInfo, const osg::Drawable* /*drawable*/) const override
|
||||||
{
|
{
|
||||||
int screenW = renderInfo.getCurrentCamera()->getViewport()->width();
|
int screenW = static_cast<int>(renderInfo.getCurrentCamera()->getViewport()->width());
|
||||||
int screenH = renderInfo.getCurrentCamera()->getViewport()->height();
|
int screenH = static_cast<int>(renderInfo.getCurrentCamera()->getViewport()->height());
|
||||||
if (Stereo::getStereo())
|
if (Stereo::getStereo())
|
||||||
{
|
{
|
||||||
auto eyeRes = Stereo::Manager::instance().eyeResolution();
|
auto eyeRes = Stereo::Manager::instance().eyeResolution();
|
||||||
screenW = eyeRes.x();
|
screenW = eyeRes.x();
|
||||||
screenH = eyeRes.y();
|
screenH = eyeRes.y();
|
||||||
}
|
}
|
||||||
double imageaspect = (double)mWidth / (double)mHeight;
|
double imageaspect = double(mWidth) / double(mHeight);
|
||||||
int leftPadding = std::max(0, static_cast<int>(screenW - screenH * imageaspect) / 2);
|
int leftPadding = std::max(0, static_cast<int>(screenW - screenH * imageaspect) / 2);
|
||||||
int topPadding = std::max(0, static_cast<int>(screenH - screenW / imageaspect) / 2);
|
int topPadding = std::max(0, static_cast<int>(screenH - screenW / imageaspect) / 2);
|
||||||
int width = screenW - leftPadding * 2;
|
int width = screenW - leftPadding * 2;
|
||||||
|
|
|
||||||
|
|
@ -391,7 +391,7 @@ namespace MWRender
|
||||||
osg::Vec3 rainRange = osg::Vec3(mRainDiameter, mRainDiameter, (mRainMinHeight + mRainMaxHeight) / 2.f);
|
osg::Vec3 rainRange = osg::Vec3(mRainDiameter, mRainDiameter, (mRainMinHeight + mRainMaxHeight) / 2.f);
|
||||||
|
|
||||||
mRainParticleSystem->setParticleAlignment(osgParticle::ParticleSystem::FIXED);
|
mRainParticleSystem->setParticleAlignment(osgParticle::ParticleSystem::FIXED);
|
||||||
mRainParticleSystem->setAlignVectorX(osg::Vec3f(0.1, 0, 0));
|
mRainParticleSystem->setAlignVectorX(osg::Vec3f(0.1f, 0, 0));
|
||||||
mRainParticleSystem->setAlignVectorY(osg::Vec3f(0, 0, 1));
|
mRainParticleSystem->setAlignVectorY(osg::Vec3f(0, 0, 1));
|
||||||
|
|
||||||
osg::ref_ptr<osg::StateSet> stateset = mRainParticleSystem->getOrCreateStateSet();
|
osg::ref_ptr<osg::StateSet> stateset = mRainParticleSystem->getOrCreateStateSet();
|
||||||
|
|
|
||||||
|
|
@ -57,10 +57,10 @@ namespace
|
||||||
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
|
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
|
||||||
|
|
||||||
osg::ref_ptr<osg::Vec3Array> verts = new osg::Vec3Array;
|
osg::ref_ptr<osg::Vec3Array> verts = new osg::Vec3Array;
|
||||||
verts->push_back(osg::Vec3f(-0.5 * scale, -0.5 * scale, 0));
|
verts->push_back(osg::Vec3f(-0.5f * scale, -0.5f * scale, 0.f));
|
||||||
verts->push_back(osg::Vec3f(-0.5 * scale, 0.5 * scale, 0));
|
verts->push_back(osg::Vec3f(-0.5f * scale, 0.5f * scale, 0.f));
|
||||||
verts->push_back(osg::Vec3f(0.5 * scale, 0.5 * scale, 0));
|
verts->push_back(osg::Vec3f(0.5f * scale, 0.5f * scale, 0.f));
|
||||||
verts->push_back(osg::Vec3f(0.5 * scale, -0.5 * scale, 0));
|
verts->push_back(osg::Vec3f(0.5f * scale, -0.5f * scale, 0.f));
|
||||||
|
|
||||||
geom->setVertexArray(verts);
|
geom->setVertexArray(verts);
|
||||||
|
|
||||||
|
|
@ -179,7 +179,7 @@ namespace MWRender
|
||||||
|
|
||||||
if (visibleRatio > 0.f)
|
if (visibleRatio > 0.f)
|
||||||
{
|
{
|
||||||
const float fadeThreshold = 0.1;
|
const float fadeThreshold = 0.1f;
|
||||||
if (visibleRatio < fadeThreshold)
|
if (visibleRatio < fadeThreshold)
|
||||||
{
|
{
|
||||||
float fade = 1.f - (fadeThreshold - visibleRatio) / fadeThreshold;
|
float fade = 1.f - (fadeThreshold - visibleRatio) / fadeThreshold;
|
||||||
|
|
@ -190,7 +190,7 @@ namespace MWRender
|
||||||
}
|
}
|
||||||
else if (visibleRatio < 1.f)
|
else if (visibleRatio < 1.f)
|
||||||
{
|
{
|
||||||
const float threshold = 0.6;
|
const float threshold = 0.6f;
|
||||||
visibleRatio = visibleRatio * (1.f - threshold) + threshold;
|
visibleRatio = visibleRatio * (1.f - threshold) + threshold;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -304,8 +304,8 @@ namespace MWRender
|
||||||
|
|
||||||
forward.normalize();
|
forward.normalize();
|
||||||
sun.normalize();
|
sun.normalize();
|
||||||
float angleRadians = std::acos(forward * sun);
|
double angleRadians = std::acos(forward * sun);
|
||||||
return angleRadians;
|
return static_cast<float>(angleRadians);
|
||||||
}
|
}
|
||||||
|
|
||||||
osg::ref_ptr<osg::PositionAttitudeTransform> mSunTransform;
|
osg::ref_ptr<osg::PositionAttitudeTransform> mSunTransform;
|
||||||
|
|
@ -787,7 +787,7 @@ namespace MWRender
|
||||||
if (!sceneManager.getForceShaders())
|
if (!sceneManager.getForceShaders())
|
||||||
{
|
{
|
||||||
osg::ref_ptr<osg::AlphaFunc> alphaFunc = new osg::AlphaFunc;
|
osg::ref_ptr<osg::AlphaFunc> alphaFunc = new osg::AlphaFunc;
|
||||||
alphaFunc->setFunction(osg::AlphaFunc::GREATER, 0.8);
|
alphaFunc->setFunction(osg::AlphaFunc::GREATER, 0.8f);
|
||||||
stateset->setAttributeAndModes(alphaFunc);
|
stateset->setAttributeAndModes(alphaFunc);
|
||||||
}
|
}
|
||||||
stateset->setTextureAttributeAndModes(0, sunTex);
|
stateset->setTextureAttributeAndModes(0, sunTex);
|
||||||
|
|
@ -1146,7 +1146,7 @@ namespace MWRender
|
||||||
void RainShooter::shoot(osgParticle::Particle* particle) const
|
void RainShooter::shoot(osgParticle::Particle* particle) const
|
||||||
{
|
{
|
||||||
particle->setVelocity(mVelocity);
|
particle->setVelocity(mVelocity);
|
||||||
particle->setAngle(osg::Vec3f(-mAngle, 0, (Misc::Rng::rollProbability() * 2 - 1) * osg::PI));
|
particle->setAngle(osg::Vec3f(-mAngle, 0, (Misc::Rng::rollProbability() * 2 - 1) * osg::PIf));
|
||||||
}
|
}
|
||||||
|
|
||||||
void RainShooter::setVelocity(const osg::Vec3f& velocity)
|
void RainShooter::setVelocity(const osg::Vec3f& velocity)
|
||||||
|
|
@ -1195,7 +1195,7 @@ namespace MWRender
|
||||||
if (i >= 49 && i <= 64)
|
if (i >= 49 && i <= 64)
|
||||||
alpha = 0.f; // bottom-most row
|
alpha = 0.f; // bottom-most row
|
||||||
else if (i >= 33 && i <= 48)
|
else if (i >= 33 && i <= 48)
|
||||||
alpha = 0.25098; // second row
|
alpha = 0.25098f; // second row
|
||||||
else
|
else
|
||||||
alpha = 1.f;
|
alpha = 1.f;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -114,10 +114,10 @@ namespace MWRender
|
||||||
}
|
}
|
||||||
|
|
||||||
// move the plane back along its normal a little bit to prevent bleeding at the water shore
|
// move the plane back along its normal a little bit to prevent bleeding at the water shore
|
||||||
float fov = Settings::camera().mFieldOfView;
|
const float fov = Settings::camera().mFieldOfView;
|
||||||
const float clipFudgeMin = 2.5; // minimum offset of clip plane
|
constexpr double clipFudgeMin = 2.5; // minimum offset of clip plane
|
||||||
const float clipFudgeScale = -15000.0;
|
constexpr double clipFudgeScale = -15000.0;
|
||||||
float clipFudge = abs(abs((*mCullPlane)[3]) - eyePoint.z()) * fov / clipFudgeScale - clipFudgeMin;
|
double clipFudge = std::abs(std::abs((*mCullPlane)[3]) - eyePoint.z()) * fov / clipFudgeScale - clipFudgeMin;
|
||||||
modelViewMatrix->preMultTranslate(mCullPlane->getNormal() * clipFudge);
|
modelViewMatrix->preMultTranslate(mCullPlane->getNormal() * clipFudge);
|
||||||
|
|
||||||
cv->pushModelViewMatrix(modelViewMatrix, osg::Transform::RELATIVE_RF);
|
cv->pushModelViewMatrix(modelViewMatrix, osg::Transform::RELATIVE_RF);
|
||||||
|
|
@ -188,7 +188,7 @@ namespace MWRender
|
||||||
public:
|
public:
|
||||||
void operator()(osg::Node* node, osgUtil::CullVisitor* cv)
|
void operator()(osg::Node* node, osgUtil::CullVisitor* cv)
|
||||||
{
|
{
|
||||||
const float fudge = 0.2;
|
const float fudge = 0.2f;
|
||||||
if (std::abs(cv->getEyeLocal().z()) < fudge)
|
if (std::abs(cv->getEyeLocal().z()) < fudge)
|
||||||
{
|
{
|
||||||
float diff = fudge - cv->getEyeLocal().z();
|
float diff = fudge - cv->getEyeLocal().z();
|
||||||
|
|
@ -422,7 +422,7 @@ namespace MWRender
|
||||||
void drawImplementation(osg::RenderInfo& renderInfo, const osg::Drawable* drawable) const override
|
void drawImplementation(osg::RenderInfo& renderInfo, const osg::Drawable* drawable) const override
|
||||||
{
|
{
|
||||||
static bool supported = osg::isGLExtensionOrVersionSupported(
|
static bool supported = osg::isGLExtensionOrVersionSupported(
|
||||||
renderInfo.getState()->getContextID(), "GL_ARB_depth_clamp", 3.3);
|
renderInfo.getState()->getContextID(), "GL_ARB_depth_clamp", 3.3f);
|
||||||
if (!supported)
|
if (!supported)
|
||||||
{
|
{
|
||||||
drawable->drawImplementation(renderInfo);
|
drawable->drawImplementation(renderInfo);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue