2017-09-14 4 views
7

L'écran principal de mon application est rendu via SKCanvasView. Les couleurs reflètent avec précision les valeurs que j'ai spécifiées dans le code.SKGLAffiche beaucoup plus sombre que SKCanvasView

Si j'échange dans SKGLView (version accélération matérielle), changer aucun autre code, le résultat est de 60% plus sombre:

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

Pourquoi est-ce qui se passe et comment puis-je résoudre il?

+0

Ce que vous voyez est logique totale pour moi que 'SKGLView' est basé sur OpenGL et ainsi l'éclairage de géométrie entre en jeu. MAIS tant qu'il y a une boucle de rendu exposée sur SKGLView, je ne vois pas où dans la version "Sharp" vous pouvez contrôler la source lumineuse, la valeur de lumière ambiante, la direction de la "source lumineuse par défaut", etc .... – SushiHangover

+0

En ce qui concerne l'utilisation de la batterie, cela peut varier énormément en fonction de l'appareil, du CPU par rapport au GPU, de ce qui est en mouvement et du fait qu'il s'agit de simples traductions d'objets dans GL , par rapport à la peinture et double mise en mémoire tampon, etc .. d'une toile. Souvenez-vous sur toutes les versions modernes d'Android, peinture sur toile est l'accélération matérielle, la même chose est vraie pour iOS UIViews, CoreGraphics et dessin UIKit sont accélérés. maintenant, la mise en page de ces Les vues ne sont pas accélérées car chaque système d'exploitation a son propre gestionnaire de disposition (et Forms a son propre dessus) – SushiHangover

+0

Pour tester la batterie, utilisez Battery Stats pour Android, une configuration simple basée sur Docker.Faites un test d'utilisation normale pendant un certain temps en utilisant le Canvas un d stocker les résultats de l'historien et de l'exécuter à nouveau dans GL et vous pouvez comparer les séries: https://developer.android.com/studio/profile/battery-historian.html – SushiHangover

Répondre

2

La réponse se trouve ici: https://github.com/mono/SkiaSharp/issues/299#issuecomment-331990904

Je trouve la solution au problème. Un attribut spécifique est défini dans le style de l'écran de démarrage, mais n'est pas désactivé (pour une raison quelconque) lorsque le style est modifié.

Dans le style splashscreen, notez ceci:

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

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

Ce n'est pas unset lorsque le style est en marche. Donc, pour résoudre ce problème, il suffit de mettre à faux:

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

Voici un référentiel qui démontre ceci: https://github.com/mattleibow/AndroidGLSurfaceViewTests