[14.3] renderQueue 50 is rendered after renderQueue 51

Problems building or running the engine, queries about how to use features etc.
User avatar
suny2000
Halfling
Posts: 89
Joined: Sun Sep 06, 2009 12:36 pm
x 18

[14.3] renderQueue 50 is rendered after renderQueue 51

Post by suny2000 »

Ogre Version: 14.3

I'm using renderQueues to control the rendering order of the sprites in my SHMUP Creator engine: sprites are just transparent planes. Users can create 'layers' to control the rendering order of those objects, as most of those sprites are rendered at the same depth.
I'm using setRenderQueueGroupAndPriority(40+ layerNumber) to render the planes.

The last engine update was using Ogre 13.6, but since I updated it to 14.3, some users noticed regressions in the rendering order.
It worked well, until recently, and I found that the rendering order is wrong only when a plane uses setRenderQueueGroupAndPriority(50).

So, for example:
.plane1 setRenderQueueGroupAndPriority(40) and plane2 setRenderQueueGroupAndPriority(41): plane1 is rendered behind plane2.
.plane1 setRenderQueueGroupAndPriority(50) and plane2 setRenderQueueGroupAndPriority(51): plane1 is rendered above plane2.

As 50 is RENDER_QUEUE_MAIN, my question is: is there something different with this queue number?
S.

http://bulostudio.com: website and devlog of a small indie studio working on SHMUP CREATOR
https://twitter.com/bulostudio : follow me on twitter!
paroj
OGRE Team Member
OGRE Team Member
Posts: 2151
Joined: Sun Mar 30, 2014 2:51 pm
x 1156

Re: [14.3] renderQueue 50 is rendered after renderQueue 51

Post by paroj »

did you look at it in renderdoc?

User avatar
suny
Greenskin
Posts: 142
Joined: Thu Mar 12, 2020 5:53 pm
x 62

Re: [14.3] renderQueue 50 is rendered after renderQueue 51

Post by suny »

I did a capture, and:
RenderQueueGroup 49 is drawn first, then RenderQueueGroup 50
but
RenderQueueGroup 51 is drawn first, then RenderQueueGroup 50

rpgplayerrobin
Orc Shaman
Posts: 724
Joined: Wed Mar 18, 2009 3:03 am
x 405

Re: [14.3] renderQueue 50 is rendered after renderQueue 51

Post by rpgplayerrobin »

I tried this myself, and I get the exact same results as you do.

The problem is that if you set "tmpEntity->setRenderQueueGroupAndPriority(50, 0);", it actually gets put in group 95, if the object is transparent.

That is because of this code in "RenderQueue::addRenderable":

Code: Select all

if(groupID == mDefaultQueueGroup && onTransparentQueue(pTech))
     groupID = RENDER_QUEUE_TRANSPARENTS; // This is 95

My guess is that this code exists to make transparent objects to be rendered last as default, but that if you want to have more control you could set it to another group, but this of course fails with that code on group 50 (default group).

To fix the problem, you could:

  1. Just remove that code from the Ogre source and make sure your normal transparent objects are in group 95 per default if you have not set a group on them.
  2. Make it so that users can only put their transparent objects in queue 51-95.
  3. You could alter the Ogre source code to only make that check if the priority group has not been set (mRenderQueueIDSet in MovableObject).