Как узнать версию opengl mac os

Обновлено: 30.06.2024

Я использую PyOpenGL на Mac. По умолчанию используется OpenGL 2.1 является. Однако, согласно моим исследованиям и OpenGL Extension Viewer, я должен быть в состоянии использовать OpenGL 4.1. Я пытаюсь передать QGLFormat в свой QGLWidget, как я видел это во многих потоках здесь, но контекстная версия не меняется. Если я попытаюсь заставить его, он скажет мне, что контекст недействителен. Я много экспериментировал - вот очень простой пример, который показывает мою проблему:

Есть идеи, в чем моя проблема? Я делаю что-то не так? Я использую macOS Sierra version 10.12.6. Я использую Qt версию 4.8.7, sip версию 4.19.3 и pyqt версию 4.12, если это имеет отношение к делу. Вот что говорит мне OpenGL Extension Viewer .

Любая помощь будет очень признательна!

Редактировать :

Я нашел здесь похожую проблему с C++. Я не знаю, как перевести решение на PyQt, но я посмотрю на это: Изменение версии контекста OpenGL для QGLWidgets в Qt 4.8.6 в OS X .

Редактировать 3 :

Я получаю следующий вывод при попытке (вторая версия) патча, предоставленного @ekhumoro:

qpyopengl.pro теперь исправлен правильно, но он все еще не работает для qgl.sip.

Обновление :

Вот содержание файла отклонения для qgl.sip:

Из любопытства я запустил configure-ng.py и попытался скомпилировать. Я получаю следующую ошибку:

2 ответа

Я пытаюсь скомпилировать свой объект QGLWidget для простой программы рисования, но получаю довольно странные ошибки, которые не могу понять. /home/gmercer/Qt/Projects/2dPainting/2dPainting/glwidget.cpp:11: error: undefined reference to `QGLFormat::QGLFormat(QFlags<QGL::FormatOption>, int)'.

Чтобы ответить на конкретный вопрос , касающийся перевода решения для Mac в Python: это невозможно сделать напрямую, поскольку привязки PyQt не обертывают виртуальный метод chooseMacVisual . Без этого нет никакого способа переопределить его, потому что Qt просто не может видеть никаких методов Python, которые PyQt не были предварительно определены как виртуальные.

Однако инструкции по сборке не совсем ясны и нацелены на PyQt-4.9.4. Поэтому я подготовил diff, с которым должно быть легче работать. Я не пытался скомпилировать его, потому что у меня нет доступа к системе Mac.

Чтобы применить патч, распакуйте последние источники PyQt4 OSX и компакт-диск в каталог. Затем скопируйте diff ниже и сохраните его как macgl.diff , а затем выполните эту команду:

Затем вы можете скомпилировать свой исправленный PyQt4, используя инструкции, показанные здесь:

UPDATE :

QGLWidget w = new QGLWidget(); w->makeCurrent(); QString str = w->format(); //error:no suitable conversion from QGLFormat to QString в приведенном выше коде : w->format(); //returns QGLFormat возвращаемый тип - QGLFormat , но я хочу скрыть его до QString , как мне это сделать.

Мои попытки рендеринга с высоким разрешением DPI на MacOS для моей игры Bitfighter всегда заканчиваются плохо, как масштабированная версия игры с низким разрешением. Игра использует SDL2 + OpenGL, и я правильно включил флаг окна SDL_WINDOW_ALLOW_HIGHDPI , а также сделал его HighDPI в Info.plist.

Как бы то ни было, запуск вашего кода на моем ноутбуке Windows 10 дает следующий результат:

Поэтому я подозреваю, что ваша проблема на самом деле может быть связана не с конкретной платформой, а с вашим вызовом myW.context().setFormat(glFormat) . Интересно, что я взглянул на документацию PyQt для QGLWidget , и, похоже, она отсутствует для setFormat(), что довольно бесполезно!

Глядя вместо этого на соответствующую документацию C++, похоже, что setFormat() на самом деле может быть вызван либо из самого объекта QGLWidget , либо из его дочернего объекта QGLContext. Поскольку вы вызываете его из QGLContext , оказывается , что контекст сбрасывается, что делает его недействительным. Решение состоит в том, чтобы вызвать myW.context().create() после установки формата, создав таким образом допустимый объект формата с новыми параметрами! Эта модификация будет выглядеть следующим образом:

Другой альтернативой является просто вызов setFormat() на уровне QGLWidget , что автоматически создает новый контекст , в результате чего это:

Тем не менее, все это предположения, так как у меня нет Mac, на котором я мог бы протестировать этот код. Дайте мне знать, если это решит проблему для вас, и надеюсь, что это поможет!

Похожие вопросы:

Я пытаюсь использовать QGLWidget в Qt 4.8.2. Я заметил, что контекст по умолчанию QGLWidget creates не показывает никаких выходных данных для OpenGL выше 3.1. В Qt wiki есть учебник , который.

Как сделать аппаратную накладку в Qt 5.1? Это то, что у меня есть до сих пор: QGLFormat fmt; fmt.setSamples(16); fmt.setOverlay(true); MainWidget w(fmt); w.show();.

Неделю назад я обновил свой OS до последней версии, так что GLEW, nVidia драйверов, g++, Qt и т. д. все они тоже были модернизированы. Это был день, когда мои QGLWidget s перестали показывать сырой.

Я пытаюсь скомпилировать свой объект QGLWidget для простой программы рисования, но получаю довольно странные ошибки, которые не могу понять.

Я пытаюсь закодировать проект OpenGL с Qt (v5.1.1) на OS X 10.9, в манере современной реализации конвейера. Однако я сталкиваюсь с некоторыми проблемами при перестройке программ из учебников.

QGLWidget w = new QGLWidget(); w->makeCurrent(); QString str = w->format(); //error:no suitable conversion from QGLFormat to QString в приведенном выше коде : w->format(); //returns QGLFormat.

Мои попытки рендеринга с высоким разрешением DPI на MacOS для моей игры Bitfighter всегда заканчиваются плохо, как масштабированная версия игры с низким разрешением. Игра использует SDL2 + OpenGL, и.

Я пытаюсь настроить свое задание из школы, но единственное руководство-для windows. Мы используем Qt для шейдеров, а я работаю через visual studio code и компилирую с terminal. Проблема в том, что.

Я начал немного увлекаться OpenGL, но все время получаю предупреждения! Почему, например, glutInit(&argc, arg); устарел в macOS 10.9? ('glutInit' является устаревшим: во-первых, устаревшие в.

Мой код полон предупреждений типа 'glTranslatef' является устаревшим: во-первых, устаревшие в macOS 10.14 - OpenGL API устаревшим. (Определите GL_SILENCE_DEPRECATION, чтобы заставить замолчать эти.

Подскажите пожалуйста, а что это значит для разработчика ?
Ну то есть, это точно такая же ситуация, как на windows, которая поддерживает по умолчанию opengl 1.1 и если надо использовапть функции из более поздних версий, то самому или через библиотеку указывать указатели на них.

Или же с macos какая то другая ситуация ?

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

OpenGL в MacOS
Народ, я в этом ноль. Надо просто чтобы в определенном окне игры моя прога при помощи использования.

Perl + OpenGL Как избавиться от повторного подключения библиотеки OpenGL в модулях
Доброго времени суток! Сегодня решил заняться программированием на языке Perl, используя.


Какая значительная разница между OpenGL ES 2.0 и OpenGL 3.3 при использовании в Qt
Привет всем! У меня видеокарта имеет поддержку 3.1 версию OpenGL, обновить хочу её с помощью.

OpenGL Ваша текущая конфигурация рабочего стола не поддерживает OpenGL Аппаратное ускорение.
всем здрасте ) скачал opengl extensions viewer решил проверить драйверы на видео карту.В.

Чем отличаются готовые сборки Qt под Win + MSVC с OpenGL и без OpenGL?
Ну вопрос собственно в том, что мне не очень понятно, что же в сборке кьюте без опен джел имеется.

Ну пока еще "трамваи ходют", приложения с OpenGL запускаются. Но давление давно уже мощнейшее "переходите на metal", (ихняя система). Напр в Xcode (штатной IDE) для metal и то и се, а для OpenGL ничего. И слышал действительно радостную весть - вышел metal под Вындоуз, т.е .вопрос с кросс-платформенностью решен. Видимо переползать придется, и довольно скоро, и лучше делать это охотно. Да и этот OpenGL давно уже задолбал своими глупыми шейдерами. И слышал действительно радостную весть - вышел metal под Вындоуз, т.е .вопрос с кросс-платформенностью решен . Ну это тоже сомнительная кроссплатформенность, а Unix'ы, а Android ? Да и этот OpenGL давно уже задолбал своими глупыми шейдерами.

Когда в остальных апи без них тоже никуда

на маке даже со сторонними загрузчиками выше 4.1 core не получить

а вообще OpenGL постепенно переходит в legacy, по сути он уже очень давно не обновлялся, а вулкан должен быть его развитием, но отпочковался в отдельный апи. На маке и вулкана нету нативного, moltenvk это трансляция в метал, а opengl без dsa и пайплайнов (core 4.3+) после них уже совсем не то. Анреал уже несколько мажорных версий (начиная с 25 или еще раньше, а актуальная 27, если говорить про 4) поддерживает ogl только для линукса, а на других платформах deprecated

на мобилках главенствует opengl es, который тоже никто не мешает дропнуть яблокам

Меня лично эти платформы совершенно не волнуют

Но личные пристрастия и кроссплатформенность, все таки немного разные вещи Я не против шейдеров, наоборот, я всегда с удовольствием их писал. Но боже мой, как бездарно это (система шейдеров) сделано в OpenGL :(

По сути да, может новые системы будут лучше, хотя кто знает..

Но личные пристрастия и кроссплатформенность, все таки немного разные вещи Согласен, но сидеть со старьем не выход, рано или поздно "жизнь заставит" Но боже мой, как бездарно это (система шейдеров) сделано в OpenGL Чем именно? У вулкана идентично, хотя пайплайн в целом хуже, нельзя на лету менять шейдеры, надо пересоздавать пайплайн (или командный буфер). На последних версиях opengl можно менять шейдеры у пайплайна, и шейдеры можно по одному компилировать.
Вулкан разве что, но он в разы сложнее и у мака в пролете опять.

Не смог найти, нахожу только новость про выпуск Metal Developer Tools for Windows 10, что не то, он позволяет разрабатывать на винде под яблоки и то не полноценно.
Из яблочных продуктов на другие ос перенесли только их язык swift (и то на винде работает пока коряво)

По настоящему кроссплатформенных апи сейчас нету. Им мог бы стать вулкан, но у него пока слабая поддержка на пк, много людей с древними картами (хотя на нвидии поддержка есть с 600 серии gtx), на андроиде только из нативного кода на плюсах есть доступ (джава/котлин похоже в пролете), на яблоках нету вообще (про moltenvk промолчу, это как запуск opengl es под виндой) и самый главный минус это очень сложная архитектура и многословность. Если на opengl можно нарисовать тот же треугольник от десятка (на 1 версии) до сотни (на последних версиях) строк кода, то на вулкане это займет под 1000 уже.

И получается сейчас зачем графику кодить? Только для общего развития. Игры лучше создавать на готовых движках, а то завязнешь в написании низкоуровнего кода (а не игровой логики) и внешне выглядеть будет хуже.

Но он по-прежнему выводит GL версии 2.1 и GLSL версии 1.2. и продолжайте говорить мне, что языковая версия GLSL не поддерживается. Есть ли вероятность того, что какая-то другая часть кода может изменить этот параметр, чтобы OpenGL оставался на своей первоначальной версии для Mac.

Решение

Неправильные версии OpenGL могут быть результатом нежелательного расстановки приоритетов графических процессоров.

Попробуйте проверить GL_VENDOR а также GL_RENDERER , Возвращает ли имя желаемого графического процессора?

Windows

Nvidia

Перейдите в «Панель управления NVIDIA» (обычно доступно в контекстном меню, если щелкнуть правой кнопкой мыши на рабочем столе). Затем в разделе «Настройки 3D» -> «Управление настройками 3D». Здесь вам будут представлены варианты выбора предпочитаемого графического процессора.

AMD

Перейдите в «Свойства графики» (обычно доступно в контекстном меню, если щелкнуть правой кнопкой мыши на рабочем столе). Затем в «Power» -> «PowerPlay» установите «Подключен» и «Аккумулятор» на «Максимальная производительность».

Если доступны «Переключаемые параметры графического приложения», вы также можете применить «Высокая производительность».

Intel

После этого перейдите в панель управления для вашего GPU.

макинтош

Перейдите в «Экономия энергии» и отмените выбор «Автоматическое переключение графики».

Если проблема не устранена Сначала убедитесь, что компьютер действительно может найти нужный графический процессор. Во-вторых, проверьте, включены ли какие-либо настройки энергосбережения. Наконец, также проверьте, есть ли какие-либо обновления драйверов.

Ресурсы

Другие решения

Это может быть потому, что ваше приложение использует устаревший профиль opengl вместо основного профиля.

Пожалуйста, проверьте свои графические аппаратные возможности из таблицы возможностей OpenGL

  • OpenGL 2.1 (Legacy), 3.3-4.1 (Core)
  • GLSL 1.2 (Legacy), 3.3-4.1 (Core)

Таким образом, всякий раз, когда ваша программа использует устаревший режим, она всегда даст вам OpenGL 2.1 / GLSL 1.2

OpenGL является открытым, межплатформенным графическим стандартом с широкой отраслевой поддержкой. OpenGL значительно упрощает задачу записи 2D или 3D графических приложений в реальном времени путем обеспечения старого, хорошо задокументированного конвейера обработки графики, поддерживающего абстракцию текущих и будущих аппаратных акселераторов.

../art/cpu_gpu.jpg

Сразу

OpenGL является отличным выбором для графической разработки на платформе Macintosh, потому что это предлагает следующие преимущества:

Надежная Реализация. Аппаратные средства кратких обзоров клиент-серверной модели OpenGL детализируют и гарантируют непротиворечивое представление любой совместимой аппаратной и программной конфигурации. Каждая реализация OpenGL придерживается спецификации OpenGL и должна пройти ряд тестов соответствия.

Производительность. Приложения могут использовать значительное питание аппаратного обеспечения машинной графики улучшить скорости рендеринга и качество.

Отраслевое принятие. Спецификацией для OpenGL управляет Khronos Group, отраслевой консорциум, элементы которого включают многие крупнейшие компании в отрасли компьютерной графики, включая Apple. В дополнение к OpenGL для OS X существуют реализации OpenGL для Windows, Linux, Irix, Соляриса и многих игровых приставок.

OpenGL является независимый от платформы API на базе С

Поскольку OpenGL является API на базе С, это чрезвычайно переносимо и широко поддерживается. Как API C, это интегрируется беспрепятственно с базируемыми приложениями Какао Objective C. OpenGL обеспечивает функции Ваше использование приложения для генерации 2D или 3D изображений. Ваше приложение представляет представленные изображения экрану или копирует их назад в его собственную память.

Спецификация OpenGL не обеспечивает собственный уровень работы с окнами. Это полагается на функции, определяемые OS X для интеграции получения OpenGL с системой управления окнами. Ваше приложение создает OS X контекст рендеринга OpenGL и присоединяет цель рендеринга к нему (известный как drawable объект). Контекст рендеринга управляет изменения состояния OpenGL и объекты, создаваемые вызовами к OpenGL API. drawable объект является конечным местом назначения для команд рисования OpenGL и обычно связывается с окном Cocoa или представлением.

Соответствующие главы: OpenGL на платформе Mac

Различные места назначения рендеринга требуют различных команд установки

В зависимости от того, намеревается ли Ваше приложение нарисовать содержание OpenGL к окну, нарисовать на весь экран или выполнить внеэкранную обработку изображений, это предпринимает различные шаги, чтобы создать контекст рендеринга и связать его с drawable объектом.

OpenGL на Macs существует в неоднородной среде

Macs поддерживают различные типы графических процессоров, каждого с различными возможностями рендеринга, поддерживая версии OpenGL от 1.x до OpenGL 3.2. При создании контекста рендеринга приложение может принять широкий диапазон средств рендеринга, или оно может ограничить себя устройствами с определенными возможностями. Как только у Вас есть контекст, можно сконфигурировать, как тот контекст выполняет команды OpenGL.

OpenGL на Mac не является только неоднородной средой, но и это - также динамическая среда. Пользователи могут добавить или демонтировать дисплеи, или взять ноутбук, работающий на заряде батареи, и включить его в стену. Когда может измениться графическая среда на изменениях Mac, средство рендеринга, связанное с контекстом. Ваше приложение должно обработать эти изменения и корректироваться, как оно использует OpenGL.

OpenGL помогает приложениям использовать питание графических процессоров

Графические процессоры являются в широком масштабе параллелизированными устройствами, оптимизированными для графических операций. Получить доступ к той вычислительной мощности добавляет дополнительные издержки, потому что данные должны переместиться от Вашего приложения до GPU по более медленным внутренним шинам. Доступ к тем же данным одновременно и из Вашего приложения и из OpenGL обычно ограничивается. Для получения высокой эффективности в приложении необходимо тщательно разработать приложение для питания данных и команд к OpenGL так, чтобы аппаратное обеспечение машинной графики работало параллельно с приложением. Плохо настроенное приложение может остановиться или на CPU или на GPU, ожидающем другого, чтобы закончить обрабатывать.

Когда Вы готовы оптимизировать производительность своего приложения, Apple обеспечивает и и специфичные для OpenGL профильные инструменты общего назначения, упрощающие изучать, где Ваше приложение проводит свое время.

Параллелизм в приложениях OpenGL требует дополнительного усилия

Много поставок Macs с многократными процессорами или многократными ядрами и будущими аппаратными средствами, как ожидают, добавят больше из каждого. Разработка приложений для использования в своих интересах многопроцессорной обработки критически важна. OpenGL устанавливает дополнительные ограничения для многопоточных приложений. Если Вы намереваетесь добавить параллелизм к приложению OpenGL, необходимо гарантировать, что приложение не получает доступ к тому же контексту от двух различных потоков одновременно.

Соответствующие главы: параллелизм и OpenGL

Настройка производительности позволяет Вашему приложению обеспечивать исключительный пользовательский опыт

Как только Вы улучшили производительность своего приложения OpenGL и использовали в своих интересах параллелизм, поместили часть освобожденной вычислительной мощности для работы на Вас. Более высокие текстуры разрешения, подробные модели, и более сложное освещение и штриховка алгоритмов могут улучшить качество изображения. Полная сцена, сглаживающаяся на современном аппаратном обеспечении машинной графики, может устранить многие «неровности», распространенные на более низких изображениях разрешения.

Как использовать этот документ

Если Вы никогда не программировали в OpenGL на Mac, необходимо считать эту книгу полностью, начиная с OpenGL на Платформе Mac . Критическая терминология Mac определяется в той главе, а также в Глоссарии .

Если Вы уже имеете приложение OpenGL, работающее на Mac, но еще не обновили его для OS X v10.7, считайте Renderer Выбора и Buffer Attributes , чтобы изучить, как выбрать профиль OpenGL для Вашего приложения.

Чтобы узнать, как обновить существующее приложение OpenGL для высокого разрешения, посмотрите Оптимизацию OpenGL для Высокого разрешения .

Как только у Вас есть содержание OpenGL в Вашем приложении, считайте Стратегии Проектирования приложений OpenGL изучить фундаментальные образцы для реализации высокоэффективных приложений OpenGL и глав, следующих, чтобы изучить, как применить те образцы к определенным проблемам OpenGL.

Важный: Несмотря на то, что это руководство описывает, как создать контексты рендеринга, поддерживающие OpenGL 3.2, большинство примеров кода и обсуждения в остальной части книги описывают более ранние устаревшие версии OpenGL. Посмотрите Обновление Приложения для Поддержки Спецификации Ядра OpenGL 3.2 для получения дополнительной информации о миграции приложения к OpenGL 3.2.

Предпосылки

Это руководство предполагает, что Вы имеете некоторый опыт с программированием OpenGL, но хотите изучить, как применить те знания для создания программного обеспечения для Mac. Несмотря на то, что это руководство предоставляет консультацию при оптимизации кода OpenGL, это не предоставляет информацию начального уровня о том, как использовать OpenGL API. Если Вы незнакомы с OpenGL, необходимо считать OpenGL на Платформе Mac , чтобы получить обзор OpenGL на платформе Mac, и затем считать следующее руководство по программированию OpenGL и справочные документы:

Руководство по программированию OpenGL , Дэйвом Шрейнером и Рабочей группой OpenGL Khronos; иначе известный как «Красная книга”.

Язык Штриховки OpenGL, Рэнди J. Rost, превосходное руководство для тех, кто хочет записать программы, вычисляющие поверхностные свойства (также известный как программы построения теней).

Прежде, чем считать этот документ, необходимо быть знакомы с окнами Cocoa и представлениями, как представлено в Руководстве по программированию Руководства по программированию и Представления Окна.

См. также

Сохраните эти справочные документы удобными, поскольку Вы разрабатываете свою программу OpenGL для OS X:

Ссылка CGL описывает низкоуровневые функции, которые могут использоваться для создавания полноэкранных приложений OpenGL.

Руководство по Расширениям OpenGL предоставляет информацию о расширениях OpenGL, поддерживаемых в OS X.

Спецификация OpenGL предоставляет подробную информацию о том, как реализация OpenGL, как ожидают, обработает каждую команду OpenGL.

Ссылка OpenGL описывает основную библиотеку OpenGL.

Ссылка GLU OpenGL описывает Библиотеку Утилиты OpenGL, содержащую функции удобства, реализованные поверх OpenGL API.

OpenGL Ссылка GLUT описывает Инструментарий Утилиты OpenGL, межплатформенная работа с окнами API.

OpenGL Код API и Учебные Списки обеспечивает примеры кода для фундаментальных задач, таких как моделирование и отображение текстур, а также для усовершенствованных методов, таких как рендеринг расширенного динамического диапазона (HDRR).

Читайте также: