jeudi 18 septembre 2008
OpenGL Texture Proxy
jeudi 18 septembre 2008 - Geek
Pour savoir si une texture va tenir en mémoire, la FAQ d'OpenGL nous propose d'utiliser GL_TEXTURE_PROXY, mais leur technique ne marche pas toujours. Je décris rapidement la technique :
glTexImage2D (GL_PROXY_TEXTURE_2D, level, internalFormat,
width, height, border,
format, type, NULL);
En gros tout est normal sauf target qui devient GL_PROXY_TEXTURE_* et pixels qui est NULL. Inutile de balancer les pixels, on ne fait qu'évaluer la place en mémoire que prendra l'image au format donné. La FAQ nous dit qu'on peut ensuite savoir si ça a marché avec :
GLint width;
glGetTexLevelParameteriv (GL_PROXY_TEXTURE_2D, 0,
GL_TEXTURE_WIDTH, &actual_width);
if (actual_width == 0) {
/* La texture ne tiendra pas en mémoire */
}
Seulement chez moi ça n'a pas marché. Après avoir lancé GDB, je me suis rendu compte que parfois actual_width contient une valeur qui n'est ni 0, ni width ! J'ai donc réécrit le test qui fonctionne beaucoup mieux ainsi :
if (actual_width != width) {
/* La texture ne tiendra pas en mémoire */
}
Pour plus de détails :