![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#91 | |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]() Цитата:
Ещё есть такая идея, на грани фола. Собственно, то, что .pixel где то в этой теме говорил уже. Обновлять не весь экран, а только необходимую область. Лично я только так побеждал GDI на Celerone. Но это уже мухлёж. По поводу DirectDraw у меня чёт осадок какой то остался, связаннный с оконным режимом DDraw. Сабжа не помню, но осадок стойкий. P.S. Аааа.., опять расстройство сплошное. Запустил свою DirectX поделку на ноуте - не работает. Тьфу, всё, плюнул, пошёл спать.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
|
![]() |
![]() |
![]() |
#92 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Ulex, странно, что у тебя настроение падает от сложных задач, ...у меня, так наоборот азарт еще больше проявляется, чем сложнее задача
![]() Нашел наработки на DirectDraw, ...они так же на ноутбуке не запустились, очевидно, что-то с инициализацией происходит после выхода на режим, foolscreen срабатывает и все, черный экран до нажатия Esc. Normal не работает. На счет грани, ...что предлагал .pixel, ...2 года назад эту тему мы перерыли вдоль и поперек. Выяснилось, что перерисовка большого куска, т.е. всего буфера занимает меньше времени, чем его частичное обновление, в котором участвует даже 2/3 поверхности. Такой способ хорош для аркад, а для изометрии неприемлем совершенно, обновлению подчас подлежит весь буфер и определять сегменты и работать с ними является "действиями ради действий", выигрыша никакого. Только в отдельных случаях, которых в изометрии крайне мало. А вот тест с Direct3D заработал, там тоже можно работать со спрайтами, ...интересен как подмена вывода от GDI, так же как и OpenGL, ...суть будет в том, чтобы готовую собранную подложку кидать по надобности в видеопамять, и пусть она там остается, чтобы не перекидывать постоянно ее в буфер кадра, ...затем так же перекидывается второй буфер, но уже с частотой анимации (30 кадров), с альфа-каналом. Надеюсь, смикшировать и вывести на экран аппаратными средствами видеокарта сможет быстрее. От нее потребуется только это. Тогда GDI отбрасывается. Подготовку кадров и подложки буду вести по прежнему в ОЗУ через MMX.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#93 | ||
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]()
Настроение падает не от сложных задач, а от нудных. Когда вроде всё сделал, отладил, получил приемлемый результат. Запускаешь на другой машине и обламываешься. И начинается всё заново.
Цитата:
Цитата:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
||
![]() |
![]() |
![]() |
#94 |
c++, dx/ogl
Форумчанин
Регистрация: 10.11.2008
Сообщений: 131
|
![]()
А что если в момент, когда готовый кадр копируется на форму
Как я понимаю примерно такой код отвечает за копирование… Код:
Код:
По поводу DD7 на старых компах уже присутствует такая «фишка» как DMA (Direct Memory Access) средствами DD надо просмотреть, на что способна видео карта. И с какими DMA она дружит. В случае поддержки блиттинг(SRCCOPY raster operation) по идее будет производиться без нагрузки на CPU.
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but rather how many batches/frame! |
![]() |
![]() |
![]() |
#95 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
это дело подсистемы GDI. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#96 | |
c++, dx/ogl
Форумчанин
Регистрация: 10.11.2008
Сообщений: 131
|
![]() Цитата:
...а dd7 такое прокатывает ... и быстрее BltFast'a работает) Код:
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but rather how many batches/frame! |
|
![]() |
![]() |
![]() |
#97 | |||||
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]() Цитата:
![]() Цитата:
Цитата:
Что в аркаде? ...плоскость, есть задник, есть координаты объекта, ...фон статичен, бери его, ложи позади, и сверху текстуру объекта. Т.е. сначала латачный ремонт фона, по предыдущему положению объектов, затем новые анимации на новых местах. Цитата:
Цитата:
.pixel, memcpy - аналог в Delphi, я так понимаю, CopyMemory, Copy, Move, и там ассемблер по 4 байта за такт. Вот это быстрее: Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|||||
![]() |
![]() |
![]() |
#98 | |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]() Цитата:
Мне сейчас ещё одна идея в головёшку пришла. Ты её конечно раскритикуешь (и будешь прав), но тем не менее, надо высказать. Идея заключается в том, что в видеопамяти создаётся две-три поверхности. Одна - это задник, размером соответственно равная BackBuffer_у. И ещё одна-две вспомогательные (большого размера). И построение кадра делится на два этапа. Этап первый - подготовка всех поверхностей, необходимых для отрисовки конечного кадра - это выполняет CPU. На этом этапе во вспомогательную поверхность сливаются все необходимые кадры анимаций объектов (если кадр анимации нужен для отрисовки более чем одного объекта, он всё равно копируется в видеопамять один раз). И тут надо придумать какую-то систему (типа банка) хранения инфы по этим поверхностям (какая пов, какому объекту принадлежит и т.д.). Этап второй - непосредственно рисование кадра - это выполняет GPU (DirectX). В соответствии с логикой находятся объекты, которые надо рисовать, находятся соответствующие им куски вспомогательной поверхности в видеопамяти (а они уже туда загружены на первом этапе) и копируется всё это внутри видеокарты. Фух. Написал. Вот как то так. Можешь критиковать. Опять сейчас скажешь, что тебе нужны все кадры анимаций и сразу? По Станиславскому - не верю. Кстати, специалисты по Direct_у. Подскажите кто, как разогнать (настроить, инициализировать) девятый DX чтобы он пустую сцену крутил хотя бы 1000 раз в секунду. У меня опять в VSYNC (fps=60) упёрлось. И больше выжать из него не могу. Какую то установку забыл сделать? Восьмой DX нормально так крутит пустой экран на 1000 fps, а девятый не хочет. Вот с такими параметрами я восьмой инициализирую. А чего девятому нужно? Код:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru Последний раз редактировалось Ulex; 02.11.2010 в 18:59. |
|
![]() |
![]() |
![]() |
#99 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]() Цитата:
Чтобы ты поверил в надобность такого объема памяти (15М) на один тип дерева, покажу в миниатюре раскадровку (смотри картинку). Сам спрайт 5460х1000х24bit а в модели дерева 1,5 млн. полигонов, ...такое в 3D быстро "шевелить", даже в единственном экземпляре, не в состоянии ни одна из доступных в продаже современных машин, ...а в 2D это с легкостью реализуется, нужна только память. Метод, который ты высказал, я вот постом выше описал, ...что все текстуры в кадр и подложку накладывает процессор, кадры объектов хранятся в ОЗУ, а видеокарта микширует задний фон с готовым кадром по его альфа-каналу. Задний фон собирается только когда персонаж переступил в соседнюю клетку, а до той поры задний фон просто смещается по пикселям, ...в этой связи оказывается просто лишним каждый раз переносить подложку в буфер кадка, видеокарта сама положит под низ этот сборный фон. Процессор будет заниматься только сборным кадром объектов и отправлять в видеопамять готовый слой объектов с альфа-каналом. Уж это будет по-любому быстрее того, что сейчас есть.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 02.11.2010 в 19:59. |
|
![]() |
![]() |
![]() |
#100 |
c++, dx/ogl
Форумчанин
Регистрация: 10.11.2008
Сообщений: 131
|
![]()
Beermonza, аха) я это и имел ввиду, такой способ копирования с помощью 64-битных mmx регистров, ну а sse - 128 бит просто сказка))
Ulex, по-моему у тебя… Код:
D3DPRESENT_INTERVAL_DEFAULT This is equivalent to D3DPRESENT_INTERVAL_ONE. D3DPRESENT_INTERVAL_ONE The driver will wait for the vertical retrace period (the runtime will "beam follow" to prevent tearing). IDirect3DDevice9::Present operations will not be affected more frequently than the screen refresh; the runtime will complete at most one IDirect3DDevice9::Present operation per adapter refresh period. This is equivalent to using D3DSWAPEFFECT_COPYVSYNC in Microsoft® DirectX® 8.1. This option is always available for both windowed and full-screen swap chains. #define D3DPRESENT_INTERVAL_DEFAULT 0x00000000L #define D3DPRESENT_INTERVAL_ONE 0x00000001L #define D3DPRESENT_INTERVAL_TWO 0x00000002L #define D3DPRESENT_INTERVAL_THREE 0x00000004L #define D3DPRESENT_INTERVAL_FOUR 0x00000008L #define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000L
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but rather how many batches/frame! |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
wi-fi и скорость | stenl1 | Компьютерное железо | 19 | 01.06.2010 17:48 |
Скорость рисования графиков | Master07 | Общие вопросы C/C++ | 3 | 16.07.2009 21:45 |
Скорость | bakanis | Работа с сетью в Delphi | 6 | 05.04.2009 12:39 |
Скорость скачивания | Терминатор | Свободное общение | 3 | 30.03.2009 19:03 |
Скорость проигрывания | Bigtyoma | Мультимедиа в Delphi | 0 | 30.09.2008 15:57 |