2017-09-14 26 views
7

Główny ekran mojej aplikacji jest renderowany przez SKCanvasView. Kolory dokładnie odzwierciedlają wartości określone w kodzie.SKGLView znacznie ciemniejszy niż SKCanvasView

Gdybym zamienić w SKGLView (wersja z akceleracją sprzętową), zmiana ma inny kod, wynik wynosi 60% ciemniejsze:

<!--<skia:SKCanvasView PaintSurface="OnCanvasViewPaintSurface" />--> 
    <skia:SKGLView PaintSurface="OnCanvasViewPaintSurface" /> 

Dlaczego tak się dzieje i jak to naprawić to?

+0

Co widzisz ogromne znaczenie dla mnie jako 'SKGLView' bazuje na OpenGL i dlatego światło geometrii wchodzi w grę. ALE w pętli renderowania widocznej na SKGLView, nie widzę gdzie w wersji "Sharp" można kontrolować źródło światła, wartość światła otoczenia, w którym kierunku "domyślne źródło światła pochodzi, itp .... Co czy wygląda na to, że obrócisz świat o 180 stopni? – SushiHangover

+0

Jeśli chodzi o zużycie baterii, może to znacznie różnić się w zależności od urządzenia, to procesor w porównaniu z GPU, co i ile się przemieszcza oraz czy są tu proste tłumaczenia obiektów w GL , w porównaniu do malowania i podwójnego buforowania itp. płótna. Pamiętaj, że we wszystkich nowszych wersjach Androida malowanie na płótnie jest przyspieszane sprzętowo, to samo odnosi się do UIViews iOS, CoreGraphics i UIKit są przyspieszane. widoki nie są przyspieszane, ponieważ każdy system operacyjny ma swój własny menedżer układu (a Forms ma na nim swój własny) – SushiHangover

+0

Do testowania baterii, użyj Statystyki baterii dla Androida, prosta konfiguracja na podstawie Dockera, Wykonaj normalny test użycia na chwilę używając Canvas na d zapisz wyniki w historyku i uruchom je ponownie w GL, a możesz porównać przebiegi: https://developer.android.com/studio/profile/battery-historian.html – SushiHangover

Odpowiedz

2

Odpowiedź można znaleźć tutaj: https://github.com/mono/SkiaSharp/issues/299#issuecomment-331990904

znalazłem rozwiązanie problemu. Istnieje określony atrybut, który jest ustawiony w stylu ekranu powitalnego, ale nie jest nieustawiony (z jakiegoś powodu) po zmianie stylu.

W stylu splashscreen należy pamiętać, to:

<item name="android:backgroundDimEnabled">true</item> 

Docs: https://developer.xamarin.com/api/field/Android.Resource+Attribute.BackgroundDimEnabled

ta nie jest ustawiona, gdy styl jest włączony. Tak więc, aby rozwiązać ten problem, wystarczy ustawić go na false:

<item name="android:backgroundDimEnabled">false</item> 

Oto repozytorium, które pokazuje to: https://github.com/mattleibow/AndroidGLSurfaceViewTests

Powiązane problemy