
    ^j(                    N   d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZ dd	lmZmZmZ  G d
 de          Z  G d de          Z! G d de          Z" G d de          Z# G d de#          Z$ G d de#          Z%dS )    )annotations)byrefc_intc_uintsizeof)gl)Win32Canvas)gl_infowglwgl_info
wglext_arb)PIXELFORMATDESCRIPTOR_gdi32)PFD_DEPTH_DONTCAREPFD_DOUBLEBUFFERPFD_DOUBLEBUFFER_DONTCAREPFD_DRAW_TO_WINDOW
PFD_STEREOPFD_STEREO_DONTCAREPFD_SUPPORT_OPENGLPFD_TYPE_RGBA   )DisplayConfigConfigContextc                  &    e Zd ZddZddZdd	Zd
S )Win32Configcanvasr	   return6list[Win32DisplayConfig] | list[Win32DisplayConfigARB]c                    t          |t                    sd}t          |          t          j                    r)t          j        d          r|                     |          S |                     |          S )Nz&Canvas must be instance of Win32CanvasWGL_ARB_pixel_format)	
isinstancer	   RuntimeErrorr
   have_contextr   have_extension&_get_arb_pixel_format_matching_configs-_get_pixel_format_descriptor_matching_configs)selfr   msgs      J/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/gl/win32.pymatchzWin32Config.match   sw    &+.. 	$:Cs### !! 	Gh&=>T&U&U 	G>>vFFFAA&III    list[Win32DisplayConfig]c                h   t                      }t          t                     |_        d|_        t          t
          z  |_        | j        r|xj        t          z  c_        n|xj        t          z  c_        | j
        r|xj        t          z  c_        n|xj        t          z  c_        | j        s|xj        t          z  c_        t          |_        | j        pd|_        | j        pd|_        | j        pd|_        | j        pd|_        | j        pd|_        | j        pd|_        | j        pd|_        | j        pd|_         | j!        pd|_"        | j        pd|_#        | j$        pd|_%        | j&        pd|_'        tQ          j)        |j*        tW          |                    }|rtY          |||           gS g S )zDGet matching configs using standard PIXELFORMATDESCRIPTOR technique.r   r   )-r   r   nSizenVersionr   r   dwFlagsdouble_bufferr   r   stereor   r   
depth_sizer   r   
iPixelTypebuffer_size
cColorBitsred_sizecRedBits
green_size
cGreenBits	blue_size	cBlueBits
alpha_size
cAlphaBitsaccum_red_sizecAccumRedBitsaccum_green_sizecAccumGreenBitsaccum_blue_sizecAccumBlueBitsaccum_alpha_sizecAccumAlphaBits
cDepthBitsstencil_sizecStencilBitsaux_bufferscAuxBuffersr   ChoosePixelFormathdcr   Win32DisplayConfig)r)   r   pfdpfs       r+   r(   z9Win32Config._get_pixel_format_descriptor_matching_configs$   s   #%%011	(+== 	5KK++KKKKK44KK; 	/KK:%KKKKK..KK  	.KK--KK&).Q})-A+!-A /41"38q!16Q"38q-A,1*/a%fj%**== 	&vr48899Ir-   list[Win32DisplayConfigARB]c                *     j         s j        rt          j        d          sg S g }                                 D ]M\  }}t
          j                            |d          }|r&|$|                    |t          |          g           N|
                    d           t          t          |          z  | }t          dz              }t          d          }t          j        j        |d|||            fd|d|j                 D             }|S )zGet configs using the WGL_ARB_pixel_format extension.

        This method assumes a (dummy) GL context is already created.
        GL_ARB_multisampleNr      c                2    g | ]}t          |          S  )Win32DisplayConfigARB).0rR   r   r)   s     r+   
<listcomp>zFWin32Config._get_arb_pixel_format_matching_configs.<locals>.<listcomp>d   s&    ___r(T::___r-   )sample_bufferssamplesr
   r&   get_gl_attributesrY   attribute_idsgetextendintappendr   lenr   r   wglChoosePixelFormatARBrO   value)	r)   r   attrsnamerf   attrpformatsnformatsformatss	   ``       r+   r'   z2Win32Config._get_arb_pixel_format_matching_configsN   s!     	4< 	9OPd9e9e 	I 1133 	1 	1KD%(6::4FFD 1)dCJJ/000QU#e,BJ>>"::*6:udHhX`aaa_____Xox~oE^___r-   N)r   r	   r   r    )r   r	   r   r.   )r   r	   r   rS   )__name__
__module____qualname__r,   r(   r'   rX   r-   r+   r   r      sU        	J 	J 	J 	J( ( ( (T     r-   r   c                  8     e Zd Zd fd	ZddZddZddZ xZS )rP   r   r	   rR   rb   configr   r   Nonec                L   t                                          ||           || _        t                      | _        t          j        |j        |t          t                    t          | j                             t          | j        j        t          z            | _        d| _        d| _        t          | j        j        t           z            | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j         | _!        | j        j"        | _#        | j        j$        | _%        | j        j&        | _'        | j        j(        | _)        d S Nr   )*super__init___pfr   _pfdr   DescribePixelFormatrO   r   r   boolr2   r   r3   r\   r]   r   r4   r8   r7   r:   r9   r<   r;   r>   r=   r@   r?   rB   rA   rD   rC   rF   rE   rH   rG   rI   r5   rK   rJ   rM   rL   )r)   r   rR   rq   	__class__s       r+   rv   zWin32DisplayConfig.__init__i   s@   ((()++	"6:r6:O3P3PRWX\XaRbRbccc!$)"36F"FGG49,z9::9/	*).,)."i5 $	 9#y7 $	 9). I290r-   rz   c                ,    t          |t                    S Nr#   r	   r)   r   s     r+   
compatiblezWin32DisplayConfig.compatible   s    &+...r-   shareWin32Context | NoneWin32Contextc                "    t          | |          S r}   )r   r)   r   s     r+   create_contextz!Win32DisplayConfig.create_context   s    D%(((r-   c                j    t          j        |j        | j        t	          | j                             d S r}   )r   SetPixelFormatrO   rw   r   rx   r   s     r+   _set_pixel_formatz$Win32DisplayConfig._set_pixel_format   s+    fj$(E$)4D4DEEEEEr-   r   r	   rR   rb   rq   r   r   rr   r   r	   r   rz   )r   r   r   r   r   r	   r   rr   )rm   rn   ro   rv   r   r   r   __classcell__r{   s   @r+   rP   rP   h   s        1 1 1 1 1 10/ / / /) ) ) )F F F F F F F Fr-   rP   c                  <    e Zd Zi dej        dej        dej        dej        dej        dej	        dej
        dej        d	ej        d
ej        dej        dej        dej        dej        dej        dej        Zd! fdZd"dZd#dZd$d Z xZS )%rY   r3   r4   r7   rL   r\   r]   r9   r;   r=   r?   r5   rJ   rA   rC   rE   rG   r   r	   rR   rb   rq   r   r   rr   c                   t                                          ||           || _        t          | j                                                  }t          | j                                                  }t          t          |          z  | }t          t          |          z              }t          j
        |j        |dt          |          ||           t          ||          D ]\  }}t          | ||           d S rt   )ru   rv   rw   listr_   keysvaluesr   rd   r   wglGetPixelFormatAttribivARBrO   zipsetattr)
r)   r   rR   rq   namesrg   r   rh   rf   r{   s
            r+   rv   zWin32DisplayConfigARB.__init__   s    (((T',,..//T'..0011U#e,#e**$''/
B3u::uV\]]]uf-- 	' 	'KD%D$&&&&	' 	'r-   rz   c                ,    t          |t                    S r}   r~   r   s     r+   r   z Win32DisplayConfigARB.compatible   s    &+...r-   r   Win32ARBContext | NoneWin32ARBContext | Win32Contextc                j    t          j        d          rt          | |          S t          | |          S )NWGL_ARB_create_context)r   r&   Win32ARBContextr   r   s     r+   r   z$Win32DisplayConfigARB.create_context   s8    "#;<< 	0 #4///D%(((r-   c                F    t          j        |j        | j        d            d S r}   )r   r   rO   rw   r   s     r+   r   z'Win32DisplayConfigARB._set_pixel_format   s!    fj$(D99999r-   r   r   )r   r   r   r   r   )rm   rn   ro   r   WGL_DOUBLE_BUFFER_ARBWGL_STEREO_ARBWGL_COLOR_BITS_ARBWGL_AUX_BUFFERS_ARBWGL_SAMPLE_BUFFERS_ARBWGL_SAMPLES_ARBWGL_RED_BITS_ARBWGL_GREEN_BITS_ARBWGL_BLUE_BITS_ARBWGL_ALPHA_BITS_ARBWGL_DEPTH_BITS_ARBWGL_STENCIL_BITS_ARBWGL_ACCUM_RED_BITS_ARBWGL_ACCUM_GREEN_BITS_ARBWGL_ACCUM_BLUE_BITS_ARBWGL_ACCUM_ALPHA_BITS_ARBr_   rv   r   r   r   r   r   s   @r+   rY   rY      sl       9*+ 	z4 	z5	
 	*; 	:- 	J/ 	j3 	Z1 	j3 	j3 	
7 	*; 	J? 	:=  	J?!M&' ' ' ' ' '/ / / /) ) ) ): : : : : : : :r-   rY   c                  P     e Zd Zd fdZd fdZd fd	Zdd
ZddZddZ xZ	S )_BaseWin32Contextrq   *Win32DisplayConfig | Win32DisplayConfigARBr   Win32Context | Win32ARBContextr   rr   c                Z    t                                          ||           d | _        d S r}   )ru   rv   _context)r)   rq   r   r{   s      r+   rv   z_BaseWin32Context.__init__   s(    '''r-   c                    | j         4| t          j        k    r$t          j        | j        j        | j                    t                                                       d S r}   )	r   r   current_contextr   wglMakeCurrentr   rO   ru   set_currentr)   r{   s    r+   r   z_BaseWin32Context.set_current   sM    =$1C)C)Ct{>>>r-   c                    | j         r t          j        | j                   d | _        t	                                                       d S r}   )r   r   wglDeleteContextr   ru   detachr   s    r+   r   z_BaseWin32Context.detach   sA    ; 	! /// DMr-   c                B    t          j        | j        j                   d S r}   )r   SwapBuffersr   rO   r)   s    r+   flipz_BaseWin32Context.flip   s    4;?+++++r-   rz   c                n    t          j        d          r t          t          j                              S dS )NWGL_EXT_swap_controlF)r   r&   rz   r   wglGetSwapIntervalEXTr   s    r+   	get_vsyncz_BaseWin32Context.get_vsync   s2    "#9:: 	<
8::;;;ur-   vsyncc                t    t          j        d          r#t          j        t	          |                     d S d S )Nr   )r   r&   r   wglSwapIntervalEXTrb   )r)   r   s     r+   	set_vsyncz_BaseWin32Context.set_vsync   s=    "#9:: 	6)#e**55555	6 	6r-   )rq   r   r   r   r   rr   )r   rr   )r   rz   )r   rz   r   rr   )
rm   rn   ro   rv   r   r   r   r   r   r   r   s   @r+   r   r      s                  
     , , , ,   
6 6 6 6 6 6 6 6r-   r   c                  6     e Zd ZU ded<   ded<   d
 fd	Z xZS )r   rP   rq   r   context_sharer   r	   r   rr   c                x   t                                          |           | j        s8| j                            |           t          j        |j                  | _        | j        }|rM|j	        sd}t          |          t          j        |j        | j                  sd}t          j        |          d S d S )NShare context has no canvas.zUnable to share contexts.)ru   attachr   rq   r   r   wglCreateContextrO   r   r   r$   wglShareListsr   ContextException)r)   r   r   r*   r{   s       r+   r   zWin32Context.attach   s    v} 	=K))&1110<<DM" 	/< (4"3'''$U^T]CC /1)#...	/ 	// /r-   r   rm   rn   ro   __annotations__r   r   r   s   @r+   r   r      sW         &&&&/ / / / / / / / / /r-   r   c                  6     e Zd ZU ded<   ded<   d
 fd	Z xZS )r   rY   rq   r   r   r   r	   r   rr   c                    | j         }|r|j        sd}t          |          |j        }g }| j        j        +|                    t          j        | j        j        g           | j        j	        +|                    t          j
        | j        j	        g           d}| j        j        r|t          j        z  }| j        j        r|t          j        z  }|r!|                    t          j        |g           |                    d           t#          t%          |          z  | }| j                            |           t          j        |j        ||          | _        t-                                          |           d S )Nr   r   )r   r   r$   r   rq   major_versionra   r   WGL_CONTEXT_MAJOR_VERSION_ARBminor_versionWGL_CONTEXT_MINOR_VERSION_ARBforward_compatible&WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARBdebugWGL_CONTEXT_DEBUG_BIT_ARBWGL_CONTEXT_FLAGS_ARBrc   r   rd   r   wglCreateContextAttribsARBrO   ru   r   )r)   r   r   r*   attribsflagsr{   s         r+   r   zWin32ARBContext.attach   s_   " 	#< (4"3'''NE;$0NNJDdkF_`aaa;$0NNJDdkF_`aaa;) 	GZFFE; 	:Z99E 	FNNJ<eDEEEq3w<<''2%%f---"=fj%QXYYvr-   r   r   r   s   @r+   r   r      sW         !!!!))))         r-   r   N)&
__future__r   ctypesr   r   r   r   pygletr   pyglet.display.win32r	   	pyglet.glr
   r   r   r   pyglet.libs.win32r   r   pyglet.libs.win32.constantsr   r   r   r   r   r   r   r   baser   r   r   r   rP   rY   r   r   r   rX   r-   r+   <module>r      s:   " " " " " " / / / / / / / / / / / /       , , , , , , 8 8 8 8 8 8 8 8 8 8 8 8 ; ; ; ; ; ; ; ;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 1 0 0 0 0 0 0 0 0 0N N N N N& N N Nb F  F  F  F  F  F  F  FF/: /: /: /: /:M /: /: /:d6 6 6 6 6 6 6 6:/ / / / /$ / / /*    '     r-   