para descargar como activar opengl glew

descargar - Usar extensiones OpenGL en Windows



opengl windows 10 64 bits (4)

Quiero usar las funciones expuestas bajo las extensiones OpenGL. Estoy en Windows, ¿cómo hago esto?


@Kronikarz: por lo que parece, GLEW parece ser el camino del futuro. NVIDIA ya lo envía junto con su OpenGL SDK . Y su último lanzamiento fue en 2007 en comparación con GLEE, que fue en 2006.

Pero el uso de ambas bibliotecas parece casi igual para mí. (GLEW tiene un init () que necesita ser llamado antes que cualquier otra cosa). Por lo tanto, no necesita cambiar a menos que encuentre alguna extensión que no sea compatible con GLEE.


GL3W es una secuencia de comandos de dominio público que crea una biblioteca que carga solo la funcionalidad principal para OpenGL 3/4. Se puede encontrar en github en:

https://github.com/skaslev/gl3w

GL3W requiere Python 2.6 para generar las bibliotecas y encabezados para OpenGL; no requiere Python después de eso.


Una ''razón muy fuerte'' para no usar GLEW podría ser que la biblioteca no es compatible con su compilador / IDE. Por ejemplo: Borland C ++ Builder.

En ese caso, es posible que desee reconstruir la biblioteca desde el origen. Si funciona, genial, de lo contrario, la carga manual de la extensión no es tan mala como lo hace el sonido.


Solución fácil : use GLEW . Mira cómo aquí .

Solución difícil : si tiene una razón muy fuerte para no usar GLEW, aquí le mostramos cómo lograr lo mismo sin ella:

Identifique la extensión de OpenGL y las API de extensión que desea usar. Las extensiones de OpenGL se enumeran en el OpenGL Extension Registry .

Ejemplo: deseo utilizar las capacidades de la extensión EXT_framebuffer_object . Las API que deseo utilizar desde esta extensión son:

glGenFramebuffersEXT() glBindFramebufferEXT() glFramebufferTexture2DEXT() glCheckFramebufferStatusEXT() glDeleteFramebuffersEXT()

Compruebe si su tarjeta gráfica es compatible con la extensión que desea utilizar. Si lo hace, ¡entonces su trabajo está casi listo! Descargue e instale los últimos controladores y SDK para su tarjeta gráfica.

Ejemplo: la tarjeta gráfica en mi PC es una NVIDIA 6600 GT . Por lo tanto, visito la página web de las especificaciones de extensión de NVIDIA OpenGL y encuentro que la extensión EXT_framebuffer_object es compatible. Luego descargo el último SDK de NVIDIA OpenGL e lo instalo.

El fabricante de su tarjeta gráfica proporciona un archivo de encabezado glext.h (o un archivo de encabezado con el mismo nombre) con todas las declaraciones necesarias para usar las extensiones OpenGL admitidas. (Tenga en cuenta que no todas las extensiones pueden ser compatibles.) Coloque este archivo de encabezado en algún lugar donde el compilador pueda recogerlo o incluya su directorio en la lista de directorios de inclusión de su compilador.

Agregue una línea #include <glext.h> en su código para incluir el archivo de encabezado en su código.

Abra glext.h , encuentre la API que desea usar y obtenga su correspondiente declaración fea .

Ejemplo: busco las API de framebuffer anteriores y encuentro sus correspondientes declaraciones feas:

typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); for GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *);

Todo esto significa que su archivo de encabezado tiene la declaración de API en 2 formularios. Uno es una declaración de puntero de función fea similar a wgl. La otra es una declaración de función de aspecto sano.

Para cada API de extensión que desee utilizar, agregue las declaraciones de código del nombre de la función como un tipo de cadena de aspecto feo.

Ejemplo:

PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT; PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT; PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT; PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT; PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;

Aunque parece feo, todo lo que hacemos es declarar punteros de función del tipo correspondiente a la API de extensión.

Inicialice estos punteros de función con sus funciones correctas. Estas funciones están expuestas por la biblioteca o el controlador. Necesitamos usar la función wglGetProcAddress () para hacer esto.

Ejemplo:

glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) wglGetProcAddress("glGenFramebuffersEXT"); glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) wglGetProcAddress("glBindFramebufferEXT"); glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) wglGetProcAddress("glFramebufferTexture2DEXT"); glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) wglGetProcAddress("glCheckFramebufferStatusEXT"); glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) wglGetProcAddress("glDeleteFramebuffersEXT");

No olvide verificar los punteros de función para NULL . Si por casualidad wglGetProcAddress () no pudiera encontrar la función de extensión, habría inicializado el puntero con NULL.

Ejemplo:

if (NULL == glGenFramebuffersEXT || NULL == glBindFramebufferEXT || NULL == glFramebufferTexture2DEXT || NULL == glCheckFramebufferStatusEXT || NULL == glDeleteFramebuffersEXT) { // Extension functions not loaded! exit(1); }

Eso es todo, ¡hemos terminado! Ahora puede usar estos punteros de función como si las llamadas a funciones existieran.

Ejemplo:

glGenFramebuffersEXT(1, &fbo); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, colorTex[0], 0);

Referencia: Moving Beyond OpenGL 1.1 para Windows por Dave Astle: el artículo está un poco anticuado, pero tiene toda la información que necesita para comprender por qué esta patética situación existe en Windows y cómo evitarla.