OpenGL: le cadre saute partiellement d'avant en arrière [fermé]

8

Je travaille sur un projet avec SDL et OpenGL. Le jeu fonctionne très bien sur Windows, Linux, OS X et iOS. Cependant, la version Android montre un problème sur mon téléphone en particulier. J'ai testé un autre appareil et ça marche aussi très bien.

Le problème auquel je suis confronté est un problème visuel. Cela se produit en rafales: par exemple: 90 images correctes puis 40 images le problème. Le problème lui-même est un peu difficile à décrire, mais je vais essayer. L'écran est mis à jour partiellement correct (du haut de mon téléphone jusqu'à environ la moitié) et scintille partiellement. L'effet vacillant est une sorte de va-et-vient. Je pense que c'est lié à la double mise en mémoire tampon. Je pense que parce que ce que je vois à l'écran saute d'avant en arrière à chaque image. C'est comme si la moitié de l'écran était une image dans le temps et l'image suivante 2 images en retard. Un peu comme une procession d'Echternach, je suppose que vous pourriez dire. Si je le trace dans un graphique où le temps passe en descendant le graphique, je pense que je '

          left half | right half  (phone is in landscape)
         ------------------------
time  1 |      1           1
time  2 |      2           2
time  3 |      3           1
time  4 |      4           4
time  5 |      5           3
time  6 |      6           6
time  7 |      7           5
time  8 |      8           8
time  9 |      9           7

Donc la moitié droite est une image dans le temps, et l'image suivante, elle montre l'image précédente. Cela confirme ma théorie selon laquelle il y a un problème avec la double mise en mémoire tampon. Il semble qu'il ne soit pas en mesure de mettre à jour complètement le backbuffer avant qu'il ne soit affiché à l'écran, ou quelque chose du genre.

En outre, la répartition entre le bon et le glitch à l'écran est différente d'une image à l'autre, ce qui, je pense, prouve qu'il s'agit d'un problème de synchronisation et dépend fortement du timing de ce qui se passe. AjouterglFinish(); avant leSDL_GL_SwapWindow(); appel n'aide pas.

Informations sur la version: SDL signale que vsync doit être activé. Cependant, je crois que ce n'est pas déchirant. Mon téléphone est un Samsung Galaxy S3 mini et fonctionne sous Android 5.1.1 (CM12) et le GPU (Mali-400) prend en charge OpenGL ES 2.0. D'autres jeux fonctionnent bien sur mon téléphone.

Martijn Courteaux
la source
Quel est le modèle de téléphone?
concept3d
Le mini-samsung galaxy. Courir CyanogenMod 12.
Martijn Courteaux
J'ai découvert que c'était partout dans mon téléphone, mais plus subtil. Même dans l'interface utilisateur système faisant défiler les menus.
Martijn Courteaux
2
Cela ressemble plus à un bug dans votre téléphone. Je suppose qu'une mise à jour du firmware est le moyen le plus probable de le résoudre.
rolobo
@rolobo: Oui, en effet. Cependant, je suis très satisfait de tout le reste et mon téléphone n'est qu'un appareil de test pour ce projet et ne fait pas partie de mon processus de développement principal.
Martijn Courteaux

Réponses:

0

Une section du fichier Lisez - moi en parle:

Une note concernant l'utilisation de la technique de rendu des "rectangles sales"

[...] lorsque vous ne mettez à jour qu'une partie de l'écran sur chaque image, vous pouvez remarquer une variété de problèmes visuels sur Android, qui ne sont pas présents sur d'autres plates-formes. Cela est dû à l'utilisation par EGL d'EGL comme système de prise en charge pour gérer les contextes OpenGL ES / ES2, en particulier l'utilisation de la fonction eglSwapBuffers. Comme indiqué dans la documentation de la fonction "Le contenu des tampons auxiliaires n'est toujours pas défini après avoir appelé eglSwapBuffers".

La définition de l'attribut EGL_SWAP_BEHAVIOUR de la surface sur EGL_BUFFER_PRESERVED n'est pas possible pour SDL car il nécessite EGL 1.4, disponible uniquement au niveau de l'API, de sorte que la seule solution de contournement disponible sur cette plate-forme consiste à redessiner la totalité de l'écran à chaque image.

Ibrahim CS
la source
Veuillez inclure un résumé des informations pertinentes à partir de ce lien et une explication de la façon dont les informations répondent à la question.
tyjkenn
... la question d'origine ne disait rien sur le rendu des "rectangles sales"?
Trevor Powell