Heyo, esta es mi primera vez haciendo una pregunta aquí así que perdóname si algo me lío> ~ <Busco optimizaciones que puedo hacer en un programa de edición de gráficos
que estoy trabajando un programa similar a openCanvas, los anteriores que permitieron a varias personas dibujar en el mismo lienzo en tiempo real a través de Internet. OC es muy defectuoso y tiene muchas limitaciones, por lo que quería escribir esto.
Lo tengo configurado para que el lienzo se extienda "indefinidamente" en todas las direcciones y se compone de 512x512 bloques de píxeles que no se activan hasta que se dibujan, lo que debería ser realmente fácil de hacer, y Estaba pensando en usar Direct3D para acelerar el hardware, por lo tanto, los 512 bloques cuadrados.
Mi problema viene cuando quiero usar capas, no estoy muy seguro de cómo puedo componer capas rápidamente y sin usar mucha memoria, ya que mi objetivo son las tarjetas de video compatibles con DirectX9 con 128m de memoria y un sistema con aproximadamente 3.2 ghz de potencia de CPU y entre 2 y 8 gigas de ram. Tenía algunos enfoques diferentes que estaba pensando usar y me preguntaba cuál sería probablemente el mejor, y si había algo que pudiera analizar para que funcione mejor.
Mi primera idea fue hacer que el hardware gfx hiciera tanto trabajo como fuera posible haciendo que todas las capas de todos los bloques funcionaran como texturas, y se actualizarían bloqueando el área modificada, actualizándolas en la CPU, y desbloquearlos. Los bloques que no se cambian actualmente se aplanan en una textura y las capas individuales se guardan en la memoria del sistema, lo que reduciría la memoria gfx utilizada, pero podría aumentar significativamente el uso de ancho de banda entre el sistema y la memoria gfx. Puedo ver que el bloqueo y desbloqueo constantes también ralentizan potencialmente el sistema. Otro posible problema es que he escuchado a algunas personas usando hasta 200 capas, y no puedo pensar en ninguna buena manera de optimizar eso dado lo anterior.
Mi otra idea era componer las texturas -completamente- en la memoria del sistema, escribirlas en una textura y copiar esa textura a la memoria gfx para representar en cada bloque. Esto parece eliminar muchos de los problemas con el otro método, pero al mismo tiempo estoy moviendo todo el trabajo a la CPU, en lugar de equilibrarlo. Sin embargo, esto no es gran cosa, siempre y cuando todavía funcione rápidamente. Nuevamente, sin embargo, existe la cuestión de tener un par de cientos de capas. Sin embargo, en este caso, probablemente solo podría actualizar los píxeles finales que realmente están cambiando, que es lo que creo que hacen los programas de nombres más grandes como Sai y Photoshop.
Principalmente estoy buscando recomendaciones, sugerencias que puedan mejorar lo anterior, mejores métodos o enlaces a artículos que puedan estar relacionados con dicho proyecto. Mientras lo escribo en C++, no tengo problemas para traducir desde otros idiomas. Gracias por su tiempo ~
pregunta realmente genial! Me hace querer codificar la misma aplicación por el mero hecho de hacerlo, pero desafortunadamente no tengo tiempo; ( –