2011-12-19 12 views
5

Tengo un problema al actualizar mis encabezados GL. Básicamente quiero acceder a la función glCompressedTexImage2D pero mis encabezados gl son muy antiguos y no creo que esa función exista en esos encabezados. Así que traté de actualizar mi archivo gl.h, pero recibo muchos errores. Intenté actualizar mi software de tarjeta gráfica, entre otras cosas. ¿Alguien puede ser de ayuda?opengl, ¿cómo mejor actualizar los encabezados con Visual Studio?

Respuesta

3

Aparentemente, Windows está atascado en una versión anterior de OpenGL (1.2?). Intente utilizar GLEW o Glee para cargar la extensión necesaria (GL_ARB_TEXTURE_COMPRESSION en el caso de glCompressedTexImage2D). Estas bibliotecas cargarán las extensiones disponibles y le permitirán verificar su código si se carga o no una extensión en particular.

Ejemplo de alegría:

#include <gl/GLee.h>   

if (GLEE_ARB_TEXTURE_COMPRESSION) 
{ 
    glCompressedTexImage2D(...); 
} 
else 
{ 
    // the extension is not available, use a different method 
} 

Tenga en cuenta que GLEE no requiere inicializar explícitamente (a diferencia de GLEW). Recomiendo este método sobre la carga manual de un puntero a la función. No porque sea mi respuesta :), sino porque esto también se ocupará de averiguar si el hardware y su controlador son compatibles con la extensión (lo que podría ser muy desordenado), y es independiente de la plataforma.

+0

Tenga en cuenta que GLEE está desaparecida y ya no está actualizada. Se detuvo en GL 3.3; ha habido 6 versiones de OpenGL lanzadas desde entonces. Así que por mucho que le guste el estilo, no debe usarlo. Hay [una serie de alternativas para cargar funciones de OpenGL] (http://www.opengl.org/wiki/OpenGL_Loading_Library). –

+0

Gracias por el aviso. –

1

Usted necesita averiguar si el dispositivo actual es compatible con la función, y luego obtener la dirección de la función antes de que se le puede llamar:

PFNGLCOMPRESSEDTEXIMAGE2DPROC p = NULL; 
const char* string = glGetString(GL_EXTENSIONS); 

if (strstr(string, "GL_ARB_texture_compression") != NULL) 
    p = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)wglGetProcAddress("glCompressedTexImage2D"); 
5

estoy teniendo un poco de una actualización tema mis encabezados GL.

Eso es porque se supone que no debes hacer esto. En Windows, todo lo que esté más allá de OpenGL-1.1 se recopila a través del mecanismo de extensión. La forma más fácil de acceder a esto es a través del GLEW. Instale esto y use GL/glew.h en lugar del GL/gl.h normal. Luego, después de crear un contexto OpenGL, lo primero que llama es glewInit().

0

Ir a la: http://www.opengl.org/registry/ y descargar la versión más reciente de glext.h y wglext.h

Ahora usted será capaz de obtener manualmente puntero de función a las características que desea. En Windows solo hay OpenGL 1.1.

Para un principiante se sugiere emplear GLEW (GLEE también es grande, pero no ha sido actualizado desde hace mucho tiempo ...)

Cuestiones relacionadas