Can't keep renderers in subnodes undocked

I’m seeing a very strange and infuriating behavior: when I have a patch that has a Renderer in it, if I dupe that node, as expected the Renderers inside come up docked. No biggie I think, I’ll just undock them.

First surprise, despite what the GUI doc page says, the only way to undock them is to alt-left-click in the black area to the right of the tabs and drag it to an open are of desktop; clicking anywhere else does not work. But that does work, the Renderers are now undocked.

But then when I drag one of the two Renderer windows ANYWHERE else, even on the opposite side of the desktop on a blank section of desktop not overlapping any other windows, BANG they dock again.

This does not happen when you just dupe a Renderer in a patch, it only happens when the Renderer is contained inside a duped node/patch. Opening and undocking the duped patch itself works fine, and moving one of them does not cause them to re-dock, this only happens with Renderers.

This happens in 34.2_x86 and 34.2_x64, with both DX9 and DX11 Renderers.

Steps to reproduce:

  • Open a blank patch. Shift-Ctrl-P to create a blank subpatch.
  • Add a Renderer node to the subpatch.
  • Back in the parent patch, select it and hit Ctrl-D to dupe it.
  • Drag one of the Renderer windows with Alt-left-drag to a blank part of the desktop.
  • Drag either of the Renderer windows anywhere else, and they dock again.

hei mediadog, i am afraid that is by design, see my answer here:

the only solution i see is to not have renderer is subpatches that you use multiple instances of.

Ouch! Ah yes, I understand - you are keeping internally one sub-patch instance, not one for each instantiation. And I see how at save time knowing which instance to save would be problematic as code and data is saved together. Bummer though, as I made these nice neat nodes for multi-display use.

This gets to something I’ve been trying to work out, which is how to have the number of renderers determined at run time, so I can make my patches independent of the physical displays. I have stopped short of generating the Renderer nodes on the fly, that looks very messy trying to figure out how to connect the pins. Right now I use sort of a worst-case (max) number of them, and use the SetRenderer node to only make active and visible the ones I need.

Hmmm, would that work in this case? Or as soon as I did a SetRenderer to a Renderer in one case it would happen to the others?

Thanks for the explanation joreg!