XXX - Not complete. Name SGIX_dmbuffer Name Strings GLX_SGIX_dm_buffer Version $Date: 1997/09/26 09:48:00 $ $Revision: 1.6 $ Number 86 Dependencies SGIX_FBConfig is required SGI_make_current_read is required. SGIX_pbuffer Overview This extension introduces a new type of GLXPbuffer, a DM or Digital Media pbuffer. A DM pbuffer is a GLXPbuffer that adopts one or more of its buffers from an externally defined and allocated DMbuffer. In this way it resembles a GLXPixmap that attaches to an existing X pixmap. Like a standard pbuffer it can be used as a non-displayable rendering area, or as a read source for pixel data. The externally defined buffers of the DM pbuffer can be sequentially associated with other DM buffers of the same size and configuration. . The DM pbuffer is described with a new attrib passed to glXCreateGLXPbuffer. . A new GLX command allows associating a compatible DMbuffer with the DM GLXPbuffer. At associate time the DM buffers described by the DMparams are used directly as the corresponding buffers of the GLXPbuffer drawable, as described by the FBconfig. All other buffers that are part of the config will be created by GL without externally referenceable names. A DM pbuffer must be associated with a compatible DMbuffer before it can be made current to a GLX context. . The externally defined buffers of the DM pbuffer can be changed at any time by successfully associating a new DMbuffer with the GLXPbuffer through the associate command. It will be the application's responsibility to synchronize DMedia, GLX, and GL commands that effect the contents of the DM pbuffer. . Any direct GLX rendering context that satisfies config compatibility can be used to render to or read from a DM GLXPbuffer. A currently associated DMbuffer may simultaneously be in use by other clients on the same Display, but will not be destroyed while associated with a GLXPbuffer. When the GLXpbuffer is destroyed, all buffers that have no remaining clients, including the DMbuffer, will be freed. DM GLXPbuffers are proposed as a means for OpenGL to access buffers generated by the VL, compression, and other digital media libraries in a uniform way. The DMbuffer and DMparams descriptors are left intentionally abstract so that the GLX extension can adapt to future DM library changes. The initial implementation will require that the DMparams descriptor supply at least pixel format and packing information, and that the DMbuffer provide the size and location of a colorbuffer. GLX will do compatibility checking when possible based on the config, params, and buffer information at associate time. Issues New Procedures and Functions Bool glXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer); New Tokens Accepted by the parameter of glXCreateGLXPbufferSGIX and by the parameter of glXQueryGLXPbufferSGIX: GLX_DIGITAL_MEDIA_PBUFFER_SGIX 0x8024 Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) None Additions to Chapter 3 of the 1.0 Specification (Rasterization) None Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations and the Frame buffer) Additions to Chapter 5 of the 1.0 Specification (Special Functions) None. Additions to Chapter 6 of the 1.0 Specification (State and State Requests) None. Additions to the GLX Specification XXX - not complete yet [Add the following to section 3.2.3 on Offscreen Rendering] To create a GLXPbuffer call: GLXPbuffer glXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfig config, unsigned int width, unsigned int height, int *attrib_list); This creates a single GLXPbuffer and returns its XID. and specify the pixel width and height of the rectangular pbuffer and specifies a list of attributes for the pbuffer. Currently only three attributes can be specified in : GLX_PRESERVED_CONTENTS_SGIX, GLX_LARGEST_PBUFFER_SGIX and GLX_DIGITAL_MEDIA_PBUFFER_SGIX. [Add following the section on the GLX_PRESERVED_CONTENTS_SGIX attrib] The resulting pbuffer, when made current, will contain color buffers and ancillary buffers as specified by . It is possible to create a pbuffer with back buffers and to swap the front and back buffers by calling glXSwapBuffers. Note that some pbuffers use framebuffer resources so applications should consider deallocating them when they are not in use. If the GLX_DIGITAL_MEDIA_PBUFFER_SGIX attribute is set to True in , then one or more of the pbuffer's color or ancillary buffers may be shared with those of a currently associated DMbuffer. Buffers described by the pbuffer's GLXFBConfig which are not defined by the DMbuffer, are GLX resources that remain associated with the DM pbuffer until it is destroyed. An implementation may fail glXCreateGLXPbufferSGIX and generate a BadMatch error when the sepcified does not describe a drawable that is compatible with any supported DMbuffers. The GLXPbuffer is associated with a DMbuffer by calling: Bool glXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer); The parameter specifies a connection to an X server, and must match the display used to create the GLXPbuffer . The DMparams arg specifies the digital media characteristics of the that will be associated with the DM pbuffer. If glXAssociateDMbufferSGIX succeeds, any previously associated DMbuffer is released and a value of True is returned. Subsequent GL commands effect as they would any standard pbuffer. If a newly released DMbuffer has no remaining clients, its buffers will also be freed. A BadMatch error is generated when the specified DMparams or DMbuffer are not compatible with the , and a value of False is returned. Before the DM pbuffer can be made current to a GLXContext, it must be associated with a compatible DMbuffer. glXMakeCurrentReadSGI will return False and generate a GLXBadDrawable error when a DM pbuffer drawable has no associated DMbuffer. A GLXPbuffer is destroyed by calling: void glXDestroyGLXPbufferSGIX(Display *dpy, GLXPbuffer pbuf); The GLXPbuffer will be destroyed once it is no longer current to any client. When a GLXPbuffer is destroyed, any memory resources that attached to it, are freed, and its XID is made available for reuse. Associated DMbuffers are released, and if they no lonnger have a client, are also freed. Errors XXX - not complete yet New State None. New Implementation Dependent State None.