В настоящее время я разрабатываю игровой движок C# в XNA, в настоящее время я работаю над рутиной для маскировки 2D-текстуры с другой 2D-текстурой.openTK: запустить цикл на gpu?
до сих пор у меня есть эта рутина:
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 в данный момент выполняет следующий метод:
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;
}
это работает, но не на основе, где я могу использовать его в режиме реального времени рендеринга Я бы хотел заменить петли Parallel.For
на цикл, выполняемый GPU параллельно. Я импортировал библиотеку OpenTK, но я не могу найти документацию для приложения исполнения кода графического процессора из графических drawcalls по умолчанию.
это возможно? Или я трачу свое время здесь?