Download lib/python3.9/site-packages/OpenGL/GL/NV/pixel_data_range.py from camenduru/slahmr-test: direct link, hf CLI and curl.
- Browser
- Download file 3.88 kB
-
https://huggingface.co/camenduru/slahmr-test/resolve/main/lib/python3.9/site-packages/OpenGL/GL/NV/pixel_data_range.py
- Command line
-
hf download hf://camenduru/slahmr-test/lib/python3.9/site-packages/OpenGL/GL/NV/pixel_data_range.py
-
curl -L -o pixel_data_range.py https://huggingface.co/camenduru/slahmr-test/resolve/main/lib/python3.9/site-packages/OpenGL/GL/NV/pixel_data_range.py
3.88 kB
| '''OpenGL extension NV.pixel_data_range | |
| This module customises the behaviour of the | |
| OpenGL.raw.GL.NV.pixel_data_range to provide a more | |
| Python-friendly API | |
| Overview (from the spec) | |
| The vertex array range extension is intended to improve the | |
| efficiency of OpenGL vertex arrays. OpenGL vertex arrays' coherency | |
| model and ability to access memory from arbitrary locations in memory | |
| prevented implementations from using DMA (Direct Memory Access) | |
| operations. | |
| Many image-intensive applications, such as those that use dynamically | |
| generated textures, face similar problems. These applications would | |
| like to be able to sustain throughputs of hundreds of millions of | |
| pixels per second through DrawPixels and hundreds of millions of | |
| texels per second through TexSubImage. | |
| However, the same restrictions that limited vertex throughput also | |
| limit pixel throughput. | |
| By the time that any pixel operation that reads data from user memory | |
| returns, OpenGL requires that it must be safe for the application to | |
| start using that memory for a different purpose. This coherency | |
| model prevents asynchronous DMA transfers directly out of the user's | |
| buffer. | |
| There are also no restrictions on the pointer provided to pixel | |
| operations or on the size of the data. To facilitate DMA | |
| implementations, the driver needs to know in advance what region of | |
| the address space to lock down. | |
| Vertex arrays faced both of these restrictions already, but pixel | |
| operations have one additional complicating factor -- they are | |
| bidirectional. Vertex array data is always being transfered from the | |
| application to the driver and the HW, whereas pixel operations | |
| sometimes transfer data to the application from the driver and HW. | |
| Note that the types of memory that are suitable for DMA for reading | |
| and writing purposes are often different. For example, on many PC | |
| platforms, DMA pulling is best accomplished with write-combined | |
| (uncached) AGP memory, while pushing data should use cached memory so | |
| that the application can read the data efficiently once it has been | |
| read back over the AGP bus. | |
| This extension defines an API where an application can specify two | |
| pixel data ranges, which are analogous to vertex array ranges, except | |
| that one is for operations where the application is reading data | |
| (e.g. glReadPixels) and one is for operations where the application | |
| is writing data (e.g. glDrawPixels, glTexSubImage2D, etc.). Each | |
| pixel data range has a pointer to its start and a length in bytes. | |
| When the pixel data range is enabled, and if the pointer specified | |
| as the argument to a pixel operation is inside the corresponding | |
| pixel data range, the implementation may choose to asynchronously | |
| pull data from the pixel data range or push data to the pixel data | |
| range. Data pulled from outside the pixel data range is undefined, | |
| while pushing data to outside the pixel data range produces undefined | |
| results. | |
| The application may synchronize with the hardware in one of two ways: | |
| by flushing the pixel data range (or causing an implicit flush) or by | |
| using the NV_fence extension to insert fences in the command stream. | |
| The official definition of this extension is available here: | |
| http://www.opengl.org/registry/specs/NV/pixel_data_range.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.NV.pixel_data_range import * | |
| from OpenGL.raw.GL.NV.pixel_data_range import _EXTENSION_NAME | |
| def glInitPixelDataRangeNV(): | |
| '''Return boolean indicating whether this extension is available''' | |
| from OpenGL import extensions | |
| return extensions.hasGLExtension( _EXTENSION_NAME ) | |
| glPixelDataRangeNV=wrapper.wrapper(glPixelDataRangeNV).setOutput( | |
| 'pointer',size=lambda x:(x,),pnameArg='length',orPassIn=True | |
| ) | |
| ### END AUTOGENERATED SECTION |