2017-09-05 1 views
0

dans Android texImage2D (https://developer.android.com/reference/android/opengl/GLUtils.html) nous avons ces 2 fonctions:android opengl texImage2D: paramètres de internalformat et le type

void texImage2D (int target, 
       int level, 
       Bitmap bitmap, 
       int border) 

void texImage2D (int target, 
       int level, 
       int internalformat, 
       Bitmap bitmap, 
       int type, 
       int border) 

un n'a pas besoin du internalformat et de type et l'autre fonction ont besoin . Quel pourrait être l'inconvénient de la première variante (celle qui n'a pas besoin du format interne et du type)? Si ce n'est pas un inconvénient, pourquoi l'autre variante existe-t-elle? Notez que je ne sais pas quel est le but de internalformat et de type, normalement dans mon programme OpenGL j'utilise toujours rgba comme internalformat et type.

Répondre

2

Le internal_format dans OpenGL est utilisé pour spécifier le format exact que chaque pixel devrait avoir en mémoire. `type 'spécifie quel format les données entrantes (dans android le bitmap) a.

La première version (celle qui n'a pas de paramètre de format interne) détermine le format interne et le type du bitmap.colorType().

Il n'y a pas vraiment de problème avec la première version de texImage2D, mais cela limite le format interne possible. Par exemple, il ne sera pas possible de créer des textures à virgule flottante, des textures 16 bits ou 32 bits ou des textures entières. Vous pouvez jeter un oeil à la getInternalFormat method qui détermine le format interne pour voir quels formats sont supportés. Si vous voulez un format interne qui n'est pas retourné là, il faut appeler texImage2D avec le format interne exact nécessaire.

+0

merci BDL! par ailleurs quel est l'avantage d'avoir des textures 16 ou 32 bits? – andrey

+0

Si vous voulez faire un rendu HDR ou beaucoup d'autres effets, vous en aurez besoin. Pour les textures de couleur "normales", 8 bits sont généralement suffisants. – BDL