Название: Быстрый вывод пикселей Отправлено: Torvald от Январь 09, 2013, 11:46 Подскажите самый быстрый способ вывести массив пикселей на виджет.
Сейчас я делаю так: пишу в буфер QImage (через QImage::bits()), потом рисую эжтот QImage через пейнтер на виджете. Получается довольно медленно. Можно как то писать в буфер самого окна? Как то миновать этот промежуточный QImage. Выслушаю любые способы ускорения этого процесса. Название: Re: Быстрый вывод пикселей Отправлено: Bepec от Январь 09, 2013, 12:08 Запихать их в QPainterPath и вывести его?
PS а по хорошему, озвучьте проблему полностью. Не часть (как выводить пиксели), а полностью (хочу выводить мону лизу в трехмерности на виджете). Название: Re: Быстрый вывод пикселей Отправлено: Igors от Январь 09, 2013, 12:26 Сейчас я делаю так: пишу в буфер QImage (через QImage::bits()), потом рисую эжтот QImage через пейнтер на виджете. Получается довольно медленно. Напр сделали QImage::fill а затем его нарисовали - ну просто тест. Если для Вас это неприемлемо медленно - тогда не знаю как ускорить. Если же тормоз при Вашем/конкретном заполнении QImage - показывайте как заполняете, а еще лучше выложите тестовый проект Название: Re: Быстрый вывод пикселей Отправлено: Torvald от Январь 09, 2013, 12:35 В зависимости от разрешения окна вызов функции drawImage занимает 20-60мс - очень долго.
Хочу реализовать софтварный рейкастинг, но столкнулся с проблемой медленного отображения буфера кадра. Код: Widget::Widget(QWidget *parent): QWidget(parent){ Название: Re: Быстрый вывод пикселей Отправлено: GreatSnake от Январь 09, 2013, 12:46 Зачем нужен альфа-канал? На нём и проседает.
Название: Re: Быстрый вывод пикселей Отправлено: Torvald от Январь 09, 2013, 12:53 да, да, альфа не нужен - оставил только ради выравнивания и удобства (int же). Без него рисует 15-45мс - все равно долго.
Я говорю о мгновенном флеше пикселей. Вроде как рисую в специальный буфер, вызываю функцию отображения и рррраз - все на экране менее чем за 1 мс))) То есть имеется готовый массив - нужно отобразить. Допускаю копирование пикселей в видоебуфер, то есть можно подключить OpenGL. Однако рендер все равно софтварный Название: Re: Быстрый вывод пикселей Отправлено: Igors от Январь 09, 2013, 13:34 да, да, альфа не нужен - оставил только ради выравнивания и удобства (int же). Без альфы все равно 4 байта на пыксель :)А какие результаты если закомментировать вызов p.drawImage ? Название: Re: Быстрый вывод пикселей Отправлено: Torvald от Январь 09, 2013, 14:03 Ясное дело - 20мс ))
то есть только ожидание тика таймера. По сути - 0мс. Функция драв как раз и выполняется долго. Название: Re: Быстрый вывод пикселей Отправлено: ecspertiza от Январь 09, 2013, 14:14 я думаю Igors хотел узнать в draw ли вообще проблема. Сделай замер ф-ции paintEvent по времени, что то вроде
Код: QTime time; Название: Re: Быстрый вывод пикселей Отправлено: Dancing_on_water от Январь 09, 2013, 18:57 Код
если нужно еще быстрее то уже надо выкидывать qt Название: Re: Быстрый вывод пикселей Отправлено: Torvald от Январь 10, 2013, 05:11 Смотрю в сторону реализации метода draw. Видимо средствами Qt мою задумку сделать нельзя - не для того Qt делали)
Так что либо OpenGL либо подсмотреть исходники Qt и сделать что нибудь самому. Всем спасибо Название: Re: Быстрый вывод пикселей Отправлено: Igors от Январь 10, 2013, 10:18 Смотрю в сторону реализации метода draw. Видимо средствами Qt мою задумку сделать нельзя - не для того Qt делали) Если Вы собираетесь делать последовательность кадров (анимацию), то все равно Вам надо куда-то ее сливать (напр в AVI, MPEG и.т.п.). Средства для проигрывания получившегося мувика есть. Требовать от software чтобы оно считало в реальном времени, да еще и выводило - явно не то, если нужны fps, значит OpenGL |