Skip to content

Commit

Permalink
GRAPHICS: Add an Ogre frame listener to advance animations
Browse files Browse the repository at this point in the history
  • Loading branch information
DrMcCoy committed Mar 21, 2014
1 parent 7e2e716 commit 26b6e98
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
25 changes: 24 additions & 1 deletion src/graphics/renderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,25 @@ class OgreLogger : public Ogre::LogListener {
}
};

class OgreAnimator : public Ogre::FrameListener {
public:
bool frameStarted(const Ogre::FrameEvent &event) {
Ogre::SceneManager *scene = Ogre::Root::getSingleton().getSceneManagerIterator().begin()->second;
if (!scene)
return false;

OGRE_LOCK_MUTEX(scene->sceneGraphMutex);

for (Ogre::AnimationStateIterator anims = scene->getAnimationStateIterator(); anims.hasMoreElements(); anims.moveNext())
anims.current()->second->addTime(event.timeSinceLastFrame);

return true;
}
};

Renderer::Renderer(SDL_Window &screen, bool vsync, int fsaa) :
_logManager(0), _logger(0), _root(0), _overlaySystem(0), _dummyWindow(0),
_renderWindow(0), _sceneManager(0), _camera(0), _viewPort(0) {
_renderWindow(0), _sceneManager(0), _camera(0), _viewPort(0), _animator(0) {

try {
createLog();
Expand Down Expand Up @@ -107,9 +122,13 @@ Renderer::~Renderer() {
void Renderer::destroy() {
CursorMan.deinit();

if (_root && _animator)
_root->removeFrameListener(_animator);

if (_sceneManager && _overlaySystem)
_sceneManager->removeRenderQueueListener(_overlaySystem);

delete _animator;
delete _overlaySystem;
delete _root;

Expand All @@ -129,6 +148,7 @@ void Renderer::destroy() {
_sceneManager = 0;
_camera = 0;
_viewPort = 0;
_animator = 0;
}

void Renderer::createLog() {
Expand Down Expand Up @@ -270,6 +290,9 @@ void Renderer::createScene() {
_camera->setFarClipDistance(1000.0);
_camera->setFOVy(Ogre::Degree(60.0));

_animator = new OgreAnimator;
_root->addFrameListener(_animator);

CursorMan.init();
}

Expand Down
2 changes: 2 additions & 0 deletions src/graphics/renderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ namespace Ogre {
namespace Graphics {

class OgreLogger;
class OgreAnimator;

enum RenderCapability {
kCapabilityS3TC, ///< Supports S3TC DXTn.
Expand Down Expand Up @@ -83,6 +84,7 @@ class Renderer {
Ogre::SceneManager *_sceneManager; ///< The OGRE scene manager.
Ogre::Camera *_camera; ///< The OGRE camera.
Ogre::Viewport *_viewPort; ///< The OGRE view port.
OgreAnimator *_animator; ///< The OGRE frame listener advancing animations.


void createLog();
Expand Down

0 comments on commit 26b6e98

Please sign in to comment.