Download lib/python3.9/site-packages/OpenGL/GL/EXT/framebuffer_multisample.py from camenduru/slahmr-test: direct link, hf CLI and curl.
- Browser
- Download file 4.61 kB
-
https://huggingface.co/camenduru/slahmr-test/resolve/main/lib/python3.9/site-packages/OpenGL/GL/EXT/framebuffer_multisample.py
- Command line
-
hf download hf://camenduru/slahmr-test/lib/python3.9/site-packages/OpenGL/GL/EXT/framebuffer_multisample.py
-
curl -L -o framebuffer_multisample.py https://huggingface.co/camenduru/slahmr-test/resolve/main/lib/python3.9/site-packages/OpenGL/GL/EXT/framebuffer_multisample.py
4.61 kB
| '''OpenGL extension EXT.framebuffer_multisample | |
| This module customises the behaviour of the | |
| OpenGL.raw.GL.EXT.framebuffer_multisample to provide a more | |
| Python-friendly API | |
| Overview (from the spec) | |
| This extension extends the EXT_framebuffer_object framework to | |
| enable multisample rendering. | |
| The new operation RenderbufferStorageMultisampleEXT() allocates | |
| storage for a renderbuffer object that can be used as a multisample | |
| buffer. A multisample render buffer image differs from a | |
| single-sample render buffer image in that a multisample image has a | |
| number of SAMPLES that is greater than zero. No method is provided | |
| for creating multisample texture images. | |
| All of the framebuffer-attachable images attached to a framebuffer | |
| object must have the same number of SAMPLES or else the framebuffer | |
| object is not "framebuffer complete". If a framebuffer object with | |
| multisample attachments is "framebuffer complete", then the | |
| framebuffer object behaves as if SAMPLE_BUFFERS is one. | |
| In traditional multisample rendering, where | |
| DRAW_FRAMEBUFFER_BINDING_EXT is zero and SAMPLE_BUFFERS is one, the | |
| GL spec states that "the color sample values are resolved to a | |
| single, displayable color each time a pixel is updated." There are, | |
| however, several modern hardware implementations that do not | |
| actually resolve for each sample update, but instead postpones the | |
| resolve operation to a later time and resolve a batch of sample | |
| updates at a time. This is OK as long as the implementation behaves | |
| "as if" it had resolved a sample-at-a-time. Unfortunately, however, | |
| honoring the "as if" rule can sometimes degrade performance. | |
| In contrast, when DRAW_FRAMEBUFFER_BINDING_EXT is an | |
| application-created framebuffer object, MULTISAMPLE is enabled, and | |
| SAMPLE_BUFFERS is one, there is no implicit per-sample-update | |
| resolve. Instead, the application explicitly controls when the | |
| resolve operation is performed. The resolve operation is affected | |
| by calling BlitFramebufferEXT (provided by the EXT_framebuffer_blit | |
| extension) where the source is a multisample application-created | |
| framebuffer object and the destination is a single-sample | |
| framebuffer object (either application-created or window-system | |
| provided). | |
| This design for multisample resolve more closely matches current | |
| hardware, but still permits implementations which choose to resolve | |
| a single sample at a time. If hardware that implementes the | |
| multisample resolution "one sample at a time" exposes | |
| EXT_framebuffer_multisample, it could perform the implicit resolve | |
| to a driver-managed hidden surface, then read from that surface when | |
| the application calls BlitFramebufferEXT. | |
| Another motivation for granting the application explicit control | |
| over the multisample resolve operation has to do with the | |
| flexibility afforded by EXT_framebuffer_object. Previously, a | |
| drawable (window or pbuffer) had exclusive access to all of its | |
| buffers. There was no mechanism for sharing a buffer across | |
| multiple drawables. Under EXT_framebuffer_object, however, a | |
| mechanism exists for sharing a framebuffer-attachable image across | |
| several framebuffer objects, as well as sharing an image between a | |
| framebuffer object and a texture. If we had retained the "implicit" | |
| resolve from traditional multisampled rendering, and allowed the | |
| creation of "multisample" format renderbuffers, then this type of | |
| sharing would have lead to two problematic situations: | |
| * Two contexts, which shared renderbuffers, might perform | |
| competing resolve operations into the same single-sample buffer | |
| with ambiguous results. | |
| * It would have introduced the unfortunate ability to use the | |
| single-sample buffer as a texture while MULTISAMPLE is ENABLED. | |
| By using the BlitFramebufferEXT from EXT_framebuffer_blit as an | |
| explicit resolve to serialize access to the multisampled contents | |
| and eliminate the implicit per-sample resolve operation, we avoid | |
| both of these problems. | |
| The official definition of this extension is available here: | |
| http://www.opengl.org/registry/specs/EXT/framebuffer_multisample.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.EXT.framebuffer_multisample import * | |
| from OpenGL.raw.GL.EXT.framebuffer_multisample import _EXTENSION_NAME | |
| def glInitFramebufferMultisampleEXT(): | |
| '''Return boolean indicating whether this extension is available''' | |
| from OpenGL import extensions | |
| return extensions.hasGLExtension( _EXTENSION_NAME ) | |
| ### END AUTOGENERATED SECTION |