
    Ui                     P    S SK r S SKJr  S SK7    " S S\5      r " S S\5      rg)    N)glFlush)*c                       \ rS rSrSrg)
SdlAppQuit    N)__name__
__module____qualname____firstlineno____static_attributes__r       T/home/james-whalen/.local/lib/python3.13/site-packages/openvr/glframework/sdl_app.pyr   r      s    r   r   c                   t    \ rS rSrSrSrSrSrSrSr	Sr
SrSS jrS rS rS rS	 rS
 rS rS rS rS rSrg)SdlApp   z]SdlApp uses sdl2 library to create an opengl context, listen to keyboard events, and clean upNFc                     Xl         X l        SU l        SU l        [        U R
                  [        U R                  [        U R                  0U l
        g)zECreates an OpenGL context and a window, and acquires OpenGL resourcesFN)renderertitle_is_initializedwindowSDL_WINDOWEVENTon_sdl_window_eventSDL_KEYDOWNon_sdl_keydownSDL_QUITon_sdl_quit_sdl_event_handlers)selfr   r   s      r   __init__SdlApp.__init__   sF    -*$$+D,,##T$r   c                     U $ )z#setup for RAII using 'with' keywordr   r   s    r   	__enter__SdlApp.__enter__(   s    	+r   c                 :    [        S5        U R                  5         g)z%cleanup for RAII using 'with' keywordzSdlApp exitingN)print
dispose_gl)r   type_argvalue	tracebacks       r   __exit__SdlApp.__exit__,   s    //r   c           	         U R                   (       a  g [        [        5      nUS:  a"  [        SR	                  [        5       5      5      e[        [        S5        [        [        S5        [        [        [        5        [        [        S5        [        [        S5        [        [        S5        [        [        S5        [        [        S5        [!        U R"                  R%                  S5      [&        [&        U R(                  R*                  S   U R(                  R*                  S   [,        [.        -  5      U l        U R0                  c,  [3        5         [        SR	                  [        5       5      5      e[5        U R0                  5      U l        [9        U R0                  U R6                  5        U R(                  b  U R(                  R;                  5         S	U l         g )
Nr   zSDL Initialization error: {}            zutf-8zSDL window creation error: {}T)r   SDL_InitSDL_INIT_VIDEO	ExceptionformatSDL_GetErrorSDL_GL_SetAttributeSDL_GL_CONTEXT_MAJOR_VERSIONSDL_GL_CONTEXT_MINOR_VERSIONSDL_GL_CONTEXT_PROFILE_MASKSDL_GL_CONTEXT_PROFILE_CORESDL_GL_RED_SIZESDL_GL_GREEN_SIZESDL_GL_BLUE_SIZESDL_GL_DEPTH_SIZESDL_GL_DOUBLEBUFFERSDL_CreateWindowr   encodeSDL_WINDOWPOS_CENTEREDr   window_sizeSDL_WINDOW_SHOWNSDL_WINDOW_OPENGLr   SDL_QuitSDL_GL_CreateContextcontextSDL_GL_MakeCurrentinit_gl)r   results     r   rL   SdlApp.init_gl1   sO   		N#&aZ	188H	II2A62A613NO+(!-',(".*A/ ::W1==Q!:!:1!=?OPa?ac$+ 
[[:	299,.I	JJ%dkk2$,t{{DLL2	]]==$r   c                     U R                  5         [        U R                  U R                  5        U R                  R                  5         [        5         g)zrender scene one timeN)rL   rK   r   rJ   r   render_scener   r#   s    r   rP   SdlApp.render_sceneM   s4    ,,.t{{DLL2-- 
)r   c                 <   U R                   b~  [        U R                   U R                  5        U R                  b  U R                  R	                  5         U R                  b  [        U R                  5        [        U R                   5        [        5         SU l        g NF)	r   rK   rJ   r   r(   SDL_GL_DeleteContextSDL_DestroyWindowrH   r   r#   s    r   r(   SdlApp.dispose_glV   sg    	[[T\\3
mmMM
ll&T[[!
*$r   c                     UR                   R                  [        :X  a>  [        U R                   5      u  p#U R                  R                  U R                   X#5        g g )N)r   eventSDL_WINDOWEVENT_RESIZEDSDL_GL_GetDrawableSizer   size_callback)r   rX   widthheights       r   r   SdlApp.on_sdl_window_eventa   sB    
\\22)DKK9=5==e= 3r   c                 h    UR                   R                  R                  nU[        :X  a  SU l        gg)z$press ESCAPE to quit the applicationFN)keykeysymsymSDLK_ESCAPErunning)r   rX   r`   s      r   r   SdlApp.on_sdl_keydownf   s+    		#K4< r   c                 $    SU l         [        5       erS   )rd   r   )r   rX   s     r   r   SdlApp.on_sdl_quitl   s    $,r   c                    SU l         [        5       n U R                   (       a  [        [        R                  " U5      5      S:w  aU  U R
                  R                  UR                  5      nUb  U" U5        [        [        R                  " U5      5      S:w  a  MU  U R                  5         U R                   (       a  M  gg! [         a
  n SnAgSnAff = f)z'keep rendering until the user says quitTr   N)
rd   	SDL_EventSDL_PollEventctypesbyrefr   gettyperP   r   )r   rX   fes       r   run_loopSdlApp.run_loopp   s    $,
+%	
U+
,
1		!	!	%	%ejj	1Q	%k U+
,
1 	 
 
 s   BC !C 
CC)r   r   rJ   r   rd   r   r   )zSDL test)r	   r
   r   r   __doc__r   r   r   r   rJ   rd   r   r    r$   r,   rL   rP   r(   r   r   r   rq   r   r   r   r   r   r      s[    `	


8	>
r   r   )rk   	OpenGL.GLr   sdl2r5   r   objectr   r   r   r   <module>rw      s/   
    jV jr   