
    Ui(                     R    S SK 7  S SKrS SKr S r " S S\5      r " S S\5      rg)    )*Nc           
         [        U R                  5      S:X  Ga;  [        R                  " U R                  S   S   U R                  S   S   U R                  S   S   U R                  S   S   4U R                  S   S   U R                  S   S   U R                  S   S   U R                  S   S   4U R                  S   S   U R                  S   S   U R                  S   S   U R                  S   S   4U R                  S   S   U R                  S   S   U R                  S   S   U R                  S   S   44[        R                  5      nU$ [        U R                  5      S:X  a  [        R                  " U R                  S   S   U R                  S   S   U R                  S   S   S4U R                  S   S   U R                  S   S   U R                  S   S   S4U R                  S   S   U R                  S   S   U R                  S   S   S4U R                  S   S   U R                  S   S   U R                  S   S   S44[        R                  5      nW$ )N   r                    g      ?)lenmnumpymatrixfloat32)matresults     L/home/james-whalen/.local/lib/python3.13/site-packages/openvr/gl_renderer.pymatrixForOpenVrMatrixr      s   
355zQ%%(1+suuQx{CEE!HQKq!E%%(1+suuQx{CEE!HQKq!E%%(1+suuQx{CEE!HQKq!E%%(1+suuQx{CEE!HQKq!EH mm M 
SUUq%%(1+suuQx{CEE!HQK=%%(1+suuQx{CEE!HQK=%%(1+suuQx{CEE!HQK=%%(1+suuQx{CEE!HQK=@ mm M    c                   4    \ rS rSrSrS	S jrS rS rS rSr	g)
OpenVrFramebuffer#   z!Framebuffer for rendering one eyec                 `    SU l         SU l        SU l        Xl        X l        S U l        X0l        g Nr   )fbdepth_buffer
texture_idwidthheight
compositormultisample)selfr   r   r   s       r   __init__OpenVrFramebuffer.__init__&   s/    
&r   c                 	   [        S5      U l        [        [        U R                  5        [	        S5      U l        [        [        U R
                  5        U R                  S:  a6  [        [        U R                  [        U R                  U R                  5        O*[        [        [        U R                  U R                  5        [        [        [        [        U R
                  5        [!        [#        S5      5      U l        U R                  S:  av  ['        [(        U R$                  5        [+        [(        U R                  [,        U R                  U R                  S5        [/        [        [0        [(        U R$                  S5        O['        [2        U R$                  5        [5        [2        S[,        U R                  U R                  S[6        [8        S 5	        [;        [2        [<        [>        5        [;        [2        [@        [>        5        [;        [2        [B        [D        5        [;        [2        [F        [D        5        [;        [2        [H        S5        [/        [        [0        [2        U R$                  S5        [K        [        5      nU[L        :w  a  [        [        S5        [O        S5      eU R                  S:  Gaf  [        S5      U l(        [        [        U RP                  5        [!        [#        S5      5      U l)        ['        [2        U RR                  5        [;        [2        [<        [>        5        [;        [2        [@        [>        5        [;        [2        [B        [D        5        [;        [2        [F        [D        5        [;        [2        [H        S5        [5        [2        S[,        U R                  U R                  S[6        [8        S 5	        [/        [        [0        [2        U RR                  S5        [K        [        5      nU[L        :w  a  [        [        S5        [O        S5      e[        [        S5        [T        RV                  " 5       U l,        U R                  S:  a  U RR                  U RX                  l-        OU R$                  U RX                  l-        [T        R\                  U RX                  l/        [T        R`                  U RX                  l1        g )Nr   r   TzIncomplete framebuffer)2glGenFramebuffersr   glBindFramebufferGL_FRAMEBUFFERglGenRenderbuffersr   glBindRenderbufferGL_RENDERBUFFERr    glRenderbufferStorageMultisampleGL_DEPTH24_STENCIL8r   r   glRenderbufferStorageglFramebufferRenderbufferGL_DEPTH_STENCIL_ATTACHMENTintglGenTexturesr   glBindTextureGL_TEXTURE_2D_MULTISAMPLEglTexImage2DMultisampleGL_RGBA8glFramebufferTexture2DGL_COLOR_ATTACHMENT0GL_TEXTURE_2DglTexImage2DGL_RGBAGL_UNSIGNED_BYTEglTexParameteriGL_TEXTURE_MAG_FILTER	GL_LINEARGL_TEXTURE_MIN_FILTERGL_TEXTURE_WRAP_SGL_CLAMP_TO_EDGEGL_TEXTURE_WRAP_TGL_TEXTURE_MAX_LEVELglCheckFramebufferStatusGL_FRAMEBUFFER_COMPLETE	Exception
resolve_fbresolve_texture_idopenvr	Texture_ttexturehandleTextureType_OpenGLeTypeColorSpace_GammaeColorSpace)r    statuss     r   init_glOpenVrFramebuffer.init_gl/   s#   #A&.$''2.q1?D,=,=>a,_d>N>NPceieoeoquq|q|}!/3F

TXT_T_`!.2M`d`q`qrmA./a3T__E#$=t?O?OQY[_[e[egkgrgrtxy">3GIbdhdsdsuvw-98TZZaQXZjlpqM+@)LM+@)LM+<>NOM+<>NOM+?C">3GX\XgXgijk).9,,na0455a/2DOndoo>&)-*:&;D#-)@)@AM+@)LM+@)LM+<>NOM+<>NOM+?C8TZZaQXZjlpq">3GX\XoXoqrs-n=F00!.!4 899.!,'')a"&"9"9DLL"&//DLL#66#)#:#: r   c                    U R                   S:  a  [        [        U R                  5        [        [        U R
                  5        [        SSU R                  U R                  SSU R                  U R                  [        [        5
        [        [        S5        [        [        S5        [        R                  " 5       R                  XR                  5        g r   )r   r%   GL_READ_FRAMEBUFFERr   GL_DRAW_FRAMEBUFFERrF   glBlitFramebufferr   r   GL_COLOR_BUFFER_BITr=   rH   VRCompositorsubmitrJ   )r    eyes     r   rY   OpenVrFramebuffer.submitg   s    a1477;14??CaDJJDJJ19> 115115$$S,,7r   c                    [        U R                  /5        [        SU R                  /5        [	        SU R
                  /5        SU l        U R                  S:  a.  [        U R                  /5        [	        SU R                  /5        g g )Nr   r   )	glDeleteTexturesr   glDeleteRenderbuffersr   glDeleteFramebuffersr   r   rG   rF   )r    s    r   
dispose_glOpenVrFramebuffer.dispose_glr   sp    $//*+a$"3"3!45Q	*ad5567 T__$56  r   )
r   r   r   r   r   rF   rG   rJ   r   r   N)r   )
__name__
__module____qualname____firstlineno____doc__r!   rQ   rY   r`   __static_attributes__ r   r   r   r   #   s    ''6;p	87r   r   c                   :    \ rS rSrSrS
S jrS rS rS rS r	S	r
g)OpenVrGlRenderer|   z?Renders to virtual reality headset using OpenVR and OpenGL APIsNc                 >   S U l         S U l        S U l        X l        [        R
                  [        R                  -  nU" 5       U l        Ub   [        U5        U R                  U5        SU l        X0l        S U l        g ! [         a    U R                  U5         N2f = f)NF)	vr_systemleft_fbright_fbwindow_sizerH   TrackedDevicePose_tk_unMaxTrackedDeviceCountposesr
   extend	TypeErrorappend	do_mirrorr   r   )r    actorrp   r   poses_ts        r   r!   OpenVrGlRenderer.__init__   s    &,,v/O/OOY
#E
E" &	  #E"#s   A> >BBc           	      ,   [         R                  " [         R                  5      U l        U R                  R	                  5       u  p[        XU R                  S9U l        [        XU R                  S9U l        [         R                  " 5       U l
        U R                  c  [        S5      eU R                  R                  5         U R                  R                  5         SnSn[        R                  " [        U R                  R!                  [         R"                  X45      5      5      U l        [        R                  " [        U R                  R!                  [         R&                  X45      5      5      U l        [        U R                  R+                  [         R"                  5      5      R,                  U l        [        U R                  R+                  [         R&                  5      5      R,                  U l        U  H  nUR                  5         M     g)zallocate OpenGL resources)r   NzUnable to create compositorg?g     @@)rH   initVRApplication_Scenerm   getRecommendedRenderTargetSizer   r   rn   ro   rX   r   rE   rQ   r   asarrayr   getProjectionMatrixEye_Leftprojection_left	Eye_Rightprojection_rightgetEyeToHeadTransformI	view_left
view_right)r    whzNearzFarrx   s         r   rQ   OpenVrGlRenderer.init_gl   s   V%?%?@~~<<>(4;K;KL)!D<L<LM --/??"9::$}}-B4>>CeCeD .   !&.CDNNDfDf  E / ! /NN00ACCD1 	/NN001A1ABDDEA 	EMMO r   c                    U R                   c  g U R                   R                  U R                  S 5        U R                  [        R                     nUR
                  (       d  g UR                  n[        U5      R                  nUnX@R                  -  nX@R                  -  n[        R                  " [        R                  " U[        R                  S95      n[        R                  " [        R                  " U[        R                  S95      nU R                  (       aC  [!        SSU R"                  S   U R"                  S   5        U R%                  XPR&                  5        [)        [*        U R,                  R.                  5        [!        SSU R,                  R0                  U R,                  R2                  5        U R%                  XPR&                  5        U R,                  R5                  [        R6                  5        [)        [*        U R8                  R.                  5        U R%                  X`R:                  5        U R8                  R5                  [        R<                  5        [)        [*        S5        g )N)dtyper   r   )r   waitGetPosesrs   rH   k_unTrackedDeviceIndex_HmdbPoseIsValidmDeviceToAbsoluteTrackingr   r   r   r   r   r   r   r   rw   
glViewportrp   
display_glr   r%   r&   rn   r   r   r   rY   r   ro   r   r   )r    	hmd_pose0	hmd_pose1hmd_pose	modelviewmvlmvrs          r   render_sceneOpenVrGlRenderer.render_scene   s   ??"$$TZZ6JJv@@A	%%77	(355	..(//) mmELLEMMBCmmELLEMMBC>>q!T--a0$2B2B12EFOOC!5!56 	.$,,//:1a++T\\-@-@A112FOO, 	.$--*:*:;223V--..!,r   c                     [        SSSS5        [        [        [        -  5        U  H  nUR	                  X5        M     g )Ng      ?r	   )glClearColorglClearrW   GL_DEPTH_BUFFER_BITr   )r    r   
projectionrx   s       r   r   OpenVrGlRenderer.display_gl   s7    S#sC(#&99:EY3 r   c                    U  H  nUR                  5         M     U R                  b  [        R                  " 5         S U l        U R                  b5  U R                  R                  5         U R
                  R                  5         g g )N)r`   rm   rH   shutdownrn   ro   )r    rx   s     r   r`   OpenVrGlRenderer.dispose_gl   sb    E >>%OO!DN<<#LL##%MM$$& $r   )r   rw   rn   r   rs   r   r   ro   r   r   rm   rp   )N)i   iX  r   )rb   rc   rd   re   rf   r!   rQ   r   r   r`   rg   rh   r   r   rj   rj   |   s    E"6"-H4'r   rj   )	OpenGL.GLr   rH   r   objectr   listrj   rh   r   r   <module>r      s7   
   $V7 V7ra't a'r   