Edición de texturas con Multi-Threading

Así que tengo este Texture2D gigante (4096 * 4096, no pregunto por qué) y todos sus datos almacenados en una matriz de colors. Cuando presiono MouseButton izquierdo, creo un azul de 64 por 64 cuadrados en la position del cursor usando el siguiente código.

int dx = Mouse.GetState().X + (int)camera.Pos.X - graphics.PrefernetworkingBackBufferWidth / 2; int dy = Mouse.GetState().Y + (int)camera.Pos.Y - graphics.PrefernetworkingBackBufferHeight / 2; for (int x = dx; x < dx + 64; x++) { for (int y = dy; y < dy + 64; y++) { textureData[x + y * texture.Width] = Color.Blue; } } texture.SetData<Color>(lvlData); 

Lamentablemente, esto bloquea el progtwig por una fracción de segundo. Entonces pensé, tal vez es posible ejecutar esa pieza de código en un hilo diferente.

¿Es posible hacer múltiples hilos y, si es así, cómo voy a hacer eso? ¿O es otra forma de optimizar esto?

¡Gracias por cualquier ayuda!

Establecer datos en la textura es una operación costosa a ese tamaño de resolución. Debe evitarse si planea hacer eso en cada fotogtwig.

No sé por qué quieres establecer los datos en la image de origen de esa manera, pero para la textura hay un par de opciones:

Si solo quiere el cuadrado azul en la position actual del mouse:

  1. Dibuja la textura en la pantalla y luego dibuja un cuadrado azul donde está el mousecursor.

  2. Alternativamente, crea un RenderTarget2D ; dibujar la textura y luego dibujar el cuadrado azul para rendertarget.

Si quieres cuadrados azules como si estuvieran "pintados" (por lo tanto, no eliminados, que es lo que deduzco del código que publicaste):

  1. Cree un RenderTarget2D que no se borre entre los frameworks; es decir, use el indicador RenderTargetUsage.PreserveContents al crear el rendertarget, dibuje el cuadrado azul al rendertarget cada vez que click el button del mouse.

  2. Mantenga una list de clics del mouse y dibuje los cuadrados azules en un spritebatch después de dibujar la textura en la pantalla.