我正在尝试使用 raycast 编写游戏,并且我想将 raycast 计算传输到 gpu,但由于某种原因它给出了资源不足错误
我应该在其中执行内核的函数
public unsafe void GpGPU_Ray(float px, float py, float[] angle, out float[] dists, out float[] offsets)
{
OpenCLTemplate.CLCalc.Program.Variable varPx = new OpenCLTemplate.CLCalc.Program.Variable(new float[1] { px });
OpenCLTemplate.CLCalc.Program.Variable varPy = new OpenCLTemplate.CLCalc.Program.Variable(new float[1] { py });
OpenCLTemplate.CLCalc.Program.Variable varAngle = new OpenCLTemplate.CLCalc.Program.Variable(angle);
OpenCLTemplate.CLCalc.Program.Variable varMap = new OpenCLTemplate.CLCalc.Program.Variable(NumberMap);
OpenCLTemplate.CLCalc.Program.Variable varWidth = new OpenCLTemplate.CLCalc.Program.Variable(new float[1] { Map.Width });
OpenCLTemplate.CLCalc.Program.Variable varDists = new OpenCLTemplate.CLCalc.Program.Variable(new float[angle.Length]);
OpenCLTemplate.CLCalc.Program.Variable varOffsets = new OpenCLTemplate.CLCalc.Program.Variable(new float[angle.Length]);
OpenCLTemplate.CLCalc.Program.Variable[] args = new OpenCLTemplate.CLCalc.Program.Variable[] { varPx, varPy, varAngle, varMap, varWidth, varDists, varOffsets};
var MaxWGSZ = OpenCLTemplate.CLCalc.CLDevices[0].MaxWorkGroupSize;
int[] workers = new int[1] { angle.Length };
RayCastKernel.Execute(args, workers);
//OpenCLTemplate.CLCalc.Program.Sync();
varPx.Dispose();
varPy.Dispose();
varAngle.Dispose();
varMap.Dispose();
varWidth.Dispose();
dists = new float[angle.Length];
offsets = new float[angle.Length];
//At this moment an exception occurs
varDists.ReadFromDeviceTo(dists);
varOffsets.ReadFromDeviceTo(offsets);
varDists.Dispose();
varOffsets.Dispose();
RayCastKernel.Dispose();
}