Si se trata de una imagen splash de un solo cuadro sin animaciones, entonces no hay ningún daño al usar glDrawPixels
. Si el rendimiento es crucial y se le requiere usar una textura, entonces la forma correcta de hacerlo es determinar, en tiempo de ejecución, el tamaño de textura máximo soportado, utilizando una textura de proxy.
GLint width = 0;
while (0 == width) { /* use a better condition to prevent possible endless loop */
glTexImage2D(GL_PROXY_TEXTURE_2D,
0, /* mip map level */
GL_RGBA, /* internal format */
desiredWidth, /* width of image */
desiredHeight, /* height of image */
0, /* texture border */
GL_RGBA /* pixel data format, */
GL_UNSIGNED_BYTE, /* pixel data type */
NULL /* null pointer because this a proxy texture */
);
/* the queried width will NOT be 0, if the texture format is supported */
glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
desiredWidth /= 2; desiredHeight /= 2;
}
Una vez que se conoce el tamaño máximo de la textura con el apoyo de controlador OpenGL del sistema, que tienen al menos dos opciones si su imagen no encaja:
- mosaicos con la imagen: utilizar múltiples quads después dividiendo su imagen en trozos más pequeños soportados. El mosaico de imágenes para algo así como una pantalla de bienvenida no debería ser demasiado complicado. Puede usar el parámetro glPixelStorei de
GL_PACK_ROW_LENGTH
para cargar secciones de una imagen más grande en una textura.
- Cambio de tamaño de la imagen: cambie el tamaño de la imagen para que se ajuste al tamaño de la textura máxima admitida. Incluso hay una función auxiliar de GLU para hacer esto por usted, gluScaleImage.
'glDrawPixels' es realmente lento, ciertamente no lo usará. – d0k
De hecho arrojé glDrawPixels allí más por color ... :) – falstro