簡體   English   中英

openTK:在gpu上運行循環?

[英]openTK: run for loop on gpu?

我目前正在使用XNA開發C#游戲引擎,目前正在研究用另一個2D紋理遮罩2D紋理的例程。

到目前為止,我有這個例程:

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庫,但是從默認的圖形調用中找不到關於GPU代碼執行appart的任何文檔。

這可能嗎? 還是我在這里浪費時間?

OpenTK是OpenGL(和其他媒體API)的CLI / CLR / .Net綁定。 OpenGL是針對GPU的繪圖API。 在GPU上控制繪圖操作的程序稱為“着色器” OpenGL具有加載和使用着色器進行繪制操作的功能。 因此,如果要使用OpenTK→OpenGL,則必須學習OpenGL API以及如何編寫OpenGL着色器程序。

這可能嗎? 還是我在這里浪費時間?

最肯定的。 這是您在所謂的片段着色器中所做的主要示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM