| 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 <draw> 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 <draw> in not identical to <read>. |
| |
| 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 <read>. |
| |
| 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 <read>. 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 <read>. 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 <read>. |
| 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 <read> 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 <read> (i.e., |
| glReadBuffer(GL_BACK_BUFFER) will generate an error when <read> is single |
| buffered, and so will an operation that tries to source stencil images |
| when <read> 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 <write> and <draw> 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 <write> and <read> 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 <draw> was not created with |
| the same X screen and visual as <ctx>. BadMatch is also generated |
| if <read> was not created with the same X screen as <ctx>. The color, |
| depth, stencil, and accumulation buffers of <read> need not match the |
| resources of <draw>. |
| |
| * 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 <read> GLXDrawable, and refusal to |
| accept as the <read> a GLXDrawable or a GLXPbuffer with color, depth, |
| stencil, or accumulation storage facilities that differ from those |
| of <draw>. 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 <draw> and <read> 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 |
| <draw> by that glXMakeCurrent call. If glXMakeCurrentReadSGI |
| specified the current rendering context, then |
| glXGetCurrentReadDrawableSGI returns the drawable specified as |
| <read> 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 <read> if the |
| current OpenGL rendering context was specified by glXMakeCurrentReadSGIX. |
| |
| Dependencies on EXT_convolution |
| |
| Convolution image data are sourced from GLXDrawable <read> 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 <read> 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 |