画面のティアリングの問題で 1 週間ほど立ち往生しています。
ここに私の問題があります: PNG 画像のシーケンスを非常に高速 (30 fps 以上) に表示できるプログラムを作成したいと考えています。これを行うために、私は pygame ライブラリ、特にpygame.display.blit
andを使用しpygame.display.flip
ます。
コードの例を次に示します (自家製の遅延関数を使用)。
import time
import pygame
screen=pygame.display.set_mode(size, pygame.FULLSCREEN)
nbPicturesToLoad=12
pictures=range(nbPicturesToLoad)
for i in range(nbPicturesToLoad):
pictures[i]=pygame.image.load(pictureName).convert() //Here pictureName depends on the value of i
(...)
for i in range(nbPicturesToLoad):
timer1=time.time()
screen.blit(pictures[i], (0,0))
pygame.display.flip()
timer2=time.time()
timer=timer2-timer1
while(timer<0.03333):
timer2=time.time()
timer=timer2-timer1
タイマーを使用すると、画面上で同じリフレッシュ レートを維持できます。私の問題は、画面のティアリングの問題があることを自分の目で確認できることです ( https://en.wikipedia.org/wiki/Screen_tearing )。pygame のドキュメントでは、画面の初期化に他のフラグを使用することを推奨しています ( http://www.pygame.org/docs/ref/display 、pygame.HWSURFACE and pygame.DOUBLEBUF
) 。どうやら、これらは画面のティアリングの問題を修正するのに役立つ可能性があります. しかし、これらのフラグを使用すると、画面のティアリングが修正されません。y.set_mode
pygame が X11 で vsync を処理できないことをどこかで見たことがあります。これは、HWSURFACE および DOUBLEBUF フラグとの違いが見られない理由を説明しています。
Raspberry Pi でこの vsync の問題に遭遇した人はいますか? 「config.txt」ファイルに入れるパラメータはありますか? これらの画面のティアリング効果を回避するために、実際の vsync 情報を取得する方法はありますか?
作成されたウィンドウで pyglet が vsync を処理できることを見てきましたが、不明な理由で pyglet ウィンドウに画像を表示できず、特に Raspberry が処理できない場合、問題が解決するかどうかは本当にわかりません今すぐvsync。