Что может привести к тому, что OpenGL будет вести себя по-разному в параметрах “Начать отладку” по сравнению с “Начать без отладки”?

StackOverflow https://stackoverflow.com/questions/1799070

Вопрос

Я написал 3D-стерео программу OpenGL на C ++.Я отслеживаю положение, которое должны иметь объекты на моем дисплее, используя timeGetTime после timeBeginPeriod(1).Когда я запускаю программу с надписью "Начать отладку", мои объекты плавно перемещаются по дисплею (как и должно быть).Когда я запускаю программу с "запуском без отладки", объекты периодически зависают на несколько обновлений экрана, а затем переходят в новую позицию.Есть какие-нибудь идеи относительно того, что может быть причиной этой проблемы и как ее устранить?

Редактировать:Похоже, что резкость может быть устранена после небольшой задержки, когда я запускаю "Запуск без отладки", если я нажму кнопку мыши.Мое приложение является консольным приложением (я ввожу некоторые параметры при первом запуске программы).Может ли быть разница в фокусе окна между этими двумя вариантами?Есть ли явный способ принудительно переключить фокус на окно OpenGL (в полноэкранном режиме с помощью glutFullScreen();), когда я закончу вводить данные из окна консоли?

Спасибо.

Это было полезно?

Решение

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

Что-то более специфичное для OpenGL. У вас могут возникнуть проблемы со сбросом команд.Попробуйте вставить glFinish() после рисования каждого кадра.
Также может быть полезно каким-то образом убедиться, что при возникновении зависания действительно обрабатываются кадры, а не что все приложение зависает.Если да, то более вероятно, что у вас есть какая-то ошибка в логике, поскольку кажется, что OpenGL выполняет свою работу.

Другие советы

Тот самый timeGetTime API имеет точность всего около 10 мс.Если интервалы, которые вы измеряете, меньше 50 мс или около того, возможно, вы просто видите последствия ожидаемого отклонения в системном таймере.Я понятия не имею, почему отладчик может повлиять на это, но тогда вся работа системы - это черный ящик.Вы могли бы использовать Счетчик выполнения запроса чтобы получить тайминги с более высоким разрешением, которые могут помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top