1. # Demo: Fast blitting of images via textures in GPU memory with SDL2 in Raspian-Stretch
  2.  
  3. from os, sys, time
  4.  
  5. # make sure that SDL2 lib is found
  6. os.environ['PYSDL2_DLL_PATH'] = '/usr/local/lib'
  7.  
  8. from sdl2 import *
  9. from sdl2.sdlimage import IMG_Load as SDL_LoadImage
  10.  
  11. # force using RPI as video driver
  12. # os.environ['SDL_VIDEODRIVER'] = 'RPI'
  13.  
  14. # initialize SDL2
  15. SDL_Init(SDL_INIT_VIDEO)
  16.  
  17. # show current video driver
  18. print('Using video driver: '+SDL_GetCurrentVideoDriver().decode('utf-8'))
  19.  
  20. try:
  21.     # create fullscreen display
  22.     win = SDL_CreateWindow(b'Fast Blitting', 0,0,0,0, SDL_WINDOW_FULLSCREEN)
  23.  
  24.     # create renderer
  25.     renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC)
  26.  
  27.     # load all image files (BMP) in folder 'images' into textures in GPU memory
  28.     textures = []
  29.     folder = os.path.realpath('.')+'/fotos/'
  30.     files = os.listdir(folder)
  31.     for f in files:
  32.         img = SDL_LoadImage((folder+f).encode())
  33.         tex = SDL_CreateTextureFromSurface(renderer, img)
  34.         SDL_FreeSurface(img)
  35.         textures.append(tex)
  36.  
  37.     # blit 100 images
  38.     cnt = len(textures)
  39.     t_start = time.time()
  40.     for i in range(100):
  41.  
  42.         SDL_RenderCopy(renderer, textures[i % cnt], None, None)
  43.  
  44.         # Use this function to update the screen with any rendering performed since the previous call.
  45.         SDL_RenderPresent(renderer)
  46.  
  47.         # reduce fps via delay
  48.         #SDL_Delay(10)
  49.  
  50.     # show fps
  51.     sec = time.time()-t_start
  52.     print('fps: '+str(100/sec))
  53.  
  54. except:
  55.     print(sys.exc_info())
  56.  
  57. # clean up
  58. if 'win' in locals():
  59.     if 'renderer' in locals():
  60.         if 'textures' in locals():
  61.             for tex in textures: SDL_DestroyTexture(tex)
  62.         SDL_DestroyRenderer(renderer)
  63.     SDL_DestroyWindow(win)
  64. SDL_Quit()
  65.  
[raw code]