Ich entwickle gerade eine C# -Spielengine in XNA, ich arbeite gerade an einer Routine zum Maskieren einer 2D-Textur mit einer anderen 2D-Textur.openTK: Run für Schleife auf GPU?
bisher habe ich diese Routine:
public static Texture2D MaskToTexture2DByTexture2D(GraphicsDevice device, Texture2D texture, Texture2D mask)
{
Texture2D output = new Texture2D(device, texture.Width, texture.Height);
int numberOfPixels = texture.Width * texture.Height;
Color[] ColorArray = new Color[numberOfPixels];
Color[] maskColorArray = new Color[numberOfPixels];
float[] maskArray = new float[numberOfPixels];
mask = ResizeEngine.ResizeToSize(device, mask, new Point(texture.Width, texture.Height));
mask.GetData<Color>(maskColorArray);
maskArray = ColorEngine.ConvertColorArrayToMaskValues(maskColorArray);
texture.GetData<Color>(ColorArray);
Parallel.For(0, ColorArray.Length, index =>
{
ColorArray[index] *= maskArray[index];
});
output.SetData<Color>(ColorArray);
return output;
}
ColorEngine gerade ausgeführt wird folgende Methode:
public static float[] ConvertColorArrayToMaskValues(Color[] colors)
{
float[] mask = new float[colors.Count()];
Parallel.For(0, colors.Length, index => { mask[index] = ConvertColorToMaskValue(colors[index]); });
return mask;
}
public static float ConvertColorToMaskValue(Color color)
{
float mask = (color.R + color.G + color.B)/765.0f;
return mask;
}
dies funktioniert, aber nicht auf einer Basis, wo ich es in der Echtzeit nutzen können machen Routine würde ich gerne die Parallel.For
Schleifen in eine Schleife parallel von der GPU ausgeführt ersetzen. Ich habe die OpenTK-Bibliothek importiert, aber ich kann keine Dokumentation für die GPU-Codeausführung finden, die aus den Standard-Grafik-Drawcalls stammt.
ist das möglich? Oder verschwende ich meine Zeit hier?