> On Tue, Jan 07, 2003 at 03:00:10PM -0700, Jens Owen wrote:
>>Michel Daenzer wrote:
>>> This doesn't help mixed OpenGL and X11 rendering in the same
>>> window, but that supposedly doesn't work with the traditional method of
>>> drawing to the back buffer and then copying it over the front buffer
>>> either, so enable page flipping by default.
>>I'm a little confused here. By traditional method are you referring to
>>not using page flipping? What doesn't work in that method?
> I thought that the glX spec said that mixing X11 and OpenGL within a single
> drawable wasn't guaranteed anyway, and only gave hints about things that
> might or might not work on certain implementations.
AFAIK the rendering is guaranteed.
GLX Version 1.3, Section 2.2, Paragraphs 3 & 4 gives a good description
of how the X and OpenGL rendering pipelines are expected to interact:
Issuing OpenGL commands may cause the X buffer to be flushed, In
particular, calling glFlush when indirect rendering is occuring,
will flush both the X and OpenGL rendering streams.
Some state is shared between the OpenGL and X. The pixel values
in the X frame buffer are shared. The X double buffer extension
(DBE) has a definition for which buffer is currently the displayed
buffer. This information is shared with GLX. The state of which
buffer is displayed tracks in both extensions, independent of which
extension initiates a buffer swap.
There is a description of the synchronization expectations in Section
2.7, paragraph 5:
Synchronization is in the hands of the client. If can be maintained
with moderate cost with the judicious use of the glFinish, glXWaitGL,
glXWaitX, and XSync commands. OpenGL and X rendering can be done in
parallel as long as the client does not preclude it with explicit
synchronization calls. This is true even when the rendering is
being done by the X server.
and again in Section 3.3.10, paragraph 3:
All GLX rendering context share the same notion of which are front
buffers and which are back buffers for a given drawable. This notion
is also shared with the X double buffer extension (DBE).
This last section really tweaked my memory. I had forgotten, but
indirect rendering in our "traditional" implementation isn't compliant.
For indirect contexts, we're not sharing the contents of the back
buffer with direct rendering contexts.
There's some real interesting work that still needs to be done for
indirect rendering, DBE and page flipping. If anyone's interested in
improving this stuff, just speak up.
Jens Owen / \/\ _
jens@... / \ \ \ Steamboat Springs, Colorado