|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.10.2010, 13:46 | #31 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Пока не пробовал (влом переподключать системники, у меня монитор один), но уверен что получу то-же самое окно. Видимо в демке заюзано не только MMX, но и часть SSE (целочисленное, может с регистрами mmx). Та ошибка на скриншоте - это Invalid Opcod. Если переборю лень и переподключу компы, скажу точно на какой инструкции трапается, да и вообще всю процедуру могу дизасмнуть.
Насчет фпс - по логике, все верно, но на деле - вот так вот. Можете попробовать простой эксперемент: глобальная переменная fps, при создании формы fps := 0. Далее делаем таймер, задержка 1 мс. В таймере пишем одну единственную строку - Inc(fps). Далее второй таймер, задержка 1000 мс. В его процедуре пишем пару строк - первая вывод куда-нибудь (в заголовок формы например) текущего fps и следующая строка - fps := 0;. Все. Никаких рисований и прочего. Тестим и получаем 64 fps черт его побери )) Такие дела..
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
17.10.2010, 16:29 | #32 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Ребята, отлично все. Tronix, fps считается именно так, как ты описал, ...я понимаю, что это примитив и не совсем корректно, но посудите сами, мне fps до лампы вообще, поскольку стоит константа 31 мс, это та частота, с которой зрение фиксирует плавность движения, реалистичное, а избыток fps для 2D - от лукавого, зачем нужно 100 fps, если движение попиксельное и анимация выполнена 24 кадра в секунду? ...как правильно сказал Tronix, fps не является основным показателем качества, даже в 3D шутерах 400 fps - это, извините, меренье видеокартами, человек больше 100 fps не отличает, будь там далее хоть 200, хоть 500, хоть 1000, ...другое дело, что может быть узкое место в игре, где полно объектов и специальным флагом помечать их в игре и поднимать скорость рендеринга - глупо, вот и пашет на максимуме.
У меня обработка модели выполняется сразу без задержек, основные тормоза - это BitBlt, наша комманда GDI, которую выполнять чаще 30 раз в секунду не рекомендуется. Последовательность такая: TimerGame (его интервал меняется в окошке) 1) Цикл по числу объектов, задание смещения 2) Переброс подложки в буфер кадра 3) Цикл отрисовки объектов в буфер кадра выше показанным MMX кодом (в ОЗУ) 4) Вывод кадра в форму (BitBlt) --------------------------------------------- Если хотите честный тест, где очень важно сколько лишних fps покажет, я применю GetTickCount. По поводу ошибки, ...не в курсе. Дизасемблировать не нужно, время тратить, так покажу, ...уже показывал в теме "Как вы относитесь к созданию игр на Delphi?", где код и родился под руководством товарища alexBlack'а: Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 17.10.2010 в 16:39. |
17.10.2010, 17:03 | #33 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Дыкть какой-же это MMX? xmms регистры - это SSE. Поэтому ессно про компы типа целеронов 1Ghz можно позабыть. SSE только начиная с первых P4 и AMD Athlon появилось, все что раньше будет {ой!}.
Плюс. Странный код вообще )) вот вы юзаете 128-битные xmm регистры, а на самом деле используется только их верхняя часть похоже. (приращение по 8 байт, а не по 16 как нужно бы было). У меня такое чувство, что если тупо заменить все SSE регистры xmmN на MMX регистры mmN функция будет точно так же работать, только уже не будет трапаться на без SSE-шных компах.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Последний раз редактировалось Beermonza; 17.10.2010 в 22:23. |
17.10.2010, 17:47 | #34 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Секунду! ...MM0-MM7 - MMX, а XMM0-XMM7 - расширение SSE ? 8/
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
17.10.2010, 17:50 | #35 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Так точно. Просто замените все xmm на просто mm и я уверен на 99%, что ничего не изменится в работе. И будет работать после этого на наших старичках - целеронах
UPD: Только перед начало работы с MMX надо вставить в процедуру команду emms и ее-же в самом конце процедуры. Иначе, если в игре используются вещественные числа, можно выхватить ексепшен навроде Invalid Floating Point Operation.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Последний раз редактировалось Tronix; 17.10.2010 в 17:59. |
17.10.2010, 18:11 | #36 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Я, видимо не доглядел, ...вот и отлично, спасибо! ...я применю и SSE для себя, выложу и чистый MMX, ...только мне нужно помочь с точным измерением fps, какой метод вам нужен? ...вывод в Caption формы.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
17.10.2010, 18:16 | #37 | |||
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Цитата:
В принципе - да, избыток fps для 2D это вещь необязательная, но мы же сейчас про тест GDI графики говорим. Как определить производительный метод рисования, или нет? Просто работает, неработает - не вариант. Если работает, то на каких частотах, с каким разрешением, с каким количеством объектов. Вот это будет уже показательнее. Цитата:
Вобщем вывод - либо убрать эту регулировку совсем, либо сделать её честной. В приложении тот самый тест, который провалился на Celerone. Тогда он просто провалился, я расстроился и плюнул на него. А теперь ввиду темы, приколотил к нему настроек несколько. Настройки вызываются по кнопке F1. Если установить количество Pack-ov =0, и отключить всю графику, то как раз и получите: Цитата:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
|||
17.10.2010, 18:26 | #38 | |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
Цитата:
А тест.... Ну мне по большому счету не нужно ничего доказывать и спорить я тоже не собираюсь. Если хотите - могу написать вам точно такой-же. Один в один, только наверное у меня он будет побыстрее работать Хотя с таймером этого будет не заметно. Поэтому я честно говоря вообще уже потерял нить разговора - что мы там вообще тестируем-то? Загрузку процессора? Ну так по хорошему можно на нее наплевать, потому как игра имеет полное право забрать все ресурсы, и грузить его на 99% . В этом ничего зазорного нет я считаю. Или мы тестируем количество fps? Так я уже говорил выше, что максимальное fps через таймер мы не посмотрим, нужно уносить в поток рендер. Запутался я с вами ))
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
|
17.10.2010, 18:36 | #39 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
Tronix, переделать на SSE нефиг делать, я просто не знал как называются регистры, ...в этом деле новичок, пытаюсь разбираться, когда приспичит. Ulex, таймер, которым управляешь у меня в приложении, он в своем теле содержит все полностью, как в структуре, которую описал выше, и обработка модели персонажей, и подготовка фона, и рисование на нем и в конце вывод на форму, ...поэтому все честно, сколько потребуется милисекунд, чтобы выполнить все целиком, ...говорит, что 15-16 мс.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 17.10.2010 в 18:40. |
|
17.10.2010, 19:53 | #40 | |||
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Цитата:
Я противник такого метода. На GDI это конечно может быть и не критично. Ну тут замедление игрового процесса начнётся в том случае, когда машина уже откровенно не тянет. А вот на DDraw таймер может оттянуться по VSYNC_у. Будут стоять две одинаковых машины - на одной игрушка будет летать, на другой ползать. А во всём виноваты настройки видеокарты и такой подход к построению графики. Остаётся победить это методом, который предложил Selestis. Но этот метод догоняющий в плане логики. Т.е. в таймере высчитывается, а действительно ли таймер был прав, или графика его стормозила. Если стормозила, то считается коэффициент и все объекты уже живут этот кадр в соответствии с этим коэффициентом. Логика подстраивается под графику. И есть ещё вариант - развязать графику и логику окончательно. Есть таймер, по которому обрабатывается вся логика. Просчитал, посмотрел чего делает адаптер, если не занят - бросил ему команду рисовать, если занят, досвидания до следующего такта счётчика (рисуй там себе дальше). Цитата:
Цитата:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
|||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |