Name SGI_make_current_read Name Strings GLX_SGI_make_current_read Version $Date: 1997/03/20 02:19:19 $ $$ Number 42 Dependencies EXT_copy_texture is affected by this specification. EXT_convolution is affected by this specification. SGI_color_table is affected by this specification. Overview The association of the current context with a drawable is extended to allow separate write and read drawables. This paves the way for allowing preprocessing of image data in an "off screen" window which is then read into the visible window for final display. Similarly it sets the frame-work for direct transfer of video to the GL, by treating the video as a special kind of read drawable (a.k.a, readable). New Procedures and Functions Bool glXMakeCurrentReadSGI(Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); GLXDrawable glXGetCurrentReadDrawableSGI(void); New Tokens None 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) If glXMakeCurrentReadSGI is used to associate two glXDrawables with the current rendering context, glXDrawable is used for all OpenGL operations except: 1. Any pixel data that are sourced based on the value of READ_BUFFER. Note, that accumulation operations use the value of READ_BUFFER, but are not allowed when in not identical to . 2. Any depth values that are retrieved by glReadPixels, glCopyPixels, or any OpenGL extension that sources depth images from the frame buffer in the manner of glReadPixels and glCopyPixels. 3. Any stencil values that are retrieved by glReadPixels, glCopyPixels, or any OpenGL extension that sources stencil images from the frame buffer in the manner of glReadPixels and glCopyPixels. These frame buffer values are taken from glXDrawable . No error will be generated if the value of READ_BUFFER at the time the glXMakeCurrentReadSGI call is made does not correspond to a valid color buffer in . Also, no error due to READ_BUFFER mismatch will be generated by subsequent calls to any of the operations enumerated above, but the pixels values used will be undefined until READ_BUFFER is set to a color buffer that is valid in the . Operations that query the value of READ_BUFFER (i.e., glGet, glPushAttrib) use the value set last in the context, independent of whether it is a valid buffer in . Subsequent to a glXMakeCurrentRead call, it is possible that the READ_BUFFER may be set to a color buffer that is not valid with respect to the visual of the context. The preceding discussion also applies to glXMakeCurrent where is replaced by the single drawable parameter to the call. Error conditions set by glDrawBuffer (even when called implicitly via glPopAttrib) and by the operations enumerated above are with respect to color and ancillary buffers available in (i.e., glReadBuffer(GL_BACK_BUFFER) will generate an error when is single buffered, and so will an operation that tries to source stencil images when does not have a stencil buffer). The following restriction is added to the end of the introductory paragraph of section 4.2.4 "The Accumulation Buffer": Accumulation operations are only allowed when the glXDrawbles and are identical. The list of error conditions at the end of section 4.2.4 "The Accumulation Buffer" is modified to: If there is no accumulation buffer, the GL is in color index mode, or if the glXDrawbles and are not identical then Accum generates the error INVALID_OPERATION. 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 Notes: * glXMakeCurrentReadSGIX associates two GLXDrawables with a single GLXContext. BadMatch is generated if was not created with the same X screen and visual as . BadMatch is also generated if was not created with the same X screen as . The color, depth, stencil, and accumulation buffers of need not match the resources of . * glXMakeCurrentReadSGI returns True if it succeeds, and False if it fails. It can fail for myriad reasons, including refusal to accept a window or a GLXPixmap as the GLXDrawable, and refusal to accept as the a GLXDrawable or a GLXPbuffer with color, depth, stencil, or accumulation storage facilities that differ from those of . This laxness may not be acceptable in a final specification, but it will help allow early implementations to be completed. * glXMakeCurrentReadSGI may return False if and cannot exist in framebuffer memory simultaneously. * glXGetCurrentReadDrawableSGI returns the name of the GLXDrawable currently being used as a pixel query source. If glXMakeCurrent specified the current rendering context, then glXGetCurrentReadDrawableSGI returns the drawable specified as by that glXMakeCurrent call. If glXMakeCurrentReadSGI specified the current rendering context, then glXGetCurrentReadDrawableSGI returns the drawable specified as by that glXMakeCurrentReadSGI call. If there is no current read drawable, None is returned. GLX Protocol One new GLX protocol command is added. MakeCurrentRead 1 CARD8 opcode (X assigned) 1 17 GLX opcode (glXVendorPrivateWithReply) 2 6 request length 4 65537 vendor specific opcode 4 GLX_CONTEXT_TAG old context tag 4 GLX_DRAWABLE drawable 4 GLX_DRAWABLE read drawable 4 GLX_CONTEXT context id => 1 1 Reply 1 unused 2 CARD16 sequence number 24 unused Dependencies on EXT_copy_texture Texture image data are sourced from GLXDrawable if the current OpenGL rendering context was specified by glXMakeCurrentReadSGIX. Dependencies on EXT_convolution Convolution image data are sourced from GLXDrawable if the current OpenGL rendering context was specified by glXMakeCurrentReadSGIX, and the transfer is specified by CopyConvolutionFilter1DEXT or CopyConvolutionFilter2DEXT. Dependencies on SGI_color_table Color table data are sourced from GLXDrawable if the current OpenGL rendering context was specified by glXMakeCurrentReadSGIX, and the transfer is specified by CopyColorTableSGI. New State None New Implementation Dependent State None