46 votes

HW accéléré de l'activité - comment obtenir une texture OpenGL limite de taille?

Je suis en train d'activer l'accélération matérielle en Nid d'abeille, et l'affichage de certaines images sur la Toile. Tout fonctionne très bien, mais pour les grandes images bitmap (>2048 dans une seule dimension), j'obtiens l'erreur dans le log:

OpenGLRenderer: Bitmap trop volumineux pour être envoyé dans une texture

Je sais que c'est à cause de hw limitation, et peut travailler autour de cela, en réduisant max taille du bitmap à afficher si l'accélération matérielle est activée (vérification par la Vue.isHardwareAccelerated()).

Ma question est: comment faire pour déterminer facilement la taille maximale de texture disponible pour le dessin Bitmap par le matériel. 2048 semble être limite sur mon appareil, mais il peut être différent sur d'autres.

Edit: je ne suis pas la création d'OpenGL app, juste normal de l'application, qui peut utiliser l'accélération matérielle. Donc je ne suis pas familier avec OpenGL à tous, je viens de voir OpenGL d'erreur lié dans le journal, et de chercher à le résoudre.

66voto

Romain Guy Points 57114

Actuellement, la limite minimum est 2048px (c'est à dire le matériel doit soutenir les textures au moins 2048x2048.) Dans ICS, nous allons introduire une nouvelle API sur la Toile de la classe qui va vous donner cette information:
Canvas.getMaximumBitmapWidth() et Canvas.getMaximumBitmapHeight().

6voto

VinceFR Points 1693

Si vous voulez savoir dynamiquement la taille de texture maximale de votre appareil (parce que c'est changer en fonction de l'appareil), vous devez appeler cette méthode:

int[] maxTextureSize = new int[1];
gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxTextureSize, 0);

Et n'oubliez pas que pour certains appareils (le Nexus One par exemple), la taille de la texture doit être une puissance de 2 !

Je sais que ma réponse arrive longtemps après la dernière mise à jour de ce sujet...désolé

3voto

K-ballo Points 44794

Selon le cahier des charges, appel glGetIntegerv avec GL_MAX_TEXTURE_SIZE.

GL_MAX_TEXTURE_SIZE params renvoie une valeur. La valeur donne une estimation approximative de la plus grande texture que le GL peut gérer. La valeur doit être d'au moins 64.

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X