| Name |
| |
| EXT_make_current_read |
| |
| Name Strings |
| |
| WGL_EXT_make_current_read |
| |
| Version |
| |
| Date: 3/1/1999 Version: 1.5 |
| |
| Number |
| |
| 169 |
| |
| Dependencies |
| |
| WGL_EXT_extensions_string is required. |
| |
| Overview |
| |
| The association of a separate "read" and "draw" DC with the current |
| context allows for preprocessing of image data in an "off screen" |
| DC which is then read into a visible DC for final display. |
| |
| New Procedures and Functions |
| |
| BOOL wglMakeContextCurrentEXT(HDC hDrawDC, |
| HDC hReadDC, |
| HGLRC hglrc); |
| |
| HDC wglGetCurrentReadDCEXT(VOID); |
| |
| New Tokens |
| |
| Returned by GetLastError (when wglMakeContextCurrentEXT fails): |
| |
| ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 |
| |
| Additions to Chapter 2 of the 1.2 GL Specification (OpenGL Operation) |
| |
| None |
| |
| Additions to Chapter 3 of the 1.2 GL Specification (Rasterization) |
| |
| None |
| |
| Additions to Chapter 4 of the 1.2 Specification (Per-Fragment Operations |
| and the Frame buffer) |
| |
| [The following restriction is added to the end of the introductory |
| paragraph of section 4.2.4] |
| |
| Accumulation operations are only allowed when the device context used |
| for reading is identical to the device context used for drawing. |
| |
| [The list of error conditions at the end of section 4.2.4] |
| If there is no accumulation buffer, or the GL is in color index mode, |
| or if the read device context and the draw device context are not |
| identical, Accum generates the error INVALID_OPERATION. |
| |
| Additions to Chapter 5 of the 1.2 Specification (Special Functions) |
| |
| None |
| |
| Additions to Chapter 6 of the 1.2 Specification (State and State Requests) |
| |
| None |
| |
| Additions to the WGL specification |
| |
| The function wglMakeContextCurrentEXT associates the context <hglrc> |
| with the device <hDrawDC> for draws and the device <hReadDC> for |
| reads. All subsequent OpenGL calls made by the calling thread are |
| drawn on the device identified by <hDrawDC> and read on the device |
| identified by <hReadDC>. |
| |
| The <hDrawDC> and <hReadDC> parameters must refer to drawing surfaces |
| supported by OpenGL. These parameters need not be the same <hdc> |
| that was passed to wglCreateContext when <hglrc> was created. |
| <hDrawDC> must have the same pixel format and be created on the |
| same device as the <hdc> that was passed into wlgCreateContext. |
| <hReadDC> must be created on the same device as the <hdc> that was |
| passed to wglCreateContext and it must support the same pixel type |
| as the pixel format of the <hdc> that was passed to wglCreateContext. |
| |
| If wglMakeContextCurrentEXT is used to associate a different device |
| for reads than for draws, the "read" device will be used for the |
| following OpenGL operations: |
| |
| 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 a different rendering context is used |
| for reads. |
| |
| 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 the surface associated with |
| the device context specified by <hReadDC>. |
| |
| No error will be generated if the value of READ_BUFFER at the time the |
| wglMakeContextCurrentEXT call is made does not correspond to a valid color |
| buffer in <hReadDC>. 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 <hReadDC>. 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 <hReadDC>. |
| |
| Error conditions set by glReadBuffer (even when called implicitly via |
| glPopAttrib) and by the operations enumerated above are with respect |
| to color and ancillary buffers available in <hReadDC> (i.e., |
| glReadBuffer(GL_BACK_BUFFER) will generate an error when <hReadDC> is |
| single buffered, and so will an operation that tries to source stencil |
| images when <hReadDC> does not have a stencil buffer). |
| |
| If wglMakeContextCurrentEXT succeeds, the return value is TRUE. If |
| the function fails, the return value is FALSE. To get extended error |
| information, call GetLastError. Possible errors are as follows: |
| |
| ERROR_INVALID_PIXEL_FORMAT The pixel format associated with |
| <hDrawDC> does not match the pixel |
| format associated with the render |
| context. |
| ERROR_INVALID_PIXEL_TYPE_EXT The pixel type for <hReadDC> is |
| different than the pixel type |
| associated with the <hdc> that was |
| passed to wglCreateContext. |
| ERROR_DC_NOT_FOUND <hReadDC> or <hDrawDC> is not a valid |
| device context. |
| ERROR_NO_SYSTEM_RESOURCES The device contexts specified by |
| <hReadDC> and <hDrawDC> cannot exist |
| in the framebuffer simultaneously. |
| |
| wglGetCurrentReadDC returns a handle to the "read" device context that |
| is associated with the current OpenGL rendering context of the calling |
| thread. If the calling thread does not have a current context, the |
| return value is NULL. |
| |
| Because there is no way to extend wgl, these calls are defined in the |
| ICD and can be called by obtaining the address with wglGetProcAddress. |
| Because this is not a GL extension, it is not included in the |
| GL_EXTENSIONS string. |
| |
| New State |
| |
| None |
| |
| New Implementation Dependent State |
| |
| None |