Тот же код QtOpenGL работает примерно в 15 раз медленнее при переходе на Carbon (против какао) - PullRequest
7 голосов
/ 06 декабря 2010

Я разрабатываю очень простое приложение для платформы Mac OSX, использующее Qt и OpenGL (и QtOpenGL), чтобы облегчить кроссплатформенность.
Приложение получает переменное количество видеопотоков, которые должны быть отображены на экране. Каждый кадр этих видеопотоков используется в качестве текстуры для отображения прямоугольника в трехмерном пространстве (очень похоже на видеостену). Помимо таких вещей, как получение, блокировка, загрузка видеоданных, синхронизация потоков ... Я считаю, что это довольно простое приложение.

Дело в том, что все работает нормально при использовании двоичных файлов Qt 4.7 на основе какао (по умолчанию) в Mac 10.5. Но мой код должен нормально работать на всех версиях OSX, начиная с (включая) до 10.4. Итак, я попробовал код на 10.4 машине, и он завис при запуске. После нескольких часов чтения в интернете я обнаружил, что для приложения Qt, нацеленного на 10,4, необходимо использовать углеродную основу на основе Qt. Поэтому я перестраиваю весь проект с новым фреймворком.
Когда запускается новый получившийся двоичный файл, все работает хорошо, за исключением того факта, что fps приложения падает примерно до 2 fps !! И он ведет себя одинаково на обеих машинах (10,5 компьютер имеет заметно лучшие функции) Я потратил много времени, работая над этим, но я не нашел решения. Любое предложение?

Больше информации о приложении и вещах, которые я пробовал

  • код не был изменен при перекомпиляции на основе углерода
  • используется только два (256x256 текстур) видео, чтобы гарантировать, что это не проблема ограничения полосы пропускания (хотя я знаю, что это не должно быть, потому что первый код сработал)
  • 2 видеопотока поступают из сети (локально)
  • при поступлении видеопотока выдается сигнал, и данные загружаются в текстуру OpenGL (glTexSubImage2D)
  • таймер делает рендеринг (paintGL) примерно на 20 мс (~ 50 кадров в секунду)
  • код рендеринга использует текстуры (обновленные или нет) для рисования прямоугольников.
  • рендеринг только при поступлении видео не будет работать из-за наличия 2 (асинхронных) видеопотоков; кроме того, на экране должно быть нарисовано больше вещей.
  • используются только базовые команды OpenGL (без PBO, FBO, VBO, ...). Единственной проблемной может быть использование шейдеров (доступно только из Qt 4.7), но его код тривиальный.
  • Я использовал OpenGLProfiler и инструменты. Ничего особенного / странного не наблюдалось.

Некоторые вещи, которые я подозреваю (выводы)

  • ясно, что это не аппаратная проблема. Один и тот же компьютер ведет себя по-разному
  • это дает мне ощущение, что это проблема многопоточности / блокировки, но почему?
  • углерод - 32 бита. Приложение 10.5 было 64. Оно не может развить 64 бит в углероде.
  • для выдачи 32-битной возможной причины, я также перестроил первый проект для 32-битной. Он работал частично так же.
  • Я прочитал кое-что о углероде, имеющем проблемы (больше, чем обычно) с переключением контекста.
  • может быть, реализация OpenGL является многопоточной, а код - нет? (или наоборот?) Это может привести к большому количеству остановок.
  • может быть, углерод обрабатывает события иначе, чем какао? (я имею в виду диспетчеризацию сигнала / события, основной цикл ...)

Хорошо, это (извините за столь долгое написание) моя настоящая головная боль. Любое предложение, идея ... будет очень признателен.

Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 11 января 2011

Могу ли я задать диагностический вопрос? Можете ли вы убедиться, что он не передается программному средству визуализации?

Я помню, что когда вышел 10.4, возникла путаница в отношении кварцевого экстрима, кварца и углерода, некоторые из которых отключены, а на некоторых из них аппаратные средства визуализации по умолчанию отключены, что потребовало настройки конечным пользователем для получения работает правильно. Я не уверен, уместна ли эта информация, потому что вы говорите, что, настроившись на 10,4, проблема проявляется как на 10,4, так и на 10,5, да?

Возможно (хотя по общему признанию я хватаюсь здесь за соломинку), что даже в 10.5 carbon не используются аппаратные средства визуализации по умолчанию. Хотелось бы думать, что OSX предпочитает аппаратные средства визуализации программным средствам визуализации во всех сценариях, но, возможно, стоит потратить немного времени на изучение, учитывая, насколько тщательно вы уже рассматриваете другие варианты.

Удачи.

0 голосов
/ 17 января 2011

Если вы используете Qt, я думаю, ваш код будет работать на платформе Windows или Linux. Вы пробовали приложение под эти платформы?

Это быстро покажет, если это версия Qt или Mac OSX.

...