Russian Qt Forum
Апрель 24, 2024, 10:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3 4   Вниз
  Печать  
Автор Тема: Техника отлова  (Прочитано 22177 раз)
Bepec
Гость
« Ответ #15 : Февраль 26, 2015, 21:27 »

Стандартно - берёте gifcam и записываете с частотой 30 кадров в секунду ) Там кадр спокойно берёте и рассматриваете Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Февраль 27, 2015, 11:18 »

Стандартно - берёте gifcam и записываете с частотой 30 кадров в секунду ) Там кадр спокойно берёте и рассматриваете Улыбающийся
Ну допустим так я увижу "калечный" кадр - и что с того? Информации о том чем он вызван по-прежнему ноль
Записан
Bepec
Гость
« Ответ #17 : Февраль 27, 2015, 11:46 »

Сами себе противоречите. " Для начала надо хоть как-то на нем остановиться, но как?" © ваши слова
Вам нужен кадр Улыбающийся Увидев кадр можно будет локализовать проблему - откуда он вылез.
Вдруг у вас там кнопка рисуется на весь экран?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #18 : Февраль 27, 2015, 12:07 »

А если программно двигать мышь также, как двигает юзер?
Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #19 : Февраль 27, 2015, 12:58 »

Сами себе противоречите. " Для начала надо хоть как-то на нем остановиться, но как?" © ваши слова
Вам нужен кадр Улыбающийся Увидев кадр можно будет локализовать проблему - откуда он вылез.
Вдруг у вас там кнопка рисуется на весь экран?
Ну допустим QOpenGLWidget весь "чОрный" - или модель залита черным. Ну и что?

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

Напрашивается так: рисовать моно-цветом, напр белым. После каждого рисования читать, если "не белый" - останов, печать, т.е. ходы есть. Но как "прочитать" нарисованное для QOpenGLWidget ?  
Записан
mezmay
Гость
« Ответ #20 : Февраль 27, 2015, 13:24 »

по-моему вариант только один - писать лог, поставив запись в лог во всех функциях, которые могут повлиять на paintEvent
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #21 : Февраль 27, 2015, 13:37 »

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

а чего трудёмкого? запустить нить, которая выдает сигнал, приемник сигнала двигает QCursor - несколько строк

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

можно тоже самое с простой видеозаписью изображения сделать
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #22 : Февраль 27, 2015, 13:37 »

по-моему вариант только один - писать лог, поставив запись в лог во всех функциях, которые могут повлиять на paintEvent

так ему надо этот лог синхронизировать со сбоем в изображении
Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #23 : Февраль 27, 2015, 14:08 »

Просто двигая мышь (и получая flash) я могу сказать типа "ну вот через 5 (или 10) перерисовок это случилось". Что  изменится от того что точно вычислили "на какой"? Этот "номер кадра" повторяться не будет, в отладчике к нему не привязаться.

по-моему вариант только один - писать лог, поставив запись в лог во всех функциях, которые могут повлиять на paintEvent
Так а что логировать-то? 
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #24 : Февраль 27, 2015, 15:57 »

Но как "прочитать" нарисованное для QOpenGLWidget ?   
А класс QOpenGLFunctions с его glReadPixels не подойдёт?
Записан
Bepec
Гость
« Ответ #25 : Февраль 27, 2015, 15:58 »

Что изменится при отлове кадра - вы будете на 1 шаг ближе к решению.
Что изменится при "получении номера кадра" - ещё 1 шаг ближе к мечте.
Что изменится если вы вместо дурацких комментариев проделаете данные вещи - вы будете ближе к решению, чем сейчас Веселый
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #26 : Февраль 27, 2015, 18:37 »

.. вы вместо дурацких комментариев проделаете данные вещи ...
Чья б корова не мычала - а Ваша бы точно молчала Улыбающийся Ну чего тарахтеть если мысленки ни одной?

А класс QOpenGLFunctions с его glReadPixels не подойдёт?
glReadPixels скопирует текущий буфер, а то что "сейчас отрисовано" (вызовами OpenGL) хранится в текстуре. Потом все соберется и будет сформирован еще буфер который OpenGL вытолкнет на экран. И как прорваться к текстуре - хз
Записан
mezmay
Гость
« Ответ #27 : Февраль 27, 2015, 19:38 »

А если выводить на экран номер текущей строки в логе? Тогда если поймать сбой, будет видна текущая строка)
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #28 : Февраль 27, 2015, 19:44 »

Этот "номер кадра" повторяться не будет, в отладчике к нему не привязаться.

Номер - это содержимое глобальной переменной инкрементируемой в каждом paint(). Номер нарисованного кадра. Когда станет известно его значение при глюке, настроите отладку на это значение. И отладчик остановится где надо.
Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #29 : Февраль 28, 2015, 11:09 »

А если выводить на экран номер текущей строки в логе? Тогда если поймать сбой, будет видна текущая строка)
Номер - это содержимое глобальной переменной инкрементируемой в каждом paint(). Номер нарисованного кадра. Когда станет известно его значение при глюке, настроите отладку на это значение. И отладчик остановится где надо.
А откуда предположение что сбой наступает после определенного/фиксированного числа перерисовок? Вот я вывел в консоль "номер рисования" (неуклонно растет). Вожу мышей, сбойнуло - смотрю консоль. Это конечно неточно, но ясно что никакого "периода" нет, наблюдал и через 5 и через 20. Почему-то сбойный кадр никогда не остается на экране, немедленно перекрывается нормальным.

Следующая позиция: ну а что делать когда (допустим) остановился в отладчике? Все вызовы OpenGL уже отработали, что/где искать? Хорошо, допустим даже встал перед началом "плохого" рисования - и что? Код-то отрабатывает одинаковый.

Беда в том что никакого "холста" нет. Напр
Код
C++ (Qt)
glVertex3f(...)
Возможно здесь ошибка, подаваемые данные неверны. Но это (еще/пока) ничего не "отображает". А когда в конце-концов будет виден результат - хз чем он вызван, поезд ушел.
Записан
Страниц: 1 [2] 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.074 секунд. Запросов: 23.