User Tag List

Страница 6 из 7 ПерваяПервая ... 234567 ПоследняяПоследняя
Показано с 51 по 60 из 66

Тема: ZX DevStudio

  1. #51

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Понятно, что все синхронизируется по аудио, то чего ему не быть плавным. Никуда не убежит и не отстанет. Лишь задержка будет из-за длины буфера. Кстати, какая задержка у тебя?

    Вот в том-то и проблема, когда синхронизируешься по одному, сложно (хотя и можно, порой, дикими извращениями) добиться синхронизации другого. Видео, когда синхришься по звуку, и звука, когда синхришься по видео.
    Ну со звуком в zxmak2 проблем нет ни при синхронизации по звуку, ни по видео. Проблема только в том, что при синхронизации по видео, точное отслеживание начала развертки требует большой нагрузки на процессор, т.к. в windows нет ивентов по vblank, поэтому приходится в цикле следить за scanline.

    Задержка в zxmak2 зависит от системы, как только приходит ивент, так заливается новый фрейм. Если ивенты система бросает с задержкой, то добавится эта задержка. В среднем минимальная задержка должна быть на уровне около 1 фрейма, т.е. порядка 0.02 сек, но т.к. эмулятор всегда следит чтобы в буффер не был пустым, то реальная задержка будет ближе к максимальной - по числу буфферов, т.е. не более 8 фреймов = 0.16 сек. Т.к. эмуляция фрейма не мгновенная, а требует какогото времени, плюс задержки на переключение задач а они в windows очень существенны), то на деле задержка должна составлять 6-7 фреймов или 0.12 сек.
    ZXMAK2 при синхронизации по звуку ориентируется исключительно на ивенты системы, оставляя на ее совести неравномерность генерации этих ивентов. Т.е. если система бросает ивенты пачками, то и фреймы будут заливаться пачками. Это естественно сделает скроллы менее плавными, т.к. фреймы будут эмулироваться не достаточно плавно, но раз системе так нужно для нормального воспроизведения звука, то с этим ничего не поделаешь. При синхронизации по видео таких эффектов не будет, т.к. vblank происходит равномерно, заодно и привязка к развертке получается, поэтому скролы в этом случае получаются плавными (если не считать влияние пропуска кадров для ресэмплинга, но это на плавности малозаметно, а больше влияет на визуальное восприятие цветов в мультиколорах).
    Тут следует отметить что рендер на экране в zxmak2 осуществляется асинхронно от эмуляции, поэтому задержки UI влияют только на обновление окна, но не на саму эмуляцию (включая и запись в звуковой буфер). За счет этого удалось добиться высокой скорости реакции UI, при полном отсутствии влияния на поток эмуляции. Поэтому эмулятор так шустро реагирует на ресайз окна, не останавливается при перетаскивании и т.п. Добиться такого было непросто Изображение вначале заносится в текстуру из потока эмуляции и инвалидируется окно. А UI уже по запросу системы на WM_PAINT рендерит тектуру в окно. WM_PAINT система синхронизирует с vblank, поэтому изображение на дисплей попадат синхронно с разверткой. Независимо от источника синхронизации фреймов.
    У меня была идея сделать синхронизацию от по WM_PAINT, но это оказалось не очень хорошей идеей, т.к. в UI windows это сообщение приходит с задержкой, например если с UI чтото происходит (ресайз и тп).
    Последний раз редактировалось ZXMAK; 10.05.2014 в 06:54.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  2. #52

    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    звука нет
    kX 10k1 Audio (3550) - Generic

  3. #53

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,374
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Ну со звуком в zxmak2 проблем нет ни при синхронизации по звуку, ни по видео. Проблема только в том, что при синхронизации по видео, точное отслеживание начала развертки требует большой нагрузки на процессор, т.к. в windows нет ивентов по vblank, поэтому приходится в цикле следить за scanline.
    Что, прям один из процессов всегда висит и сканирует сканлинию?
    У меня тоже есть жесткое ожидание нужной сканлинии, но не такое.

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    задержки на переключение задач а они в windows очень существенны
    Не знаю, с этой стороны проблем вообще не заметил, переключаются задачи быстро, квант выставляю самый маленький - 1мс.

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Тут следует отметить что рендер на экране в zxmak2 осуществляется асинхронно от эмуляции, поэтому задержки UI влияют только на обновление окна, но не на саму эмуляцию (включая и запись в звуковой буфер). За счет этого удалось добиться высокой скорости реакции UI, при полном отсутствии влияния на поток эмуляции. Поэтому эмулятор так шустро реагирует на ресайз окна, не останавливается при перетаскивании и т.п. Добиться такого было непросто Изображение вначале заносится в текстуру из потока эмуляции и инвалидируется окно. А UI уже по запросу системы на WM_PAINT рендерит тектуру в окно. WM_PAINT система синхронизирует с vblank, поэтому изображение на дисплей попадат синхронно с разверткой. Независимо от источника синхронизации фреймов.
    Это хорошо, если два ядра и больше. А если одно, то выигрыша не будет.

  4. #54

    Регистрация
    18.01.2005
    Адрес
    Ростов-на-Дону
    Сообщений
    577
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Свежая версия

    v1.3.0a (11 Мая 2014)
    + Добавлена возможность настраивать набор ПЗУ

    ПЗУ опознаются по CRC. Если понадобится добавить какие-либо ПЗУ
    отсутствующие сейчас, присылайте их CRC и описание.

    Вскоре добавлю возможность добавлять свои списки ПЗУ, а также возможноcть экспортировать и импортировать эти списки.

    http://animalservice.ru/ZXDevStudio/...udio_1.3.0.zip

  5. #55

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Это хорошо, если два ядра и больше. А если одно, то выигрыша не будет.
    На одном ядре тоже отлично работает. В режиме vblank sync, сканлиния проверяется в цикле из потока эмуляции. Т.е. пока обрабатывается фрейм, scanline не проверяется. Пробовал из отдельного потока проверять, но такой вариант работает плохо, т.к. проверка съедает слишком много процессорного времени, не остается на полезную работу. Если вставить Sleep, то начинаются пропуски, т.к. система не успевает отдать процессор назад во время прохождения vblank. Умный Sleep (в зависимости от текущей scanline) ситуацию улучшает, но не в достаточной мере - пропуски всеравно появляются, хоть и реже.
    Последний раз редактировалось ZXMAK; 13.05.2014 в 14:20.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  6. #56

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,374
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    На одном ядре тоже отлично работает. В режиме vblank sync, сканлиния проверяется в цикле из потока эмуляции. Т.е. пока обрабатывается фрейм, scanline не проверяется. Пробовал из отдельного потока проверять, но такой вариант работает плохо, т.к. проверка съедает слишком много процессорного времени, не остается на полезную работу. Если вставить Sleep, то начинаются пропуски, т.к. система не успевает отдать процессор назад во время прохождения vblank. Умный Sleep (в зависимости от текущей scanline) ситуацию улучшает, но не в достаточной мере - пропуски всеравно появляются, хоть и реже.
    Что-то не сходится.

    Представим одноядерный комп:
    Если у тебя приоритет эмуля высокий, то сканирования линии развертки 'втупую' тут же посадит быстродействие всей системы. Если же приоритет эмуля низкий, то любые фоновые процессы с более высоким приоритетом тут же собьют твою синхронизацию.

  7. #57

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Что-то не сходится.

    Представим одноядерный комп:
    Если у тебя приоритет эмуля высокий, то сканирования линии развертки 'втупую' тут же посадит быстродействие всей системы. Если же приоритет эмуля низкий, то любые фоновые процессы с более высоким приоритетом тут же собьют твою синхронизацию.
    Чтото я не понял. Мы вроде про синхронизацию от звуковухи и асинхронную отрисовку говорили, при чем тут scanline. Асинхронная отрисовка работает хорошо как на одноядером, так и на многоядерном процессоре. Синхронизация vblank на одном ядре работает действительно хуже, но это с асинхронной отрисовкой никак не связано.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  8. #58

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,374
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Нет, я про другое. Если ты проверяешь сканлинию в цикле (для синхронизации по VBlank), то у тебя либо дико тормозит компьютер, если у эмуля приоритет высокий, либо если приоритет низкий, то эта методика неэффективна, ибо VBlank будет пропущен из-за активности более высокоприоритетных приложений. Что я тут непонятного написал?

  9. #59

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,374
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Lion17 Посмотреть сообщение
    Titus, что с хрюканьем в новой версии. Получилось при помощи настройки избавиться?
    Проверил на своем домашнем компе.
    Перестает хрюкать при -100..-65, и при 55..100.

    Что это за цифры?

  10. #60

    Регистрация
    18.01.2005
    Адрес
    Ростов-на-Дону
    Сообщений
    577
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Проверил на своем домашнем компе.
    Перестает хрюкать при -100..-65, и при 55..100.

    Что это за цифры?
    Выбирается точка синхронизации среди трех фреймов
    Первый фрейм сейчас проигрывается. Во втором уже залиты данные следующего фрейма. Если значение равно 0 - ждем (синхронизируемся) начала второго фрейма. Если -100 - ждем начала первого фрейма. Если +100 - ждем начала третьего фрейма. Промежуточные точки - соответственно ждем нужного места внутри первого или второго фрейма.

Страница 6 из 7 ПерваяПервая ... 234567 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •