1+ import sdl3 , ctypes , os , \
2+ sys , colorsys , time
3+
4+ def main (argv ):
5+ print (f"loaded { len (sdl3 .functions )} functions." )
6+ result = sdl3 .SDL_Init (sdl3 .SDL_INIT_VIDEO | sdl3 .SDL_INIT_EVENTS | sdl3 .SDL_INIT_TIMER )
7+
8+ if result :
9+ print (f"failed to initialize library: { sdl3 .SDL_GetError ().decode ().lower ()} ." )
10+ return 1
11+
12+ window = sdl3 .SDL_CreateWindow ("Aermoss" .encode (), 1200 , 600 , sdl3 .SDL_WINDOW_RESIZABLE )
13+
14+ drivers = [sdl3 .SDL_GetRenderDriver (i ).decode () for i in range (sdl3 .SDL_GetNumRenderDrivers ())]
15+ print (f"available render drivers: { ", " .join (drivers )} " )
16+
17+ renderer = sdl3 .SDL_CreateRenderer (window , ("vulkan" if "vulkan" in drivers else "software" ).encode ())
18+
19+ if not renderer :
20+ print (f"failed to create renderer: { sdl3 .SDL_GetError ().decode ().lower ()} ." )
21+ return 1
22+
23+ running , hue , last = True , 0.0 , 0.0
24+
25+ while running :
26+ event = sdl3 .SDL_Event ()
27+
28+ while sdl3 .SDL_PollEvent (ctypes .byref (event )):
29+ match event .type :
30+ case sdl3 .SDL_EVENT_QUIT :
31+ running = False
32+
33+ case sdl3 .SDL_EVENT_KEY_DOWN :
34+ if event .key .key == sdl3 .SDLK_ESCAPE :
35+ running = False
36+
37+ last , delta = \
38+ time .time (), time .time () - last
39+
40+ hue += 0.5 * delta
41+
42+ sdl3 .SDL_SetRenderDrawColorFloat (renderer , * colorsys .hsv_to_rgb (hue , 1.0 , 1.0 ), 255.0 )
43+ sdl3 .SDL_RenderClear (renderer )
44+ sdl3 .SDL_RenderPresent (renderer )
45+
46+ sdl3 .SDL_DestroyRenderer (renderer )
47+ sdl3 .SDL_DestroyWindow (window )
48+ sdl3 .SDL_Quit ()
49+ return 0
50+
51+ if __name__ == "__main__" :
52+ os ._exit (main (sys .argv ))
0 commit comments