Hi,
The render target support in wined3d is a bit jerky. Basically we're dealing
with 2 sorts of render targets: Offscreen textures and onscreen swapchains.
Onscreen swapchains have their own drawable and glx context right now, for
offscreen textures have that too, except if fbos are used.
The seperate context makes a problem. Due to that the render target change has
to be performed before any other opengl states are set for drawprim, and it
requires keeping track of multiple sets of gl states. The question is, do we
need a seperate context?
Primary swapchain: essentially, no
Back buffer offscreen rendering: not really
PBuffer offscreen rendering: Yes? No?
FBO offscreen rendering: No
Secondary swapchain: Yes? No?
Technically a swapchain and offscreen render target would match a glx
drawable. However, can we switch the drawable, but keep the context? Can we
switch the drawable that the context is used on? What is better
performance-wise? Switching a context's drawable, or switching context and
drawable and applying all states that changed since the last use of that
context?
The main thing I'm concerned about are driver bugs. I know that the dri
drivers keep track of per-drawable settings per context, what might other
drivers do?
Another question is what do do about pbuffers. Pbuffers are pretty nasty. Are
there any cards out there which have a working pbuffer support, but no fbo
support? If we slightly modify the back buffer rendering we can render on
auxiliary buffers instead of the pbuffer(If there are any cards out there
supporting that).
My new state management can handle multiple contexts per device, it has to do
that for multithreading. However, if we can do the render target stuff with
only one context things will get MUCH easier.
Stefan