summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Strømme <christian.stromme@qt.io>2018-11-23 13:38:48 +0100
committerChristian Stromme <christian.stromme@qt.io>2018-11-26 11:35:08 +0000
commitf21784303bc4da85396bd87be0936911aa76331c (patch)
treedf1a91a325d79ce4002a103b43be743f05a1d160
parent5f8f448e0304e5637fe7f2b64c05c93b3aa48410 (diff)
Fix dynamic keyframes
Don't generate dynamic kf on first entry to a slide, since there are no "from" values yet. Task-number: QT3DS-2209 Change-Id: Ib4e59968d9099b77ea6d11f1b627b77cad194a23 Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r--src/runtime/q3dsanimationmanager.cpp9
-rw-r--r--src/runtime/q3dsanimationmanager_p.h4
-rw-r--r--src/runtime/q3dsslideplayer.cpp2
-rw-r--r--tests/scenes/slideplayer/dynamickeyframes/DynamicKeyframe3.uip165
4 files changed, 173 insertions, 7 deletions
diff --git a/src/runtime/q3dsanimationmanager.cpp b/src/runtime/q3dsanimationmanager.cpp
index 51a6c73..cdb6e5e 100644
--- a/src/runtime/q3dsanimationmanager.cpp
+++ b/src/runtime/q3dsanimationmanager.cpp
@@ -121,7 +121,8 @@ static int componentSuffixToIndex(const QString &s)
void Q3DSAnimationManager::updateAnimationHelper(const AnimationTrackListMap &targets,
Q3DSSlide *slide,
- bool editorMode)
+ bool editorMode,
+ bool updateDkf)
{
// QT3DS-2183: We'll use this to set dummy kf at the start and end of the clip.
// See code further down.
@@ -339,7 +340,7 @@ void Q3DSAnimationManager::updateAnimationHelper(const AnimationTrackListMap &ta
const bool isDynamic = animationTrack->isDynamic() && !editorMode;
// If track is marked as dynamic, update the first keyframe so it interpolates from
// the current position to the next.
- if (isDynamic)
+ if (isDynamic && updateDkf)
updateDynamicKeyFrame(keyFrames[0], target, prop);
// QT3DS-2183 - We add keyframes at the start and at the end of the clip
@@ -509,7 +510,7 @@ static void insertTrack(Q3DSAnimationManager::AnimationTrackList &trackList,
}
}
-void Q3DSAnimationManager::updateAnimations(Q3DSSlide *slide, bool editorMode)
+void Q3DSAnimationManager::updateAnimations(Q3DSSlide *slide, bool editorMode, bool updateDynamicKfs)
{
Q_ASSERT(slide);
@@ -544,7 +545,7 @@ void Q3DSAnimationManager::updateAnimations(Q3DSSlide *slide, bool editorMode)
buildTrackListMap(masterSlide, false);
buildTrackListMap(slide, true);
- updateAnimationHelper(trackListMap, slide, editorMode);
+ updateAnimationHelper(trackListMap, slide, editorMode, updateDynamicKfs);
}
void Q3DSAnimationManager::applyChanges()
diff --git a/src/runtime/q3dsanimationmanager_p.h b/src/runtime/q3dsanimationmanager_p.h
index 7c22489..ab6363b 100644
--- a/src/runtime/q3dsanimationmanager_p.h
+++ b/src/runtime/q3dsanimationmanager_p.h
@@ -56,7 +56,7 @@ public:
using AnimationTrackList = QVector<const Q3DSAnimationTrack *>;
using AnimationTrackListMap = QHash<Q3DSGraphObject *, AnimationTrackList>;
- void updateAnimations(Q3DSSlide *slide, bool editorMode = false);
+ void updateAnimations(Q3DSSlide *slide, bool editorMode = false, bool updateDynamicKfs = true);
void clearAnimations(Q3DSSlide *slide);
void applyChanges();
void clearPendingChanges();
@@ -69,7 +69,7 @@ public:
private:
void updateAnimationHelper(const AnimationTrackListMap &targets,
Q3DSSlide *slide,
- bool editorMode);
+ bool editorMode, bool updateDkf);
void buildClipAnimator(Q3DSSlide *slide);
diff --git a/src/runtime/q3dsslideplayer.cpp b/src/runtime/q3dsslideplayer.cpp
index 3dfd2d0..2b4819c 100644
--- a/src/runtime/q3dsslideplayer.cpp
+++ b/src/runtime/q3dsslideplayer.cpp
@@ -767,7 +767,7 @@ void Q3DSSlidePlayer::handleCurrentSlideChanged(Q3DSSlide *slide,
setSlideTime(slide, 0.0f, true);
processPropertyChanges(slide, previousSlide);
attatchPositionCallback(slide);
- m_animationManager->updateAnimations(slide, (m_mode == PlayerMode::Editor));
+ m_animationManager->updateAnimations(slide, (m_mode == PlayerMode::Editor), !forceUpdate);
Q3DSGraphObject *eventTarget = m_sceneManager->m_scene;
if (m_type != PlayerType::Scene)
diff --git a/tests/scenes/slideplayer/dynamickeyframes/DynamicKeyframe3.uip b/tests/scenes/slideplayer/dynamickeyframes/DynamicKeyframe3.uip
new file mode 100644
index 0000000..34056f2
--- /dev/null
+++ b/tests/scenes/slideplayer/dynamickeyframes/DynamicKeyframe3.uip
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<UIP version="4" >
+ <Project >
+ <ProjectSettings author="" company="" presentationWidth="2400" presentationHeight="900" maintainAspect="False" >
+ <CustomColors count="16" >#7391ff #ffffff #ff0055 #ffffff #606060 #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff</CustomColors>
+ </ProjectSettings>
+ <Graph >
+ <Scene id="Scene" >
+ <Layer id="Layer" >
+ <Camera id="Camera" />
+ <Model id="Rectangle" >
+ <Material id="Default" name="Default" />
+ </Model>
+ <Model id="Rectangle2" >
+ <Material id="Default_001" name="Default" />
+ </Model>
+ <Group id="Group" >
+ <Text id="State1" />
+ <Text id="State2" />
+ <Text id="State3" />
+ <Text id="State4" />
+ </Group>
+ <Group id="CTRLs" >
+ <Text id="BtnState1" />
+ <Text id="BtnState2" />
+ <Text id="BtnState3" />
+ <Text id="BtnState4" />
+ </Group>
+ </Layer>
+ </Scene>
+ </Graph>
+ <Logic >
+ <State name="Master Slide" component="#Scene" >
+ <Add ref="#Layer" />
+ <Add ref="#Camera" orthographic="True" />
+ <Add ref="#Rectangle" name="Rectangle1" opacity="50" position="-110 0 0" scale="2 2 1" sourcepath="#Rectangle" />
+ <Add ref="#Default" diffuse="1 0 0" shaderlighting="None" />
+ <Add ref="#Rectangle2" name="Rectangle2" opacity="50" position="110 0 0" scale="2 2 1" sourcepath="#Rectangle" />
+ <Add ref="#Default_001" diffuse="0 0.333333 1" shaderlighting="None" />
+ <Add ref="#Group" name="Labels" position="0 0 -2" />
+ <Add ref="#State1" name="State1" font="TitilliumWeb-Regular" position="-900 300 0" textstring="State 1" />
+ <Add ref="#State2" name="State2" font="TitilliumWeb-Regular" position="900 300 0" textstring="State 2" />
+ <Add ref="#State3" name="State3" font="TitilliumWeb-Regular" position="-900 -300 0" textstring="State 3" />
+ <Add ref="#State4" name="State4" font="TitilliumWeb-Regular" position="900 -300 0" textstring="State 4" />
+ <Add ref="#CTRLs" name="CTRLs" />
+ <Add ref="#BtnState1" name="BtnState1" font="TitilliumWeb-Regular" position="-300 -400 0" textstring="State 1" >
+ <Action id="BtnState1-Action" eyeball="True" triggerObject="#BtnState1" event="onPressureDown" targetObject="#Scene" handler="Go to Slide" >
+ <HandlerArgument name="Slide" type="String" argtype="Slide" value="Slide1" />
+ </Action>
+ </Add>
+ <Add ref="#BtnState2" name="BtnState2" font="TitilliumWeb-Regular" position="-100 -400 0" textstring="State 2" >
+ <Action id="BtnState2-Action" eyeball="True" triggerObject="#BtnState2" event="onPressureDown" targetObject="#Scene" handler="Go to Slide" >
+ <HandlerArgument name="Slide" type="String" argtype="Slide" value="Slide2" />
+ </Action>
+ </Add>
+ <Add ref="#BtnState3" name="BtnState3" font="TitilliumWeb-Regular" position="100 -400 0" textstring="State 3" >
+ <Action id="BtnState3-Action" eyeball="True" triggerObject="#BtnState3" event="onPressureDown" targetObject="#Scene" handler="Go to Slide" >
+ <HandlerArgument name="Slide" type="String" argtype="Slide" value="Slide3" />
+ </Action>
+ </Add>
+ <Add ref="#BtnState4" name="BtnState4" font="TitilliumWeb-Regular" position="300 -400 0" textstring="State 4" >
+ <Action id="BtnState4-Action" eyeball="True" triggerObject="#BtnState4" event="onPressureDown" targetObject="#Scene" handler="Go to Slide" >
+ <HandlerArgument name="Slide" type="String" argtype="Slide" value="Slide4" />
+ </Action>
+ </Add>
+ <State id="Scene-Slide1" name="Slide1" >
+ <Set ref="#Layer" endtime="6000" />
+ <Set ref="#Camera" endtime="6000" />
+ <Set ref="#Rectangle" endtime="6000" position="0 0 0" >
+ <AnimationTrack property="position.x" type="EaseInOut" dynamic="True" >0 -900 0 0 2 -900 0 0</AnimationTrack>
+ <AnimationTrack property="position.y" type="EaseInOut" dynamic="True" >0 300 0 0 2 300 0 0</AnimationTrack>
+ <AnimationTrack property="position.z" type="EaseInOut" dynamic="True" >0 0 0 0 2 0 0 0</AnimationTrack>
+ </Set>
+ <Set ref="#Rectangle2" endtime="6000" position="0 0 0" >
+ <AnimationTrack property="position.x" type="EaseInOut" dynamic="True" >4 -900 0 0 6 -900 0 0</AnimationTrack>
+ <AnimationTrack property="position.y" type="EaseInOut" dynamic="True" >4 300 0 0 6 300 0 0</AnimationTrack>
+ <AnimationTrack property="position.z" type="EaseInOut" dynamic="True" >4 0 0 0 6 0 0 0</AnimationTrack>
+ </Set>
+ <Set ref="#Group" endtime="6000" />
+ <Set ref="#State1" endtime="6000" />
+ <Set ref="#State2" endtime="6000" />
+ <Set ref="#State3" endtime="6000" />
+ <Set ref="#State4" endtime="6000" />
+ <Set ref="#CTRLs" endtime="6000" />
+ <Set ref="#BtnState1" endtime="6000" />
+ <Set ref="#BtnState2" endtime="6000" />
+ <Set ref="#BtnState3" endtime="6000" />
+ <Set ref="#BtnState4" endtime="6000" />
+ </State>
+ <State id="Scene-Slide2" name="Slide2" playthroughto="Previous" >
+ <Set ref="#Layer" endtime="5999" />
+ <Set ref="#Camera" endtime="5999" />
+ <Set ref="#Rectangle" endtime="5999" position="0 0 0" >
+ <AnimationTrack property="position.x" type="EaseInOut" dynamic="True" >0 900 0 0 2 900 0 0</AnimationTrack>
+ <AnimationTrack property="position.y" type="EaseInOut" dynamic="True" >0 300 0 0 2 300 0 0</AnimationTrack>
+ <AnimationTrack property="position.z" type="EaseInOut" dynamic="True" >0 0 0 0 2 0 0 0</AnimationTrack>
+ </Set>
+ <Set ref="#Rectangle2" endtime="5999" position="0 0 0" >
+ <AnimationTrack property="position.x" type="EaseInOut" dynamic="True" >3.999 900 0 0 5.999 900 0 0</AnimationTrack>
+ <AnimationTrack property="position.y" type="EaseInOut" dynamic="True" >3.999 300 0 0 5.999 300 0 0</AnimationTrack>
+ <AnimationTrack property="position.z" type="EaseInOut" dynamic="True" >3.999 0 0 0 5.999 0 0 0</AnimationTrack>
+ </Set>
+ <Set ref="#Group" endtime="5999" />
+ <Set ref="#State1" endtime="5999" />
+ <Set ref="#State2" endtime="5999" />
+ <Set ref="#State3" endtime="5999" />
+ <Set ref="#State4" endtime="5999" />
+ <Set ref="#CTRLs" endtime="5999" />
+ <Set ref="#BtnState1" endtime="5999" />
+ <Set ref="#BtnState2" endtime="5999" />
+ <Set ref="#BtnState3" endtime="5999" />
+ <Set ref="#BtnState4" endtime="5999" />
+ </State>
+ <State id="Scene-Slide3" name="Slide3" playthroughto="Previous" >
+ <Set ref="#Layer" endtime="5999" />
+ <Set ref="#Camera" endtime="5999" />
+ <Set ref="#Rectangle" endtime="5999" position="0 0 0" >
+ <AnimationTrack property="position.x" type="EaseInOut" dynamic="True" >0 -900 0 0 2 -900 0 0</AnimationTrack>
+ <AnimationTrack property="position.y" type="EaseInOut" dynamic="True" >0 -300 0 0 2 -300 0 0</AnimationTrack>
+ <AnimationTrack property="position.z" type="EaseInOut" dynamic="True" >0 0 0 0 2 0 0 0</AnimationTrack>
+ </Set>
+ <Set ref="#Rectangle2" endtime="5999" position="0 0 0" >
+ <AnimationTrack property="position.x" type="EaseInOut" dynamic="True" >3.999 -900 0 0 5.999 -900 0 0</AnimationTrack>
+ <AnimationTrack property="position.y" type="EaseInOut" dynamic="True" >3.999 -300 0 0 5.999 -300 0 0</AnimationTrack>
+ <AnimationTrack property="position.z" type="EaseInOut" dynamic="True" >3.999 0 0 0 5.999 0 0 0</AnimationTrack>
+ </Set>
+ <Set ref="#Group" endtime="5999" />
+ <Set ref="#State1" endtime="5999" />
+ <Set ref="#State2" endtime="5999" />
+ <Set ref="#State3" endtime="5999" />
+ <Set ref="#State4" endtime="5999" />
+ <Set ref="#CTRLs" endtime="5999" />
+ <Set ref="#BtnState1" endtime="5999" />
+ <Set ref="#BtnState2" endtime="5999" />
+ <Set ref="#BtnState3" endtime="5999" />
+ <Set ref="#BtnState4" endtime="5999" />
+ </State>
+ <State id="Scene-Slide4" name="Slide4" initialplaystate="Play" playmode="Stop at end" playthroughto="Previous" >
+ <Set ref="#Layer" endtime="6000" />
+ <Set ref="#Camera" endtime="6000" />
+ <Set ref="#Rectangle" endtime="6000" position="0 0 0" >
+ <AnimationTrack property="position.x" type="EaseInOut" dynamic="True" >0 900 0 0 2 900 0 0</AnimationTrack>
+ <AnimationTrack property="position.y" type="EaseInOut" dynamic="True" >0 -300 0 0 2 -300 0 0</AnimationTrack>
+ <AnimationTrack property="position.z" type="EaseInOut" dynamic="True" >0 0 0 0 2 0 0 0</AnimationTrack>
+ </Set>
+ <Set ref="#Rectangle2" endtime="6000" position="0 0 0" >
+ <AnimationTrack property="position.x" type="EaseInOut" dynamic="True" >4 900 0 0 5.999 900 0 0</AnimationTrack>
+ <AnimationTrack property="position.y" type="EaseInOut" dynamic="True" >4 -300 0 0 5.999 -300 0 0</AnimationTrack>
+ <AnimationTrack property="position.z" type="EaseInOut" dynamic="True" >4 0 0 0 5.999 0 0 0</AnimationTrack>
+ </Set>
+ <Set ref="#Group" endtime="6000" />
+ <Set ref="#State1" endtime="6000" />
+ <Set ref="#State2" endtime="6000" />
+ <Set ref="#State3" endtime="6000" />
+ <Set ref="#State4" endtime="6000" />
+ <Set ref="#CTRLs" endtime="6000" />
+ <Set ref="#BtnState1" endtime="6000" />
+ <Set ref="#BtnState2" endtime="6000" />
+ <Set ref="#BtnState3" endtime="6000" />
+ <Set ref="#BtnState4" endtime="6000" />
+ </State>
+ </State>
+ </Logic>
+ </Project>
+</UIP>