|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 11, 2004 00:32:14 Обнаружил досадную для меня вещь: когда я делал вывод на экран прямой записью в видеобуфер,то увидел, что скорость обновления экрана довольно маленькая (где-то на глаз 1/4 секунды на кадр). Раньше как-то на это не обращал внимания, но потом подумал: "ведь я же на этой видеокарте вполне нормально фильмы смотрю, а тут такие тормоза, казалось бы моя программа должна работать еще быстрее" (видеокарта GeForce FX5200 64Mb). Вот у меня и возник вопрос: как сделать быстрый вывод графики? Я предполагаю что тут что то похожее на адаптер EGA, в котором можно было сразу рисовать по 8 точек одного цвета. Вот только не смог найти нигде описания по AGP-шным картам. Кто разбирается в этом, помогите пожалуйста. |
|
|
Дата: Апр 11, 2004 10:26:05 · Поправил: S_T_A_S_ Icebp Под видеобуфером что понимаете? Если первичную поверхность экрана, то быстее будет такой способ: Создается внеэкранная поверхность в обычной памяти, работу с ней можно неплохо оптимизировать. Когда кадр постоен, копируем его аппаратным блиттером на первичную поверхность. Или во вторичный буфер в видеопамяти, а затем flip (для full screen может быть полезно) А напрямую писать на первичную поверхность экрана очень медленно, а если еще и читать оттуда :( Да, еще можно потерять лишние кадры при неправильной синхронизации (в 2 раза умньшится скорость) |
|
|
Дата: Апр 13, 2004 08:33:08 S_T_A_S_ Я пишу в видеобуфер по адресам с 0a0000h по 0affffh, а затем переключаю банки видеопамяти. Так вот, если я пишу даже один цвет примерно так: mov ax,0a000h mov es,ax mov al,2 xor di,di vb_cycl: mov [es:di],al inc di or di,di jnz vb_cycl то у меня получается слишком малая скорость. Расскажите поподробнее что такое аппаратный блиттер и как его делать. Также я не знаю что такое первичная поверхность экрана. Просто раньше я делал примерно так как показано выше и скорость меня в принципе устраивала, теперь же я понял, что у меня есть пробел в знаниях насчет вывода графики. Просветите пожалуйста. |
|
|
Дата: Апр 14, 2004 03:33:55 Icebp Тебе под DOS? Словами (двойными) писать не пробовал. |
|
|
Дата: Апр 14, 2004 17:34:00 · Поправил: Sm_Andrei Icebp Попробуй поизучай защищенный режим - 32-битный режим. Когда я стал работать с графикой в защищенном режиме, производительность возросла где-то в 6-7 раз, а с использованием 3D now!!!, MMX или чего там у тебя есть, вообще летать все будет. |
|
|
Дата: Апр 14, 2004 18:14:48 Когда я писал двойными словами, то скорость была еще маленькая. Действитено, попробую-ка я писать в видеобуфер из MMX (movq [es:di],mm0 например) регистров или из SSE. Вот у меня еще возникла мысль: если я буду писать в видеобуфер минуя кеш (movntq кажется инструкция называется), то сильно ли у меня возрастет скорость или нет? Не пойму вот почему в защищенном режиме скорость растет в 6-7 раз, казалось бы она либо не поменяется либо понизится. Вот кстати раз уж речь зашла о защищенном режиме: может можно обойтись без переключения банков памяти, может есть область памяти где то вверху адресного пространства например в несколько мегабайт, записывая в которую можно выводить на экран точки и не переключать банки видеопамяти. Если так, то я все-таки буду писать в эту область памяти из unreal mode. Это же ведь гораздо удобнее по-моему. Вот еще вопрос: например нарисовал я на экране к примеру треугольник и мне надо его повернуть например на 17 градусов. Могу ли я это сделать не переписывая в видеопамять изображение нового треугольника, а сделав что-нибудь хитрое с регистрами видеокарты? |
|
|
Дата: Апр 14, 2004 21:49:12 Вот прочитал, сделал несколько выводов, по собственному опыту, тоже страдал одно время этим. 1. если работать на небольших разрешениях (да и на больших тоже) для создания более реалистичного и динамичного изображения при присутствии 1 видеостраницы памяти делали так: строили изображение отдельно где-то в обычной оперативе, а лишь затем его _полностью_ переносили в видеобуфер, те до того, как кадр не будет полностью построен - в адрес видеобуфера ничего не пишется, проще стало, когда появилась возможность иметь сразу несколько видеостраниц, ну о этом говорилось уже выше, кстати первичная поверхность - есть видеостраница отображенная на экране в данный момент. 2. По поводу unreal mode и всего того, что говорилось о переключении банков, да именно так и делается, в защищеном или унреале пишешь в видеопамять без переключений банков, если хочешь могу даже исходник откопать был где-то на unreal пиши на dima@n23.ftr.ru. 3. А теперь забудь о том, что я говорил выше, не парь мозги и пиши для DirectX, там тебе и будет аппаратный блитер. |
|
|
Дата: Апр 14, 2004 22:22:23 Mad_C Я послал тебе письмо, но похоже оно не дошло, поэтому дублирую здесь. Вышли мне, пожалуйста, исходник по мейлу: icebp@hotmail.ru |
|
|
Дата: Апр 14, 2004 22:55:47 Мне кажется у тебя что-то с ящиком мой сервак вернул мое письмо обратно со страшной руганью :))) A message that you sent could not be delivered to all of its recipients. The following address(es) failed: icebp@hotmail.ru: SMTP error from remote mailer after RCPT TO: <icebp@hotmail.ru>: host mail.hotmail.ru [212.48.140.156]: 553 Your mail rejected. Please, forward this error message to abuse@nm.ru (212.96.97.73) 7 В общем, если с мылом так и не разбирешься, исходник положу сюда завтра вечером, он на работе у меня, если раньше разбирешься то утром могу дать, попробуй письмо еще на mad_c@bk.ru отправь |
|
|
Дата: Апр 15, 2004 07:15:26 · Поправил: Sm_Andrei Icebp почему в защищенном режиме скорость растет в 6-7 раз Именно переключение банков капитально тормозит работу с графикой - постоянное отслеживание границ банков медлит вывод примитивов. Особенно это сказывалось, когда выводил окружности(кажется методом Брезенхейма), это было просто убийственно. В защищенном режиме начал выводить в оперативную память, только это увеличило производительность в несколько раз. И чем больше разрешение, тем это заметнее. Только скорость вывода закрашенного прямоугольника изменилось всего лишь в 1,5 раза. К тому же с некоторыми операциями деления, при выводе примитивов, было тяжело работать на 16-битных регистрах. |
|
|
Дата: Апр 15, 2004 19:15:34 Icebp Лови обещаный исходник на unreal mode там я кажется бмп вывожу, если память не изменяет 800х600х16b (эххх, давно это было), но суть не в этом, суть в том, как я получаю адрес вывода из vesa, вообще советую почитать справочник по ее функциям. P.S Sm_Andrei прав, но лучше учи не защищенный режим, хотя он тож не помешает, но для скажем написания своей ОС, а вот для графики советую всеж ориентироваться на защищенный режим под win32, что гораздо проще и менее гемморойно, тем более когда там есть directx или opengl, без них твои программы все также останутся тормазнутыми, не используя аппаратные ускорители видюх... с таким же успехом без директа можешь смело выкинуть свой GeForce FX5200 64Mb, и поставить 4 метровую s3 -результат по скорости будет приблизительно одинаков... P.P.S. на код не матюкайся, когда его писал было мне 16 лет и я только учил тасм после спектрума :))) _901687979__VESA.ASM |
|
|
Дата: Апр 15, 2004 19:18:44 [i][/i] если решишься компилить - это должен быть сом-файл! |
|
|
Дата: Апр 17, 2004 09:42:20 Mad_C Спасибо большое за исходник! А что примерно из себя представляют аппаратные ускорители видюх ? |
|
|
Дата: Апр 18, 2004 22:05:49 Пардон, немножко не так выразился - "... не используя аппаратное ускорение видюх", хотел сказать :)) а это есть "зашитые" в апаратуру видеокарт стандартные методы всяческих часто используемых в графике функций, тобишь например 3d-конвеер, затенение, удаление скрытых поверхностей, антиалиасинг и тд, те как-раз те функции, которые очень сильно напрягают при расчете процик |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.122 |