es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Vida útil del controlador de visualización EGL vs Vida útil del objeto estático.

Estoy depurando un segfault-on-exit que sospecho que se debe a un cambio reciente en nuestra configuración de renderizado fuera de pantalla de OpenGL a través de EGL. Todo se ejecuta en Ubuntu con gráficos integrados de Intel. El segfault solo aparece cuando se incluye y se utiliza highgui de OpenCV. Probablemente esto solo sea la punta del iceberg, por así decirlo, y el problema parece provenir de la duración de los objetos.

Tenemos una clase EGLContext que gestiona todo lo relacionado con EGL. Esto significa elegir un identificador de archivo dev/dri/xyz para el dispositivo que se va a utilizar y luego obtener un identificador de pantalla. Utilizamos las extensiones EGL_EXT_platform_base, EGL_EXT_platform_device, EGL_EXT_device_base, EGL_EXT_device_query y EGL_EXT_device_enumeration.

Duración del identificador de pantalla `EGLDisplay`

Este EGLContext solía funcionar bien, sin embargo, desde una optimización reciente, es propiedad de un objeto estático y, por lo tanto, se destruye mucho más tarde que antes. En el destructor, llamamos a eglDestroyContext() y eglTerminate(), ambos devuelven un error EGL_BAD_DISPLAY. ¿Existe una duración inherente a estos identificadores, que es más corta que la de los objetos estáticos? En ninguna parte de nuestro código destruimos la conexión de pantalla antes de este momento.

Identificador de pantalla `EGL_PLATFORM_DEVICE_EXT`

Mientras depuraba el problema anterior, noté que obtenemos identificadores de pantalla diferentes en cada llamada a eglGetPlatformDisplayEXT(EGL_PLATFORM_DEVICE_EXT, devicedrm, display_attr). Los documentos de la extensión indican que:

Múltiples llamadas a eglGetPlatformDisplayEXT con el mismo <platform> y <native_display> devolverán el mismo identificador EGLDisplay.

¿Alguien sabe cuál podría ser la causa de esto? ¿Me estoy perdiendo algo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con la violación de segmento al salir puede estar relacionado con los ciclos de vida de los objetos en el código que gestiona todo lo relacionado con EGL a través de la clase EGLContext. La propiedad estática del objeto EGLContext puede estar causando un retraso en el destructor, lo que provoca errores al llamar a eglDestroyContext() y eglTerminate().

    Respecto al identificador de pantalla EGL_PLATFORM_DEVICE_EXT, en la documentación de la extensión se indica que múltiples llamadas a eglGetPlatformDisplayEXT con la misma plataforma y pantalla nativa deben devolver el mismo identificador EGLDisplay. El hecho de que se devuelvan identificadores diferentes sugiere que puede haber un problema con la pantalla nativa o con los parámetros que se pasan a la función. Puede ser necesario realizar una investigación adicional para determinar la causa raíz de este problema.

Comments are closed.