Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I create a virtual display using the Indirect Display Driver Model that renders to a DirectX surface?

I have a number of fullscreen-only applications that do not support scaling that I need to show on a single display. Some are showing video, all are showing content that updates frequently. Several of the applications cease rendering in the event they are minimized or occluded. We have no ability to change the applications behavior. None are showing protected media, nor does the system have to support playback of protected content.

Desired scenario:

Image showing a grid of applications that are rendered on "dummy" monitors

Can I create virtual display devices using the Indrect Display Driver Model and render the frames to a surface in our application? How do I handle OPM? Is there a better way available?

Alternatives considered:

  • Move and resize the windows themselves
    Problem: I have no way to scale the windows when in the "thumbnail" sized view
  • Render occluded windows via DWM Thumbnail API
    Problem: some windows do not render when occluded.
  • Use desktop mirroring API to capture program
    Problem: We do not have a way to create "dummy" displays
  • Create one or more VMs and run each program on its own desktop. Transport video back to host via RDP using the Desktop Sharing API or a hypervisor-specific API
    Problem: licensing, complexity, stuttering video
  • Use Remote Desktop Services to create multiple sessions
    Problems: Licensing, complexity
  • Use a multi-port display adapter with "dummy" connectors, then use DWM or Desktop Mirroring
    Problems: Hardware cost, fixed resolutions supported, setup complexity
like image 790
Mitch Avatar asked Nov 07 '22 21:11

Mitch


1 Answers

I believe you can create dummy, or "indirect" display at will

Either using the recently released Amyuni driver

https://www.amyuni.com/forum/viewtopic.php?t=3030

Or you can try this experimental driver on github

https://github.com/roshkins/IddSampleDriver

Right now I'm exploring using OBS to stream video out of such "indirect displays"

like image 165
Shodan Avatar answered Nov 14 '22 23:11

Shodan