ó
    š3j  ã                   ó`   • S r SSKJrJrJr  SSKJrJr  SSKrSSKJ	r	J
r
  SSK7  SSKJr  S rg)	aü	  OpenGL extension NVX.linked_gpu_multicast

This module customises the behaviour of the 
OpenGL.raw.GL.NVX.linked_gpu_multicast to provide a more 
Python-friendly API

Overview (from the spec)
        
        This extension enables novel multi-GPU rendering techniques by providing application control
        over a group of linked GPUs with identical hardware configuration.
        
        Multi-GPU rendering techniques fall into two categories: implicit and explicit.  Existing
        explicit approaches like WGL_NV_gpu_affinity have two main drawbacks: CPU overhead and
        application complexity.  An application must manage one context per GPU and multi-pump the API
        stream.  Implicit multi-GPU rendering techniques avoid these issues by broadcasting rendering
        from one context to multiple GPUs.  Common implicit approaches include alternate-frame
        rendering (AFR), split-frame rendering (SFR) and multi-GPU anti-aliasing.  They each have
        drawbacks.  AFR scales nicely but interacts poorly with inter-frame dependencies.  SFR can
        improve latency but has challenges with offscreen rendering and scaling of vertex processing.
        With multi-GPU anti-aliasing, each GPU renders the same content with alternate sample
        positions and the driver blends the result to improve quality.  This also has issues with
        offscreen rendering and can conflict with other anti-aliasing techniques.
        
        These issues with implicit multi-GPU rendering all have the same root cause: the driver lacks
        adequate knowledge to accelerate every application.  To resolve this, NVX_linked_gpu_multicast
        provides application control over multiple GPUs with a single context.
        
        Key points:
        
        - One context controls multiple GPUs.  Every GPU in the linked group can access every object.
        
        - Rendering is broadcast.  Each draw is repeated across all GPUs in the linked group.
        
        - Each GPU gets its own instance of all framebuffers and attached textures, allowing
          individualized output for each GPU.  Input data can be customized for each GPU using buffers
          created with the storage flag, LGPU_SEPARATE_STORAGE_BIT_NVX and a new API,
          LGPUNamedBufferSubDataNVX. 
        
        - Textures can be transferred from one GPU to another using LGPUCopyImageSubDataNVX.
        

The official definition of this extension is available here:
http://www.opengl.org/registry/specs/NVX/linked_gpu_multicast.txt
é    )ÚplatformÚconstantÚarrays)Ú
extensionsÚwrapperN)Ú_typesÚ_glgets)Ú*)Ú_EXTENSION_NAMEc                  ó:   • SSK Jn   U R                  " [        5      $ )z=Return boolean indicating whether this extension is availabler   ©r   )ÚOpenGLr   ÚhasGLExtensionr   r   s    Ú\/home/wildlama/miniconda3/lib/python3.13/site-packages/OpenGL/GL/NVX/linked_gpu_multicast.pyÚglInitLinkedGpuMulticastNVXr   4   s   € å!Ø×$Ò$¤oÓ7Ð7ó    )Ú__doc__r   r   r   r   r   r   ÚctypesÚOpenGL.raw.GLr   r	   Ú&OpenGL.raw.GL.NVX.linked_gpu_multicastr   r   © r   r   Ú<module>r      s'   ðñ+÷X .Ñ -ß &Û ß )Ü 4Ý Bó8r   