New definitions for sync data
This commit is contained in:
parent
a327445b71
commit
b2d56781d3
2 changed files with 119 additions and 10 deletions
4
sync.cc
4
sync.cc
|
@ -65,9 +65,9 @@ float T_SyncData::T_VarHelper_::valueAt(
|
|||
const float et( ( segStarts[ s ] + seg.durations[ pid ] ) * units );
|
||||
const float v0 = ( position - st ) / ( et - st );
|
||||
float v = v0;
|
||||
if ( seg.type != E_SyncSegment::LINEAR ) {
|
||||
if ( seg.type != T_SyncSegment::LINEAR ) {
|
||||
v *= v0;
|
||||
if ( seg.type == E_SyncSegment::SMOOTH ) {
|
||||
if ( seg.type == T_SyncSegment::SMOOTH ) {
|
||||
v *= 3 - 2 * v0;
|
||||
}
|
||||
}
|
||||
|
|
123
sync.hh
123
sync.hh
|
@ -4,25 +4,134 @@
|
|||
#endif
|
||||
|
||||
|
||||
enum class E_SyncSegment
|
||||
// Definition of a single input - id & range
|
||||
struct T_SyncInputDfn
|
||||
{
|
||||
std::string identifier;
|
||||
float min = -std::numeric_limits< float >::infinity( ),
|
||||
max = std::numeric_limits< float >::infinity( );
|
||||
|
||||
T_SyncInputDfn( __rd__ std::string const& identifier ,
|
||||
__rd__ const float min ,
|
||||
__rd__ const float max ) noexcept
|
||||
: identifier( identifier ) , min( min ) , max( max )
|
||||
{ }
|
||||
};
|
||||
using P_SyncInputDfn = std::unique_ptr< T_SyncInputDfn >;
|
||||
|
||||
/*============================================================================*/
|
||||
|
||||
// Definition of UI overrides for inputs
|
||||
struct T_SyncUIOverride
|
||||
{
|
||||
enum E_Type {
|
||||
FLOAT , VEC2 , VEC3 , VEC4 , INT ,
|
||||
COLOR , COLOR_GRADING , CAMERA
|
||||
};
|
||||
|
||||
E_Type type;
|
||||
std::vector< std::string > inputs;
|
||||
bool enabled;
|
||||
};
|
||||
using P_SyncUIOverride = std::unique_ptr< T_SyncUIOverride >;
|
||||
using T_SyncUIOverrides = std::vector< P_SyncUIOverride >;
|
||||
|
||||
// UI override sections
|
||||
struct T_SyncUISection;
|
||||
using P_SyncUISection = std::unique_ptr< T_SyncUISection >;
|
||||
using T_SyncUISections = std::vector< P_SyncUISection >;
|
||||
struct T_SyncUISection
|
||||
{
|
||||
std::string title;
|
||||
T_SyncUISections subsections;
|
||||
T_SyncUIOverrides overrides;
|
||||
};
|
||||
|
||||
/*============================================================================*/
|
||||
|
||||
// Segment of an input's curve
|
||||
struct T_SyncSegment
|
||||
{
|
||||
enum E_SegmentType
|
||||
{
|
||||
LINEAR ,
|
||||
RAMP ,
|
||||
SMOOTH ,
|
||||
//HERMITE
|
||||
};
|
||||
};
|
||||
|
||||
struct T_SyncSegment
|
||||
{
|
||||
uint32_t nPoints;
|
||||
E_SyncSegment type;
|
||||
E_SegmentType type;
|
||||
std::vector< float > values; // nPoints items
|
||||
std::vector< uint32_t > durations; // nPoints - 1 items
|
||||
};
|
||||
|
||||
// An input curve
|
||||
struct T_SyncCurve
|
||||
{
|
||||
std::string name;
|
||||
std::vector< T_SyncSegment > segments;
|
||||
};
|
||||
|
||||
// Pre-computed data for a curve
|
||||
struct T_SyncCurveCache
|
||||
{
|
||||
using T_SegRef = std::pair< uint32_t , uint32_t >;
|
||||
|
||||
T_SyncCurve const* variable;
|
||||
std::vector< T_SegRef > segRefs;
|
||||
std::vector< float > segStarts;
|
||||
|
||||
T_SyncCurveCache(
|
||||
__rd__ T_SyncCurve const* const variable ,
|
||||
__rd__ const uint32_t duration ,
|
||||
__rd__ const uint32_t position ) noexcept;
|
||||
|
||||
float valueAt(
|
||||
__rd__ const float position ,
|
||||
__rd__ const float units ) const noexcept;
|
||||
};
|
||||
using P_SyncCurveCache = std::unique_ptr< T_SyncCurveCache >;
|
||||
|
||||
/*============================================================================*/
|
||||
|
||||
struct T_SyncManager
|
||||
{
|
||||
float uDuration; // Duration - unit size
|
||||
uint32_t iDuration; // Duration - total units
|
||||
|
||||
float duration( ) const noexcept
|
||||
{ return uDuration * iDuration; }
|
||||
|
||||
// Sync manager data for an input may include a definition, a curve,
|
||||
// or both. The idea behind supporting "curve only" is that a curve may
|
||||
// have been defined for an input that has been removed temporarily
|
||||
// (e.g. because some include was commented out), in which case we don't
|
||||
// want to waste it.
|
||||
struct T_Data
|
||||
{
|
||||
P_SyncInputDfn definition;
|
||||
P_SyncCurveCache curve;
|
||||
bool overriden;
|
||||
};
|
||||
|
||||
// Data and ID<->index map
|
||||
std::vector< T_Data > data;
|
||||
std::map< std::string , uint32_t > posMap;
|
||||
|
||||
// Current time & values
|
||||
float time;
|
||||
std::vector< float > values;
|
||||
|
||||
// Root of the UI's tree
|
||||
T_SyncUISections uiRoot;
|
||||
|
||||
void makeUI( );
|
||||
};
|
||||
|
||||
/*============================================================================*/
|
||||
|
||||
using T_SyncVariable = std::vector< T_SyncSegment >;
|
||||
|
||||
|
||||
struct T_SyncData
|
||||
{
|
||||
T_SyncData( );
|
||||
|
|
Loading…
Reference in a new issue