mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Add AnimatedAppComponent::setSynchroniseToVBlank
This commit is contained in:
parent
1da9ccd36c
commit
621e14d092
3 changed files with 43 additions and 7 deletions
|
|
@ -59,7 +59,7 @@ public:
|
||||||
AnimationAppDemo()
|
AnimationAppDemo()
|
||||||
{
|
{
|
||||||
setSize (800, 600);
|
setSize (800, 600);
|
||||||
setFramesPerSecond (60);
|
setSynchroniseToVBlank (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void update() override
|
void update() override
|
||||||
|
|
|
||||||
|
|
@ -27,15 +27,41 @@ namespace juce
|
||||||
{
|
{
|
||||||
|
|
||||||
AnimatedAppComponent::AnimatedAppComponent()
|
AnimatedAppComponent::AnimatedAppComponent()
|
||||||
: lastUpdateTime (Time::getCurrentTime()), totalUpdates (0)
|
|
||||||
{
|
{
|
||||||
setOpaque (true);
|
setOpaque (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnimatedAppComponent::setFramesPerSecond (int framesPerSecond)
|
void AnimatedAppComponent::setFramesPerSecond (int framesPerSecondIn)
|
||||||
{
|
{
|
||||||
jassert (framesPerSecond > 0 && framesPerSecond < 1000);
|
jassert (0 < framesPerSecond && framesPerSecond < 1000);
|
||||||
startTimerHz (framesPerSecond);
|
framesPerSecond = framesPerSecondIn;
|
||||||
|
updateSync();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AnimatedAppComponent::updateSync()
|
||||||
|
{
|
||||||
|
if (useVBlank)
|
||||||
|
{
|
||||||
|
stopTimer();
|
||||||
|
|
||||||
|
if (vBlankAttachment.isEmpty())
|
||||||
|
vBlankAttachment = { this, [this] { timerCallback(); } };
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vBlankAttachment = {};
|
||||||
|
|
||||||
|
const auto interval = 1000 / framesPerSecond;
|
||||||
|
|
||||||
|
if (getTimerInterval() != interval)
|
||||||
|
startTimer (interval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AnimatedAppComponent::setSynchroniseToVBlank (bool syncToVBlank)
|
||||||
|
{
|
||||||
|
useVBlank = syncToVBlank;
|
||||||
|
updateSync();
|
||||||
}
|
}
|
||||||
|
|
||||||
int AnimatedAppComponent::getMillisecondsSinceLastUpdate() const noexcept
|
int AnimatedAppComponent::getMillisecondsSinceLastUpdate() const noexcept
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,11 @@ public:
|
||||||
*/
|
*/
|
||||||
void setFramesPerSecond (int framesPerSecond);
|
void setFramesPerSecond (int framesPerSecond);
|
||||||
|
|
||||||
|
/** You can use this function to synchronise animation updates with the current display's vblank
|
||||||
|
events. When this mode is enabled the value passed to setFramesPerSecond() is ignored.
|
||||||
|
*/
|
||||||
|
void setSynchroniseToVBlank (bool syncToVBlank);
|
||||||
|
|
||||||
/** Called periodically, at the frequency specified by setFramesPerSecond().
|
/** Called periodically, at the frequency specified by setFramesPerSecond().
|
||||||
This is a the best place to do things like advancing animation parameters,
|
This is a the best place to do things like advancing animation parameters,
|
||||||
checking the mouse position, etc.
|
checking the mouse position, etc.
|
||||||
|
|
@ -66,8 +71,13 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
Time lastUpdateTime;
|
void updateSync();
|
||||||
int totalUpdates;
|
|
||||||
|
Time lastUpdateTime = Time::getCurrentTime();
|
||||||
|
int totalUpdates = 0;
|
||||||
|
int framesPerSecond = 60;
|
||||||
|
bool useVBlank = false;
|
||||||
|
VBlankAttachment vBlankAttachment;
|
||||||
|
|
||||||
void timerCallback() override;
|
void timerCallback() override;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue