He estado usando GLAD con SFML durante algún tiempo y he estado usando el cargador de funciones incorporado de GLAD, gladLoadGL que funcionó bien para mí. Ahora estoy viendo GLFW y dice tanto en su guía como en el wiki de opengl de Khronos que deberías usar gladLoadGLLoader((GLADloadproc) glfwGetProcAddress) en su lugar. ¿Existe alguna razón en particular para ello?

2
kiroma 27 jul. 2020 a las 20:35

1 respuesta

La mejor respuesta

¿Existe alguna razón en particular para ello?

El uso de gladLoadGL junto con, por ejemplo, GLFW da como resultado tener dos partes de código en el mismo programa que básicamente hacen lo mismo, sin tener ningún beneficio.

Por ejemplo, consulte qué hace GLFW en Windows (es similar en las otras plataformas):

_glfw.wgl.instance = LoadLibraryA("opengl32.dll");

Carga dinámicamente la biblioteca GL a sus espaldas. Y proporciona una abstracción para consultar punteros de función OpenGL (los del núcleo y los de extensión, utilizando tanto wglGetProcAddress como sin formato GetProcAdress).

GL loader genera hace lo mismo cosas:

    libGL = LoadLibraryW(L"opengl32.dll");

Ahora, uno podría argumentar que cargar la misma biblioteca compartida dos veces no es un gran problema, ya que esto debería resultar en la reutilización de los mismos identificadores internos y se trata mediante el recuento de referencias, pero aún así, es solo un código innecesario, y aún así consume memoria y algo de tiempo durante la inicialización.

Entonces, a menos que tenga una razón muy específica por la que necesitaría el código de glad, tal vez en una forma modificada para hacer realmente otra cosa (como usar una biblioteca GL diferente a la que su sistema usaría por defecto), no hay un caso de uso para este código, y parece una recomendación razonable no incluir código que no sea necesario.

Como nota al margen: a menudo veo proyectos que usan GLFW y cargadores GL como GLAD o GLEW vinculando opengl32.lib o libGL.so en el momento del enlace; esto también es absolutamente innecesario, ya que el código siempre cargará las bibliotecas en tiempo de ejecución. manualmente, y no debería quedar ningún símbolo GL en el momento del enlace que el enlazador podría resolver desde la biblioteca GL de todos modos.

3
genpfault 27 jul. 2020 a las 19:38