| '''OpenGL extension SGIS.shared_multisample |
| |
| This module customises the behaviour of the |
| OpenGL.raw.GLX.SGIS.shared_multisample to provide a more |
| Python-friendly API |
| |
| Overview (from the spec) |
| |
| While the OpenGL multisample extension (SGIS_multisample) provides |
| good out-of-order antialiasing via subpixel samples, multisample |
| hardware is very expensive because it multiplies the per-pixel |
| framebuffer memory required to maintain color, depth, and stencil |
| state by the number of samples. |
| |
| The cost-sensitive Location Based Entertainment (LBE) market |
| desires good quality antialiasing, but the cost of maintaining |
| multisample memory for every pixel in the framebuffer managed area |
| is often prohibitive. Low-end multi-channel visual simulation may |
| have similar cost constraints. |
| |
| LBE applications typically render several channels that are output |
| to different video display devices. For example, an LBE |
| application may render four 800x600 resolution channels, one per |
| game player. While the total managed area may be 1600x1200, each |
| channel ends up being rendered serially. With traditional |
| multisampling (as specified by SGIS_multisample), multisample |
| memory must be retained across the entire 1600x1200 managed area |
| though in fact the application is never using more than an 800x600 |
| rectangle of multisample pixel state at any given time. |
| |
| This sharing of multisample framebuffer state can result in a |
| substantial competitive advantage for high-end multi-channel |
| multisampling hardware for LBE applications. Unlike a "cheap PC |
| per seat" solution, a high-end solution can be amortized by sharing |
| both texture and multisample memory between the multiple channels |
| (as well as host resources such as disk and CPUs). For cheap PCs |
| to have the same amount of texture memory and quality of |
| antialiasing, texture and multisample memory have to be replicated |
| in every PC. |
| |
| In a typical windowed environment, the entire framebuffer managed |
| area must retain multisample state because windows can be moved |
| dynamically and resized (up to the entire size of the managed |
| area). For LBE applications though, the layout of channel |
| subrectangles in the framebuffer managed area is static and the |
| LBE application monopolizes the graphics device (no other |
| concurrent windowed apps). Because of their channel-oriented, |
| dedicated, cost-sensitive nature, LBE applications can benefit from |
| a means to share the available multisample memory resources among |
| all the channels. |
| |
| The SGIS_shared_multisample extension specifies a single |
| multisample buffer subrectangle sized smaller than the total |
| managed area that is both shared among multiple windows and |
| repositionable within in a window. |
| |
| Use of the SGIS_shared_multisample extension is predicated on |
| specially configuring the window system, typically via a command |
| line option added to the window system server's startup command. |
| When run in this mode, OpenGL applications will see the |
| GL_SGIS_shared_multisample string advertised in the GL_EXTENSIONS |
| string (along with the GL_SGIS_multisample string). In this mode, |
| the behavior of multisample extension changes. Instead of the |
| multisample buffer memory being retained per-pixel across the |
| entire managed area, multisample memory is shared among multisample |
| windows and repositionable within a multisample window. |
| |
| Switching windows or repositioning the multisample subrectangle |
| will make undefined the shared state within the multisample, depth, |
| stencil, and accumulation buffers. |
| |
| When rendering into a multisample window, fragments that fall |
| outside the window's multisample subrectangle are discarded |
| (scissored). By default, the window's multisample rectangle is |
| positioned at its window origin. |
| |
| The official definition of this extension is available here: |
| http://www.opengl.org/registry/specs/SGIS/shared_multisample.txt |
| ''' |
| from OpenGL import platform, constant, arrays |
| from OpenGL import extensions, wrapper |
| import ctypes |
| from OpenGL.raw.GLX import _types, _glgets |
| from OpenGL.raw.GLX.SGIS.shared_multisample import * |
| from OpenGL.raw.GLX.SGIS.shared_multisample import _EXTENSION_NAME |
|
|
| def glInitSharedMultisampleSGIS(): |
| '''Return boolean indicating whether this extension is available''' |
| from OpenGL import extensions |
| return extensions.hasGLExtension( _EXTENSION_NAME ) |
|
|
|
|
| |