3Dickulus / FragM

Derived from https://github.com/Syntopia/Fragmentarium/
GNU General Public License v3.0
349 stars 30 forks source link

time slider does not update from easing curves in progressive mode #97

Closed claudeha closed 4 years ago

claudeha commented 4 years ago

Describe the bug The time slider updates from easing curves in animation mode. As the time uniform is still updated in progressive mode when the slider is moved, I think it should update from the easing curves too.

To Reproduce Steps to reproduce the behavior:

  1. Add an easing curve to your favourite frag
  2. In animation mode, move the time slider: uniforms are updated from easing curve
  3. Switch to progressive mode, move the time slider: only the time uniform is updated

Expected behavior Time slider updates uniforms from easing curves always.

Desktop (please complete the following information):

Additional context Workaround of "switch from progressive to animation, touch time slider, switch back to progressive" is tedious.

3Dickulus commented 4 years ago

This has been the case since the start.

Animation features are not active in progressive mode, not keyframes and not easing curves.

Honestly if clicking the mouse twice is just too tedious then I'm not sure what to do about that, these modes are different and serve very different purposes, they should remain de-coupled imho.

Maybe a preferences setting? but it seems like a lot of code to save a mouse click and I think it will only confuse users.

edit: a preferences switch that defaults to de-coupled, the way it is now, might be fine, will have to try it to know how much code will be added to get the behavior you're looking for, this might uncover or cause other issues that will have to be overcome with specialized code or alterations.

3Dickulus commented 4 years ago

...in this case is it just easing curves to be updated or the animation state that includes key frames ???

3Dickulus commented 4 years ago

Line 2096 in file MainWindow,cpp void MainWindow::timeChanged(int value) {... replace Q_UNUSED(value) with if ( getVariableEditor()->hasEasing() ) engine->updateEasingCurves ( value ); // current frame

nailed it in two lines :D easy to add a preferences option to enable or disable this

the only thing to do is test this to make sure it doesn't cause problems with creating animations or other render modes and stuff

if all works well maybe can forego other triggering mechanism for easingcurves ...

edit: I think it needs a test for render state so the above line is irrelevant, this won't interfere with other rendering functions (still need to test though)

    renderState =! Animation          // we're not in animation mode
    &&  renderState =! Tiled           // or rendering tiled images

so the 'feature' is functional in progressive desktop view but effectively out of the way for normal animation sequence rendering.

claudeha commented 4 years ago

=!

I think you mean !=, otherwise subtle bug.

is it just easing curves to be updated or the animation state that includes key frames

I'd say it should do everything that dragging the time slider in animation mode does.

Need to check that creating animations is not impeded indeed. I can try it next week perhaps.

3Dickulus commented 4 years ago

actually that's a human language dyslexism thing =! means: if this = anything but that lol

edit: hmmm... thinking.... while working on a project, if I'm developing an easing curve, I select animation mode and while it's playing...

select (LMB) slider, hit F7 key, make changes, apply them and observe, repeat until perfect or RMB on time slider, make adjustments, apply and observe, repeat until perfect

all while the animation is playing!

so, my thought is that, it's a trivial thing to make (topic heading) happen but not in line with the concept of different work "areas" for different tasks. In the gui Animation mode is for developing camera paths and morphing settings while Progressive mode is for developing that look for the scene in general. So my final thought is that they should remain separate. ( or optional ? )