Я пытаюсь запустить простой пример для настройки контекста EGL в контейнере docker. Однако я продолжаю получать это сообщение об ошибке:
Detected 0 devices
terminate called after throwing an instance of 'std::runtime_error'
what(): EGL error 0x300c at eglGetDisplay
Aborted
В основном, eglQueryDevicesEXT
возвращает 0, а eglGetPlatformDisplayEXT
возвращает код ошибки 0x300c (EGL_BAD_PARAMETER)
.
Я пробовал:
- Ubuntu 16.04 docker на Macbook Pro
- Ubuntu 16.04 docker на сервере Ubuntu 16.04 с графическим процессором Nvidia
В этих docker средах , Я установил openGL
и ELG
, используя apt-get install libgl1-mesa-dev
и apt-get install libegl1-mesa-dev
. CMake может найти компоненты GL::GL
и EGL::EGL
.
Я пробовал создать ссылку на libEGL.so
как вручную, так и используя find_package
в CMake.
Это сводит меня с ума! Я не могу понять, почему EGL не может обнаруживать устройства? Как я могу исправить эту ошибку?
Вот мой полный код. Я также пробовал EGLDisplay eglDpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
, что дает мне ту же ошибку. Спасибо!
#include <EGL/egl.h>
#include <EGL/eglext.h>
void assertEGLError(const std::string& msg) {
EGLint error = eglGetError();
if (error != EGL_SUCCESS) {
std::stringstream s;
s << "EGL error 0x" << std::hex << error << " at " << msg;
throw std::runtime_error(s.str());
}
}
int main(int argc, char *argv[])
{
// 1. Initialize EGL
// EGLDisplay eglDpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
int deviceID = 0; // TODO hardcode
EGLDisplay eglDpy;
EGLConfig config;
EGLContext context;
EGLint num_config;
static const int MAX_DEVICES = 16;
EGLDeviceEXT eglDevs[MAX_DEVICES];
EGLint numDevices;
PFNEGLQUERYDEVICESEXTPROC eglQueryDevicesEXT =
(PFNEGLQUERYDEVICESEXTPROC)eglGetProcAddress("eglQueryDevicesEXT");
eglQueryDevicesEXT(MAX_DEVICES, eglDevs, &numDevices);
printf("Detected %d devices\n", numDevices);
PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT =
(PFNEGLGETPLATFORMDISPLAYEXTPROC)eglGetProcAddress("eglGetPlatformDisplayEXT");
// Choose device by deviceID
eglDpy = eglGetPlatformDisplayEXT(EGL_PLATFORM_DEVICE_EXT, eglDevs[deviceID], nullptr);
assertEGLError("eglGetDisplay");
return 0;
}