tdev
25-01-2012 13:42:10
so, i added the ability to say mygui in what renderqueue it should render, see attached patch.
finally, we are able to render MyGUI in front of Ogre overlays
finally, we are able to render MyGUI in front of Ogre overlays

Index: Platforms/Ogre/OgrePlatform/include/MyGUI_OgreRenderManager.h
===================================================================
--- Platforms/Ogre/OgrePlatform/include/MyGUI_OgreRenderManager.h (revision 4357)
+++ Platforms/Ogre/OgrePlatform/include/MyGUI_OgreRenderManager.h (working copy)
@@ -13,6 +13,7 @@
#include "MyGUI_RenderManager.h"
#include <Ogre.h>
+#include <OgreSimpleRenderable.h>
#include "MyGUI_LastHeader.h"
@@ -24,12 +25,13 @@
public IRenderTarget,
public Ogre::WindowEventListener,
public Ogre::RenderQueueListener,
- public Ogre::RenderSystem::Listener
+ public Ogre::RenderSystem::Listener,
+ public Ogre::SimpleRenderable
{
public:
OgreRenderManager();
- void initialise(Ogre::RenderWindow* _window, Ogre::SceneManager* _scene);
+ void initialise(Ogre::RenderWindow* _window, Ogre::SceneManager* _scene, Ogre::uint8 queueID = Ogre::RENDER_QUEUE_OVERLAY+1);
void shutdown();
static OgreRenderManager& getInstance();
@@ -92,6 +94,13 @@
virtual bool checkTexture(ITexture* _texture);
#endif
+
+ protected:
+ Ogre::uint8 mQueueID;
+ // Renderable stubs
+ Ogre::Real getSquaredViewDepth(const Ogre::Camera*) const { return 0; };
+ Ogre::Real getBoundingRadius() const { return 0; };
+
private:
virtual void renderQueueStarted(Ogre::uint8 queueGroupId, const Ogre::String& invocation, bool& skipThisInvocation);
virtual void renderQueueEnded(Ogre::uint8 queueGroupId, const Ogre::String& invocation, bool& repeatThisInvocation);
Index: Platforms/Ogre/OgrePlatform/src/MyGUI_OgreRenderManager.cpp
===================================================================
--- Platforms/Ogre/OgrePlatform/src/MyGUI_OgreRenderManager.cpp (revision 4357)
+++ Platforms/Ogre/OgrePlatform/src/MyGUI_OgreRenderManager.cpp (working copy)
@@ -33,15 +33,18 @@
mRenderSystem(nullptr),
mIsInitialise(false),
mManualRender(false),
- mCountBatch(0)
+ mCountBatch(0),
+ mQueueID(Ogre::RENDER_QUEUE_OVERLAY+1)
{
}
- void OgreRenderManager::initialise(Ogre::RenderWindow* _window, Ogre::SceneManager* _scene)
+ void OgreRenderManager::initialise(Ogre::RenderWindow* _window, Ogre::SceneManager* _scene, Ogre::uint8 _queueID)
{
MYGUI_PLATFORM_ASSERT(!mIsInitialise, getClassTypeName() << " initialised twice");
MYGUI_PLATFORM_LOG(Info, "* Initialise: " << getClassTypeName());
+ mQueueID = _queueID;
+
mColorBlendMode.blendType = Ogre::LBT_COLOUR;
mColorBlendMode.source1 = Ogre::LBS_TEXTURE;
mColorBlendMode.source2 = Ogre::LBS_DIFFUSE;
@@ -151,6 +154,9 @@
{
mSceneManager->addRenderQueueListener(this);
}
+
+ // now add ourself to the correct renderqueue, so that ogre knows something is in that queue
+ mSceneManager->getRenderQueue()->addRenderable(this, mQueueID, 1);
}
void OgreRenderManager::setActiveViewport(unsigned short _num)
@@ -173,7 +179,7 @@
if (gui == nullptr)
return;
- if (Ogre::RENDER_QUEUE_OVERLAY != queueGroupId)
+ if (mQueueID != queueGroupId)
return;
Ogre::Viewport* viewport = mSceneManager->getCurrentViewport();