but, I have to ask you about this! hehe.
this case is in ogre.
now, I'm not using FrameListener. I modifed source version to use RenderQueueListener(sure, ogre) before using FrameListener, becuase of there are many additional renders.
so, I need to order rendering sequenece.
but, MouseCursor need to be always on top!.
in OgreCEGUIListener(included in Ogre(maybe ah..version 0.5.0)) , there is nothing to do except adding code 'MouseCursor:Draw()' ,
in current version(0.7)
as I inserted that code into my source. mouse cursor's position is not correct.(maybe ah.. bc of ViewPortMatrix)
I modified below,
1. OgreRenderer : make BeginRendering, and EndRendinrg not use "d_renderSystem->_beginFrame();"
and I use RenderQueueListener before FrameListener.
2. and I make block code "MouseCorsor:Draw()" in renderGUI() (CEGUI::system)
3. renderGUI called in RenderQueueListener(OGRE_RENDER_QUEUE_OVERRAY)
everything is working out correctly except mouse cursor.
the point is that, How can I draw the cursor always on top in situation using many additional renders?
what am I supposed to do?
sorry for poor english :p
Code: Select all
void OgreRenderer::beginRendering()
{
using namespace Ogre;
// initialise render settings
d_renderSystem->setLightingEnabled(false);
d_renderSystem->_setDepthBufferParams(false, false);
d_renderSystem->_setDepthBias(0, 0);
d_renderSystem->_setCullingMode(CULL_NONE);
d_renderSystem->_setFog(FOG_NONE);
d_renderSystem->_setColourBufferWriteEnabled(true, true, true, true);
d_renderSystem->unbindGpuProgram(GPT_FRAGMENT_PROGRAM);
d_renderSystem->unbindGpuProgram(GPT_VERTEX_PROGRAM);
d_renderSystem->setShadingType(SO_GOURAUD);
d_renderSystem->_setPolygonMode(PM_SOLID);
// enable alpha blending
d_renderSystem->_setSceneBlending(SBF_SOURCE_ALPHA,
SBF_ONE_MINUS_SOURCE_ALPHA);
// d_renderSystem->_beginFrame(); <-------------------- annotated.
}
Code: Select all
d_renderer->beginRendering();
if (d_gui_redraw)
{
if (d_activeSheet)
{
RenderingSurface& rs = d_activeSheet->getTargetRenderingSurface();
rs.clearGeometry();
if (rs.isRenderingWindow())
static_cast<RenderingWindow&>(rs).getOwner().clearGeometry();
d_activeSheet->render();
}
// no sheet, so ensure default surface geometry is cleared
else
d_renderer->getDefaultRenderingRoot().clearGeometry();
d_gui_redraw = false;
}
d_renderer->getDefaultRenderingRoot().draw();
// MouseCursor::getSingleton().draw(); <-------------------- annotated[/u]
d_renderer->endRendering();
// do final destruction on dead-pool windows
WindowManager::getSingleton().cleanDeadPool();