blender/intern/itasc/MovingFrame.hpp
Campbell Barton 1b462e5a51 Pass EvaluationContext instead of bContext
2.8x branch added bContext arg in many places,
pass eval-context instead since its not simple to reason about what
what nested functions do when they can access and change almost anything.

Also use const to prevent unexpected modifications.

This fixes crash loading files with shadows,
since off-screen buffers use a NULL context for rendering.
2017-08-16 12:46:04 +10:00

55 lines
1.3 KiB
C++

/*
* MovingFrame.h
*
* Created on: Feb 10, 2009
* Author: benoitbolsee
*/
#ifndef MOVINGFRAME_HPP_
#define MOVINGFRAME_HPP_
#include "UncontrolledObject.hpp"
#include <vector>
struct EvaluationContext;
namespace iTaSC{
typedef bool (*MovingFrameCallback)(
const struct EvaluationContext *eval_ctx,
const Timestamp& timestamp,
const Frame& _current,
Frame& _next,
void *param);
class MovingFrame: public UncontrolledObject {
public:
MovingFrame(const Frame& frame=F_identity);
virtual ~MovingFrame();
bool setFrame(const Frame& frame);
bool setCallback(MovingFrameCallback _function, void* _param);
virtual void updateCoordinates(const struct EvaluationContext *eval_ctx, const Timestamp& timestamp);
virtual void updateKinematics(const Timestamp& timestamp);
virtual void pushCache(const Timestamp& timestamp);
virtual void initCache(Cache *_cache);
virtual bool finalize();
protected:
virtual void updateJacobian();
private:
void pushInternalFrame(CacheTS timestamp);
bool popInternalFrame(CacheTS timestamp);
MovingFrameCallback m_function;
void* m_param;
Frame m_nextPose;
Twist m_velocity;
int m_poseCCh; // cache channel for pose
unsigned int m_poseCTs;
};
}
#endif /* MOVINGFRAME_H_ */