Napisałem małą demo w Rust / SDL, która zniknęła i zniknęła z obrazu, plus kilka okazjonalnych przypadkowych specyfikacji. Było super płynne i dobre, rozciąganie do 250 fps.

Postanowiłem dodać zmianę na canvas.set_viewport na każdej ramce z losowymi wymiarami. Zasadniczo, ta sama strumieniowa tekstura (która wypełniona nowym tonem lub hałasem na każdej ramie) jest rysowana w losowej lokalizacji z losowym rozmiarem.

Znalazłem tam (niewytłumaczalny) migotanie już renderowane prostokąty.

Próbowałem go przesuwać, ale na wideo nie ma migoczącego. Użyłem zwykłego aparatu (60fps) i nie było migoczącego. Użyłem trybu szybkiego prędkości w moim telefonie i dostałem migoczące nagrane, ale wyglądało to bardzo różni się od tego, co widzę.

Co to jest?

Kod: https://github.com/amarao/sdl_random/tree/c4757190712F0A996C2ABA88B105462942D4CA27/SRC.

ScreenConture ScreenCapture: https://www.youtube.com/watch?v=ZUD9HJWLTXK9/ A >.

Migotanie wideo (Hi-Speed): https://youtu.be/rvzki9couz0

Drugie pytanie: Jeśli jest to jakiś rodzaj "niezdefiniowanych zachowań" z mojego GPU (NVIDIA), dlaczego tak jest? Zmiana obsługiwanej rzutni obsługiwanej?

Edytuj: Zmieniłem połączenie do set_viewport do parametru rect dla canvas.copy:

canvas.copy(
   &texture, None,
   sdl2::rect::Rect::new(
      new_x as i32,
      new_y as i32,
      new_width,
      new_height
  )
).unwrap();

Ale wynik jest absolutnie taki sam.

0
George Shuklin 13 marzec 2021, 21:50

1 odpowiedź

Najlepsza odpowiedź

Wynika to z podwójny buforowanie (Wikipedia). System renderowania używa dwóch buforów w tandemie: jeden jest prezentowany, gdy drugi jest zapisywany do. Możesz sprawdzić, czy jest to włączone w SDL2, sprawdzając video_system.gl_attrs().double_buffer().

Rysujesz iteracyjnie na tych samych buforach bez rozliczenia lub przeceniania na nich. Więc jeden bufor będzie miał wszystko, od nawet ramy narysowanych na nich, a druga będzie miała dziwna. Więc migotanie jest spowodowane przez nich, gdy mają dziko rozbieżną zawartość.

1
kmdreko 14 marzec 2021, 05:37