mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-26 09:35:28 +00:00
501316a9f7
==16218== Conditional jump or move depends on uninitialised value(s) ==16218== at 0xCDBC27: MWPhysics::Object::commitPositionChange() (object.cpp:68) ==16218== by 0xCE5B64: MWPhysics::PhysicsTaskScheduler::updatePtrAabb(std::shared_ptr<MWPhysics::PtrHolder> const&) (mtphysics.cpp:446) ==16218== by 0xCE5CC3: operator() (mtphysics.cpp:432) ==16218== by 0xCE5CC3: for_each<std::_Rb_tree_const_iterator<std::shared_ptr<MWPhysics::PtrHolder> >, MWPhysics::PhysicsTaskScheduler::updateAabbs()::<lambda(const std::shared_ptr<MWPhysics::PtrHolder>&)> > (stl_algo.h:3820) ==16218== by 0xCE5CC3: MWPhysics::PhysicsTaskScheduler::updateAabbs() (mtphysics.cpp:431) ==16218== by 0xCE5E35: MWPhysics::PhysicsTaskScheduler::afterPreStep() (mtphysics.cpp:586) ==16218== by 0xCE6238: operator() (mtphysics.cpp:533) ==16218== by 0xCE6238: wait<MWPhysics::PhysicsTaskScheduler::doSimulation()::<lambda()> > (barrier.hpp:33) ==16218== by 0xCE6238: MWPhysics::PhysicsTaskScheduler::doSimulation() (mtphysics.cpp:533) ==16218== by 0xCE6377: MWPhysics::PhysicsTaskScheduler::worker() (mtphysics.cpp:464) ==16218== by 0x74523C3: execute_native_thread_routine (thread.cc:82) ==16218== by 0x76FF258: start_thread (in /usr/lib/libpthread-2.33.so) ==16218== by 0x78155E2: clone (in /usr/lib/libc-2.33.so) ==16218== ==16218== Conditional jump or move depends on uninitialised value(s) ==16218== at 0xCDBC30: MWPhysics::Object::commitPositionChange() (object.cpp:73) ==16218== by 0xCE5B64: MWPhysics::PhysicsTaskScheduler::updatePtrAabb(std::shared_ptr<MWPhysics::PtrHolder> const&) (mtphysics.cpp:446) ==16218== by 0xCE5CC3: operator() (mtphysics.cpp:432) ==16218== by 0xCE5CC3: for_each<std::_Rb_tree_const_iterator<std::shared_ptr<MWPhysics::PtrHolder> >, MWPhysics::PhysicsTaskScheduler::updateAabbs()::<lambda(const std::shared_ptr<MWPhysics::PtrHolder>&)> > (stl_algo.h:3820) ==16218== by 0xCE5CC3: MWPhysics::PhysicsTaskScheduler::updateAabbs() (mtphysics.cpp:431) ==16218== by 0xCE5E35: MWPhysics::PhysicsTaskScheduler::afterPreStep() (mtphysics.cpp:586) ==16218== by 0xCE6238: operator() (mtphysics.cpp:533) ==16218== by 0xCE6238: wait<MWPhysics::PhysicsTaskScheduler::doSimulation()::<lambda()> > (barrier.hpp:33) ==16218== by 0xCE6238: MWPhysics::PhysicsTaskScheduler::doSimulation() (mtphysics.cpp:533) ==16218== by 0xCE6377: MWPhysics::PhysicsTaskScheduler::worker() (mtphysics.cpp:464) ==16218== by 0x74523C3: execute_native_thread_routine (thread.cc:82) ==16218== by 0x76FF258: start_thread (in /usr/lib/libpthread-2.33.so) ==16218== by 0x78155E2: clone (in /usr/lib/libc-2.33.so) ==16218==
60 lines
1.6 KiB
C++
60 lines
1.6 KiB
C++
#ifndef OPENMW_MWPHYSICS_OBJECT_H
|
|
#define OPENMW_MWPHYSICS_OBJECT_H
|
|
|
|
#include "ptrholder.hpp"
|
|
|
|
#include <LinearMath/btTransform.h>
|
|
#include <osg/Node>
|
|
|
|
#include <map>
|
|
#include <memory>
|
|
#include <mutex>
|
|
|
|
namespace Resource
|
|
{
|
|
class BulletShapeInstance;
|
|
}
|
|
|
|
class btCollisionObject;
|
|
class btVector3;
|
|
|
|
namespace MWPhysics
|
|
{
|
|
class PhysicsTaskScheduler;
|
|
|
|
class Object final : public PtrHolder
|
|
{
|
|
public:
|
|
Object(const MWWorld::Ptr& ptr, osg::ref_ptr<Resource::BulletShapeInstance> shapeInstance, osg::Quat rotation, int collisionType, PhysicsTaskScheduler* scheduler);
|
|
~Object() override;
|
|
|
|
const Resource::BulletShapeInstance* getShapeInstance() const;
|
|
void setScale(float scale);
|
|
void setRotation(osg::Quat quat);
|
|
void updatePosition();
|
|
void commitPositionChange();
|
|
btTransform getTransform() const;
|
|
/// Return solid flag. Not used by the object itself, true by default.
|
|
bool isSolid() const;
|
|
void setSolid(bool solid);
|
|
bool isAnimated() const;
|
|
/// @brief update object shape
|
|
/// @return true if shape changed
|
|
bool animateCollisionShapes();
|
|
|
|
private:
|
|
osg::ref_ptr<Resource::BulletShapeInstance> mShapeInstance;
|
|
std::map<int, osg::NodePath> mRecIndexToNodePath;
|
|
bool mSolid;
|
|
btVector3 mScale;
|
|
osg::Vec3f mPosition;
|
|
osg::Quat mRotation;
|
|
bool mScaleUpdatePending = false;
|
|
bool mTransformUpdatePending = false;
|
|
mutable std::mutex mPositionMutex;
|
|
PhysicsTaskScheduler* mTaskScheduler;
|
|
};
|
|
}
|
|
|
|
#endif
|