[Solved]how to draw the mouse cursor always on top?

For help with general CEGUI usage:
- Questions about the usage of CEGUI and its features, if not explained in the documentation.
- Problems with the CMAKE configuration or problems occuring during the build process/compilation.
- Errors or unexpected behaviour.

Moderators: CEGUI MVP, CEGUI Team

valvalval
Not too shy to talk
Not too shy to talk
Posts: 27
Joined: Wed May 06, 2009 08:16

[Solved]how to draw the mouse cursor always on top?

Postby valvalval » Mon Oct 05, 2009 14:43

:p, sorry for oftenly submitting a topic~

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();
Last edited by valvalval on Tue Oct 06, 2009 03:52, edited 1 time in total.

User avatar
CrazyEddie
CEGUI Project Lead
Posts: 6760
Joined: Wed Jan 12, 2005 12:06
Location: England
Contact:

Re: how to draw the mouse cursor always on top?

Postby CrazyEddie » Mon Oct 05, 2009 18:10

HI, yeah the issue is likely related to states and/or matrices and viewports not being correctly set. I've not tested it, but when you want to draw the mouse, it should be a case of:

Code: Select all

myRenderer->beginRendering();
myRenderer->getDefaultRenderingRoot().getRenderTarget().activate();
MouseCursor::getSingleton().draw();
myRenderer->getDefaultRenderingRoot().getRenderTarget().deactivate();
myRenderer->endRendering();

or some such thing.

HTH

CE.

valvalval
Not too shy to talk
Not too shy to talk
Posts: 27
Joined: Wed May 06, 2009 08:16

Re: how to draw the mouse cursor always on top?

Postby valvalval » Tue Oct 06, 2009 00:34

thx CE!

I'll test it with your code :p


Return to “Help”

Who is online

Users browsing this forum: No registered users and 4 guests