Realización de un proyecto crowdsourced en Canvas - página 19
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
.
Aquí está el vídeo que prometí publicar. La calidad de la imagen es pobre, pero no impide ver los retrasos en la respuesta.
De hecho, hay menos retraso en la terminal. Cuando la grabadora está encendida, todo es el doble de lento. El procesador también carga mucho más.
Por lo tanto, no es posible obtener una idea completamente objetiva de la velocidad de reacción a partir de este vídeo, pero muestra claramente un patrón entre la frecuencia de actualización de la ventana y el tamaño de la misma.
(Por eso hice varias ventanas de diferentes tamaños).
Creo que tengo la razón exacta de la ralentización de la respuesta de la imagen. Es la llamada constante de la función ColorToARGB(). En cada evento y en cada píxel llamo a esta función. En lugar de calcular los colores una vez y usarlos ya, los recalculo todo el tiempo.
Creo que esta es la cuestión.
P.D. Se me olvidó añadir que el número total de objetos de todas las ventanas es de 35.
.
Aquí está el vídeo que prometí publicar. La calidad de la imagen es pobre, pero no impide ver los retrasos en la respuesta.
De hecho, hay menos retraso en la terminal. Cuando la grabadora está encendida, todo es el doble de lento. El procesador también carga mucho más.
Por lo tanto, no es posible hacerse una idea completamente objetiva de la velocidad de reacción a partir de este vídeo, pero puedo ver claramente un patrón entre la tasa de refresco y el tamaño de la ventana.
(Por eso hice varias ventanas de diferentes tamaños).
Creo que tengo la razón exacta de la ralentización de la respuesta de la imagen. Es la llamada constante de la función ColorToARGB(). En cada evento y en cada píxel llamo a esta función. En lugar de calcular los colores una vez y usarlos ya, los recalculo todo el tiempo.
Creo que esa es la cuestión.
P.D. Se me olvidó añadir que el número total de objetos de todas las ventanas es de 35.
¿Es posible echar un vistazo al código fuente? Para mí, para mi experiencia.
¿Es realista acelerar el renderizado en Canvas con OpenCL?
Sí. OCL tiene la capacidad de paralelizar el procesamiento + la capacidad de operar en vectores - esto acelera el proceso de renderizado/superposición.
Más información sobre el uso de vectores en el artículo de Mathemat https://www.mql5.com/ru/articles/407
Sí. OCL tiene la posibilidad de paralelizar el procesamiento + la posibilidad de operar con vectores - esto acelera el proceso de dibujo/colocación.
Más información sobre el uso de vectores en el artículo de Mathemat https://www.mql5.com/ru/articles/407
¿Has comparado la velocidad de Erase() de CCanvas y el bucle PixelSet() realizado en OpenCl? En teoría, con un buen aumento de velocidad, se puede hacer un código de dibujo tonto sin almacenar en caché los resultados intermedios y otras complicaciones.
Por cierto, ¿se mezclan las capas con esta fórmula?
Sí, la fórmula está sacada de la wikipedia, para cada componente de color: Resultado = Fondo + (Primer plano - Fondo) * Alfa;
Por cierto, hay un problema con el borrado en la OCL. No existe un análogo de memset (a diferencia de CUDA). Por eso ahora tengo que hacer un Erase en el host y copiar el array limpiado a través de CLBufferWrite, lo que ciertamente no es más rápido que un simple Erase.
Por otro lado, probé a hacer un array de tareas para las unidades de trabajo escribiendo 1 punto en el array pero no recuerdo la velocidad - parecía ser más lento que el método anterior.
Y en OCL 1.2 hayclEnqueueFillBuffer() que hace eso => según la sintaxis MQL debería haber CLBufferFill()
Pero este wrapper no está implementado (ya que la versión 1.1 está portado).
Sí, la fórmula está sacada de la wikipedia, para cada componente de color: Resultado = Fondo + (Primer plano - Fondo) * Alfa;
Por cierto, hay un problema con el borrado en la OCL. No existe un análogo de memset (a diferencia de CUDA). Por eso ahora tengo que hacer un Erase en el host y copiar el array limpiado a través de CLBufferWrite, lo que ciertamente no es más rápido que un simple Erase.
Por otro lado, probé a hacer un array de tareas para las unidades de trabajo escribiendo 1 punto en el array pero no recuerdo la velocidad - parecía ser más lento que el método anterior.
Y en OCL 1.2 hayclEnqueueFillBuffer() que hace eso => según la sintaxis MQL debería haber CLBufferFill()
Pero este wrapper no está implementado (ya que la versión 1.1 está portado).
En la víctima inglesa, la fórmula es más interesante, se pueden mezclar dos capas translúcidas. Es posible hacer una interfaz translúcida y otras cosas bonitas.
En mi caso no lo he necesitado, todo se mezcla correctamente. Todo lo que esté por debajo de la capa A puede considerarse el sustrato, incluso si la capa B está encima, a través de la cual brilla el propio sustrato.