| | '''OpenGL extension ARB.framebuffer_no_attachments |
| | |
| | This module customises the behaviour of the |
| | OpenGL.raw.GL.ARB.framebuffer_no_attachments to provide a more |
| | Python-friendly API |
| | |
| | Overview (from the spec) |
| | |
| | Framebuffer objects as introduced by ARB_framebuffer_object and OpenGL 3.0 |
| | provide a generalized mechanism for rendering to off-screen surfaces. |
| | Each framebuffer object may have depth, stencil and zero or more color |
| | attachments that can be written to by the GL. The size of the framebuffer |
| | (width, height, layer count, sample count) is derived from the attachments |
| | of that framebuffer. In unextended OpenGL 4.2, it is not legal to render |
| | into a framebuffer object that has no attachments. Such a framebuffer |
| | would be considered incomplete with the |
| | FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT status. |
| | |
| | With OpenGL 4.2 and ARB_shader_image_load_store, fragment shaders are |
| | capable of doing random access writes to buffer and texture memory via |
| | image loads, stores, and atomics. This ability enables algorithms using |
| | the conventional rasterizer to generate a collection of fragments, where |
| | each fragment shader invocation will write its outputs to buffer or |
| | texture memory using image stores or atomics. Such algorithms may have no |
| | need to write color or depth values to a conventional framebuffer. |
| | However, a framebuffer with no attachments will be considered incomplete |
| | and no rasterization or fragment shader exectuion will occur. To avoid |
| | such errors, an application may be required to create an otherwise |
| | unnecessary "dummy" texture and attach it to the framebuffer (possibly |
| | with color writes masked off). If the algorithm requires the rasterizer |
| | to operate over a large number of pixels, this dummy texture will |
| | needlessly consume a significant amount of memory. |
| | |
| | This extension enables the algorithms described above to work even with a |
| | framebuffer with no attachments. Applications can specify default width, |
| | height, layer count, and sample count parameters for a framebuffer object. |
| | When a framebuffer with no attachments is bound, it will be considered |
| | complete as long as the application has specified non-zero default width |
| | and height parameters. For the purposes of rasterization, the framebuffer |
| | will be considered to have a width, height, layer count, and sample count |
| | derived from its default parameters. Framebuffers with one or more |
| | attachments are not affected by these default parameters; the size of the |
| | framebuffer will still be derived from the sizes of the attachments in |
| | that case. |
| | |
| | Additionally, this extension provides queryable implementation-dependent |
| | maximums for framebuffer width, height, layer count, and sample count, |
| | which may differ from similar limits on textures and renderbuffers. These |
| | maximums will be used to error-check the default framebuffer parameters |
| | and also permit implementations to expose the ability to rasterize to an |
| | attachment-less framebuffer larger than the maximum supported texture |
| | size. |
| | |
| | The official definition of this extension is available here: |
| | http://www.opengl.org/registry/specs/ARB/framebuffer_no_attachments.txt |
| | ''' |
| | from OpenGL import platform, constant, arrays |
| | from OpenGL import extensions, wrapper |
| | import ctypes |
| | from OpenGL.raw.GL import _types, _glgets |
| | from OpenGL.raw.GL.ARB.framebuffer_no_attachments import * |
| | from OpenGL.raw.GL.ARB.framebuffer_no_attachments import _EXTENSION_NAME |
| |
|
| | def glInitFramebufferNoAttachmentsARB(): |
| | '''Return boolean indicating whether this extension is available''' |
| | from OpenGL import extensions |
| | return extensions.hasGLExtension( _EXTENSION_NAME ) |
| |
|
| | |
| | glGetFramebufferParameteriv=wrapper.wrapper(glGetFramebufferParameteriv).setInputArraySize( |
| | 'params', None |
| | ) |
| | |