2017-10-04 5 views
1

Analyse comparative des temps de rendu du même ensemble de polygones avec:glDisable (GL_BLEND): pas d'impact sur les performances des dispositifs androïde

A) glEnable(GL_BLEND); 
    glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

B) glDisable(GL_BLEND); 
    glBlendFunc(GL_ONE, GL_ZERO); 

montre que le rendu avec le mélange en cours d'activation est en effet un peu plus lent sur la:

    bureau
  • , OpenGL 2.0
  • Lenovo P90Pro Intel Atom/PowerVR G6430, OpenGL ES 2,0

et à ma grande confusion, l'analyse comparative sur ces appareils montre pas de différence significative, ce qui signifie, je suppose, ce qui rend avec le mélange désactivé est que la performance coûteuse comme avec le mélange étant permis:

  • Samsung Galaxy Tab avec ARM-A7/Qualcomm Adreno 305 à bord
  • Sony Xperia Z3 + avec ARM-A57/Adreno 430

Pourquoi est-ce? Il devrait y avoir une différence, non? shader Fragment utilisé est assez simple:

precision highp float; 
uniform sampler2D tex; 
varying vec4 v_fragmentColor; 
varying vec2 v_texCoord; 

void main() { 
    gl_FragColor = v_fragmentColor * texture2D(tex, v_texCoord); 
} 

Désolé si la définition de la situation est trop générique, il est considérablement difficile de produire l'échantillon de travail minimal adapté à entrer dans la question SO. J'espère qu'il y a des pièges connus ici que j'ai manqués. Ps: sur chaque périphérique testé, l'image résultante ressemble à celle attendue, les zones de transparence avec le fondu étant activé et le noir opaque - si désactivé. toute la question concerne simplement la performance.

+0

Comment avez-vous mesuré? –

+0

Je ne suis pas un expert sur les graphiques, les GPUs etc., mais si vous activez "_endending avec blending disabled" est aussi performant que le blending étant activé_ "autour de" _endending avec blending enabled est ** pas plus ** performance- coûteux comme avec blending disabled_ "que ** (a) ** ça sonne mieux (c'est un plus, pas un problème), et ** (b) ** pour moi suggère que [sur ces appareils] il y a du matériel disponible pour" faire le mélange "comme une partie normale du rendu, donc en faire usage est effectivement libre. – TripeHound

+0

Peut-être dans les deux cas, vous voyez 60 fps, ce qui est la limite de pilote/matériel. Cela signifie que vous ne chargez pas suffisamment votre GPU pour voir la différence de performance. Essayez de rendre plusieurs images (des milliers?) Pour voir la différence. – Dave

Répondre

0

Même sans la connaissance des plates-formes que vous mentionnez, je peux dire par expérience que moins n'est pas toujours plus. Parfois, le branchement en code ou hw est plus lent que de faire une opération redondante. Imaginez une branche avant chaque ajout dans le cas où un opérande est 0. Ainsi, par exemple, lorsque vous choisissez glDisable (GL_BLEND), le pilote peut définir les paramètres func et eq afin que BEHAVES AS AS soit désactivé, alors que ce n'est pas le cas. Cela dépend de ce que le fournisseur essayait d'optimiser. "Le pire des cas" est souvent le meilleur pour optimiser, mais le cas courant est souvent aussi bon. Optimiser quelque chose d'inhabituel et de moins exigeant en performance en vaut rarement la peine. Pour l'enregistrement j'ai été aux plates-formes devenant 30-50% plus rapides avec le texturing activé que désactivé, mélangeant une texture 1x1 de pixel blanc avec la couleur primitive. C'était la première fois que j'y pensais, mais quand j'y ai réfléchi, la plate-forme avait été continuellement optimisée pour le rendu des cartes raster pendant près d'une décennie.