如何在Alea中使用/转换C#类?

时间:2019-05-02 19:12:36

标签: c# class gpu aleagpu

我正在开发RayMarching程序(家庭作业),并且希望它运行的更快,因此我将GPU与ALEA扩展一起使用。我有一个问题,因为我无法在(GPU)的并行环境中使用一流的相机。 谢谢你的帮助。

我已经尝试过更改类的标签并在

的Parallel中创建它们
(y & x2).ExistAbstract(x2)
        [GpuManaged, Test]
        public static Bitmap DelegateWithClosureGpu(Scene s, Camera my_camera, SDF sdfList, int w, int h)
        {
            my_camera.SetScreenData(w,h);

            int nbsteps;
            float dyst;
            Bitmap res = new Bitmap(w,h);
            ParallelForTest.camera = my_camera;
            Gpu.Default.For(0, res.Height , i =>
            {
                for (int j = 0; j < res.Height; j++)
                {
                    Vector3 ray = ParallelForTest.camera.GetRay(i, j);
                    ray.Normalized();
                    s.RayMarch(sdfList, ray, ParallelForTest.camera.origin,out nbsteps,out dyst);
                    if (Scene.FloatEq(dyst,0f))
                    {
                        res.SetPixel(i,j,Color.White);
                    }
                    else
                    {
                        res.SetPixel(i,j,Color.Black);
                    }
                }
            });
            return res;
        }

和类向量”只是一个重载运算符的自定义类。

1 个答案:

答案 0 :(得分:0)

您应该将一些变量设置为相机的变量,并在并行的for循环中使用它们,还应该制作相机功能的静态版本,并在for循环中使用它们。 虽然我不确定这是否可以解决问题,但是我认为您应该尝试一下,因为您说不能同时使用类相机,而现在不会在其中使用它。