SDL_video.h

Función SDL_GL_GetProcAddress

Sintaxis

void* SDL_GL_GetProcAddress(const char *proc);

Descripción

Obtiene una función OpenGL mediante el nombre.

Parámetros

proc
El nombre de la función OpenGL.

Valor de retorno

Devuelve un puntero a la función OpenGL nombrada. El puntero devuelto debe convertirse a la firma de función apropiada.

Observaciones

Si la librería GL es cargada en tiempo de ejecución con SDL_GL_LoadLibrary(), entonces todas las funciones GL deben ser recuperadas de esta manera. Normalmente esto se utiliza para recuperar punteros de función a extensiones OpenGL.

Hay algunas peculiaridades en la búsqueda de funciones OpenGL que requieren un cuidado extra por parte de la aplicación. Sin embargo, si se codifica con cuidado, se pueden manejar estas peculiaridades sin ningún código específico de la plataforma:

En Windows, los punteros de función son específicos del contexto GL actual; esto significa que se necesita haber creado un contexto GL y hacerlo actual antes de llamar a SDL_GL_GetProcAddress(). Si se vuelve a crear su contexto o se crea un segundo contexto, se debe asumir que cualquier puntero de función existente no es válido para usarlo con él. Esta es (actualmente) una limitación específica de Windows, y en la práctica muchos controladores no sufren esta limitación, pero sigue siendo la forma en que la API wgl está documentada para funcionar y se deberían esperar cuelgues si no se respeta. Se debe almacenar una copia de los punteros de función que van y vienen con el periodo de duración del contexto.

En X11, los punteros de función devueltos por esta función son válidos para cualquier contexto, e incluso pueden buscarse antes de que se cree un contexto. Esto significa que, al menos para algunas implementaciones comunes de OpenGL, si se busca una función que no existe, obtendrá un resultado no NULL que NO es seguro llamar. Siempre debe asegurarse de que la función está realmente disponible para un contexto GL dado antes de llamarla, comprobando la existencia de la extensión apropiada con SDL_GL_ExtensionSupported(), o verificando que la versión de OpenGL que está utilizando ofrece la función como funcionalidad básica.

Algunos controladores OpenGL, en todas las plataformas, devolverán NULL si una función no está soportada, pero no se puede contar con este comportamiento. Hay que comprobar las extensiones que se utilizan, y si de todas formas se obtiene un NULL, actúar como si esa extensión no estuviera disponible. Esto es probablemente un bug en el driver, pero se puede codificar defensivamente para este escenario de todas formas.

Sólo porque se esté en Linux/Unix, no se debe asumir que se va a usar X11. Los servidores de visualización de próxima generación están esperando para reemplazarlo, y pueden o no hacer las mismas promesas sobre los punteros de función.

Los punteros de función OpenGL deben declararse APIENTRY como en el código de ejemplo. Esto asegurará que se sigue la convención de llamada adecuada en las plataformas en las que esto importa (Win32), evitando así la corrupción de la pila.