![]() |
|
Модераторы: volvo877, Snowy, MetalFan |
![]()
|
|
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
Собственно вопрос такой. Если перерисовывать в паскале путем очистки экрана, то возникает не приятное моргание. Как можно работать с буфером видеокарты, чтобы дальше выводить обновленный экран? можно ли сделать например так, делаем 2-мерный массив, туда заносим нужные точки, потом передаем его видеокарте, она его отрисовывает? Интересует в первую очередь как это правильно реализовать в среде Pascal ( с примерам(и) ) (так же интересно как это сделать на .net, но это немного не в тот раздел
|
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
В досе была возможность работы с виртуальными экранами. Один активен - на другом подготавливаем картинку. Затем меняем местами. Однако, из под Win многие досовские возможности режутся. Поэтому, надо определиться - под что писать прогу.
-------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
как ты сказал, очень классный вариант, но программа будет запускаться именно из Win...
|
|||
|
||||
| karataev |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 28.1.2006 Где: Россия, Нижний Но вгород Репутация: нет Всего: нет |
Я предлагаю просто зарисовывать уже отработанные пиксели цветом фона, поэтому будет обновляться не весь экран, а только ненужные пиксели. Как раз можно сделать и с двухмерным массивом это.
|
|||
|
||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
Думаю это не подходит по 2 причинам 1) либо это очень сложно просчитать математически и понять какие все-таки пиксели надо менять а какие нет 2) либо если я буду удалять отработанные и рисовать свои, то возникнет эффект моргания (весь монитор не будет моргать,а что я конкретно буду перерисовывать - будет, если фон и обьект контрастный, а если еще и фона как такового и нет...) Мой вопрос больше ориентирован на то, чтобы все это запихнуть по ближе к буферу видеокарты, чтоб я рисовал только следующий кадр(измененный)... я могу в терминологии (про буфер и т.д.) ошибаться, потому что не знаю как это идет на аппаратном уровне.
|
|||
|
||||
| Ozzя |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.7.2004 Репутация: нет Всего: 1 |
Тупиковый вариант, однозначно.
ТО есть нужен 32-х разрядный компилятор под win32
Модуль Graph TMT Pascal'я 4 все это поддерживает. |
||||||
|
|||||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
Все пишется на Borland Turbo Pascal 7.0 ( это что-то вроде некого задания на семестр, я ищу подходу к этой теме, хочется сделать по красивее) запускается все это дело через виндовский эмулятор доса ( насколько я понимаю )
|
|||
|
||||
| Ozzя |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.7.2004 Репутация: нет Всего: 1 |
nighthare,
Тогда какие проблемы? Режим EgaHi - 640X350 Две страницы аппаратных. Нарисовали , поменяли страницу, Нарисовали Это сообщение отредактировал(а) Ozzя - 16.2.2006, 17:10 |
|||
|
||||
| volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
В таком случае копай в сторону процедур: SetActivePage/SetVisualPage... И делай, как посоветовал remax, пока один экран ВИДИМ, другой устанавливаем АКТИВНЫМ, и готовим картинку. Как только подготовили - SetVisualPage на эту страницу - картинка появляется за 1 проход луча по монитору... |
|||
|
||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
Спасибо, буду копать.
|
|||
|
||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
делаю так :
эффект моргания не пропал, но вроде стал меньше... есть еще какие-нибудь способы? (полный пример выложу в раздел помощи) |
|||
|
||||
| Ozzя |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.7.2004 Репутация: нет Всего: 1 |
refresh отслеживай
|
|||
|
||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
Простите за глупый вопрос, но как его отслеживать? Вместо cleardevice впихнул закраску всего экрана черным цветом(после setactivepage(1); перед setvisualpage(1);) получил ужасное моргание
|
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
Посмотри про двойную буфферизацию в инете. Именно это вариант решения проблемы моргания, при передвижении объектов. Но не уверен, что в данной ситуации подходящий. Но я бы капнул в эту сторону...
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Ozzя |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.7.2004 Репутация: нет Всего: 1 |
Ждем обратного хода луча
|
||||
|
|||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
Ozzя, т.е. мы отрисовываем в setactivepage, после этого вставляем эту процедуру, потом setvisualpage? если не сложно, можешь прокоментировать в коде каждую строчку после Asm и до End; .
Added @ 15:12 Ozzя Он не моргает!!!!! просто супер!!!!!!!! большое спасибо!!! только обьясни пожалуйста что делают эти ассемблерные команды и как они работают.... Это сообщение отредактировал(а) nighthare - 20.2.2006, 15:14 |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
nighthare, а какой ф-цией ты рисуешь точки?
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
Romikgy, putpixel...
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
nighthare, сиба
Это сообщение отредактировал(а) Romikgy - 20.2.2006, 15:36 -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Ozzя |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.7.2004 Репутация: нет Всего: 1 |
nighthare,
Дополнительно читать тут http://emanual.ru/download/7045.html |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
nighthare, а не проще ли будет взять адресс буфера видеостраницы и копировать массивами туда, а не
? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
Romikgy, думаю проще, а как найти этот адрес, и как его взять в Pascal'e ?
Это сообщение отредактировал(а) nighthare - 20.2.2006, 16:24 |
|||
|
||||
| Ozzя |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.7.2004 Репутация: нет Всего: 1 |
A000 - Для граф. режима ega/vva
Добавлено @ 17:00 Move( $a000,$a800,$800); - копирование Как-то так. 1-я страница лежит по адресу $a000, вторая - начинается с $a800. Фишка в том, что в режиме 640X350 копируются сразу все 4 плоскости (latches). Надо установить регистр контроллера. Какой - не помню. Почитай Фроловых по ссылке. Там есть пример копирования. Это сообщение отредактировал(а) Ozzя - 20.2.2006, 17:18 |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
обращение к памяти в паскале , на сколько помнится mem[seg:off]
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
Ozzя, а там едет так? я записываю точку с координатами 0,0 , увеличиваю адрес, записываю 0,1 ... 0,640 -> 1,0 и так далее? и как туда писать цвет точки( т.е. там усроено что либо true либо false, или либо false либо номер цвета? ) или можно как-то создать огромный массив и потом его целиком пихать в этот буфер??
Added @ 17:09 буду читать и разбираться... Это сообщение отредактировал(а) nighthare - 20.2.2006, 17:08 |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
это масссив точек заданый цветом каждой точки
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Ozzя |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.7.2004 Репутация: нет Всего: 1 |
Нет, режим 640Х350 сложнее.
Это сообщение отредактировал(а) Ozzя - 20.2.2006, 17:16 Присоединённый файл ( Кол-во скачиваний: 6 )
IMG00017.GIF 5,13 Kb |
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
Ozzя, более точнее ответил
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
тогда вопрос, этот способ эффективнее чем putpixel? (если не считать что с его помошью наверное можно сделать двойную буферизацию) если да, то действительно будет работать заметно быстрее?
|
|||
|
||||
| Ozzя |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.7.2004 Репутация: нет Всего: 1 |
В принципе, bgi-графика достаточно быстра, за исключением заливки.
Никто не мешает рисовать во 2-й странице, и затем перебрасывать на 1-ю. |
|||
|
||||
| nighthare |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 24.12.2005 Репутация: нет Всего: нет |
Ozzя,
|
|||
|
||||
![]()
|
| Правила форума "Delphi" | |
|
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |