Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
.
Вот видео, которое обещал опубликовать. Качество изображения плохое, но оно не мешает увидеть задержки реакции.
На самом деле, задержка в терминале меньше. При включенной программе записи, все происходит раза в два медленнее. Процессор тоже нагружается значительно больше.
Поэтому, совершенно объективного представления о скорости реакции из этого видео составить нельзя, но четко видна закономерность между скоростью обновления окна и его размером.
(Поэтому я сделал несколько окон разных размеров.)
Мне кажется я точно понял причину торможения реакции изображения. Дело в постоянном вызове функции ColorToARGB(). На каждом событии и на каждом пикселе я вызываю эту функцию. Вместо того, чтобы расчитать цвета один раз и потом их использовать уже готовыми, я перерасчитываю их постоянно.
Думаю, дело в этом.
P.S. Забыл добавить, что общее кол-во объектов всех окон - 35.
.
Вот видео, которое обещал опубликовать. Качество изображения плохое, но оно не мешает увидеть задержки реакции.
На самом деле, задержка в терминале меньше. При включенной программе записи, все происходит раза в два медленнее. Процессор тоже нагружается значительно больше.
Поэтому, совершенно объективного представления о скорости реакции из этого видео составить нельзя, но четко видна закономерность между скоростью обновления окна и его размером.
(Поэтому я сделал несколько окон разных размеров.)
Мне кажется я точно понял причину торможения реакции изображения. Дело в постоянном вызове функции ColorToARGB(). На каждом событии и на каждом пикселе я вызываю эту функцию. Вместо того, чтобы расчитать цвета один раз и потом их использовать уже готовыми, я перерасчитываю их постоянно.
Думаю, дело в этом.
P.S. Забыл добавить, что общее кол-во объектов всех окон - 35.
Есть ли возможность взглянуть на исходники ? Мне для себя, для опыта .
Реально ли ускорить отрисовку в Canvas с помощью OpenCL?
Да. У OCL есть возможность распараллелить обработку + возможность оперировать векторами - это ускоряет процесс отрисовки/наложения.
Подробнее про использование векторов в статье Mathemat'a https://www.mql5.com/ru/articles/407
Да. У OCL есть возможность распараллелить обработку + возможность оперировать векторами - это ускоряет процесс отрисовки/наложения.
Подробнее про использование векторов в статье Mathemat'a https://www.mql5.com/ru/articles/407
Вы не сравнивали скорость Erase() из CCanvas и цикл по PixelSet() сделанный на OpenCl? По идее, при хорошем ускорении можно сделать тупой код рисования без кеширования промежуточных результатов и прочих сложностей.
Кстати, слои смешиваете по этой формуле?
Да, формула из википедии, для каждого компонента цвета: Result = Background + (Foreground − Background) * Alpha;
А с Erase, кстати, засада в OCL. Аналога memset нет (в отличии от CUDA). Поэтому сейчас приходится делать Erase в хосте и копировать зачищенный массив через CLBufferWrite, что точно не быстрее простого Erase.
Делать же массив задач для work-юнитов записывающих по 1 точке в массив пробовал, но не помню по скорости - выходило вроде медленней предыдущего способа.
А в OCL 1.2 есть clEnqueueFillBuffer() который это делает => по синтаксису MQL должен быть CLBufferFill()
Но эта обертка не реализована (т.к. портирована версия 1.1).
Да, формула из википедии, для каждого компонента цвета: Result = Background + (Foreground − Background) * Alpha;
А с Erase, кстати, засада в OCL. Аналога memset нет (в отличии от CUDA). Поэтому сейчас приходится делать Erase в хосте и копировать зачищенный массив через CLBufferWrite, что точно не быстрее простого Erase.
Делать же массив задач для work-юнитов записывающих по 1 точке в массив пробовал, но не помню по скорости - выходило вроде медленней предыдущего способа.
А в OCL 1.2 есть clEnqueueFillBuffer() который это делает => по синтаксису MQL должен быть CLBufferFill()
Но эта обертка не реализована (т.к. портирована версия 1.1).
В английской вике формула интереснее, можно смешать два полупрозрачных слоя. Это можно сделать полупрозрачный интерфейс и прочие красивости.
А это в моем случае не понадобилось, все смешивается корректно. Все что ниже -слоя А можно считать подложкой, даже если на ней слой B через который просвечивает сама подложка.