QT игнорирует запрос на Desktop OpenGL на Linux, использует вместо этого OpenGL ES. Почему? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 QT игнорирует запрос на Desktop OpenGL на Linux, использует вместо этого OpenGL ES. Почему? [закрыто]

Сообщение Anonymous »

Я пытаюсь построить и запустить приложение OpenGL на основе QT на моем настольном компьютере Linux. Машина управляет атомным дистрибутом баззита, поэтому мне пришлось создать среду разработки в Distobox, которая является Ubuntu 24.04.2 LTS. 120 .
Я подозреваю, что это из -за используемой версии OpenGL, о которой сообщается GlgetString (GL_Version) как OpenGL ES 3.2 nvidia 580.76.05 . Это удивительно, поскольку я понимаю, что OpenGL ES предназначен для встроенных устройств с ограниченным ресурсом, поэтому не нужно на своем рабочем столе с полным выделенным графическим процессором. QT_OPENGL = Desktop в среде, но ни одна из этих работ, и я все еще получаю OpenGL ES. Это, в сочетании с этим ответом, заставляет меня поверить, что QT вообще не обнаруживает поддерживаемую настольную версию OpenGL. glewissupported ("gl_version_3_0") и glewissupported ("gl_version_4_0") все возвращают true. У меня также есть еще одно приложение OpenGL без QT, которое может хорошо работать в контейнере DistorBox, и это возвращает версию OpenGL 4.6.0. < /P>
Я остаюсь очень запутанным. Есть ли причина, по которой QT не может использовать основной профиль OpenGL? Этот проект очень большой и не мой, поэтому я не знаю обо всех местах, где можно запускать код QT, связанный с OpenGL.int main(int argc, char* argv[])
{
QSurfaceFormat format;
format.setDepthBufferSize(24);
format.setSamples(4);
QSurfaceFormat::setDefaultFormat(format);

// This is where I added the Qt::AA_UseDesktopOpenGL
// attribute when testing. It did not help.
QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);

// Disable Qt OpenGL buglist; since we require desktop OpenGL 2.1 there's no point in
// having Qt disable it (also we've had reports of some Intel drivers being blocked that
// actually work with TB.)
qputenv("QT_OPENGL_BUGLIST", ":/opengl_buglist.json");
}
< /code>
static void initializeGlew()
{
glewExperimental = GL_TRUE;
if (const auto glewState = glewInit(); glewState != GLEW_OK && glewState != GLEW_ERROR_NO_GLX_DISPLAY)
{
throw RenderException{fmt::format(
"Error initializing glew: {}",
reinterpret_cast(glewGetErrorString(glewState)))};
}
}

bool GLContextManager::initialize()
{
if (!m_initialized)
{
m_initialized = true;

initializeGlew();

GLVendor = reinterpret_cast(glGetString(GL_VENDOR));
GLRenderer = reinterpret_cast(glGetString(GL_RENDERER));
GLVersion = reinterpret_cast(glGetString(GL_VERSION));
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... nstead-why
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»