问题描述
我正在统一开发一个行进立方体计算着色器,我需要找到一个索引,以便我可以通过连接这些边来制作顶点,这里是代码
uint cubeIndex = 0;
for (int i = 0; i < 8; i++)
{
if (cube[i].isInside == 1)
{
cubeIndex |= 1 << i;
}
}
return cubeIndex;
问题是当我使用“cubeIndex”作为数组索引时,它给了我这个错误: 程序“CSMain”,错误 X4505:内核 CSMain 中临时寄存器和可索引临时寄存器的总和超过 4096 的限制。
如果将数组索引更改为任何其他 int 代码有效!
这是我的主内核
uint myCubeIndex = CubeInit(cube);
Edges midPoints = CalMidPoints(cube);
int edge = triTable[myCubeIndex][0];
float3 position = midPoints.midPoints[edge];
vertexArray.Append(position);
解决方法
我相信单位的位移要么进入负数,给你一个溢出。或者!!
How to use a huge array in HLSL (error X4505)
这个问题,因为这里有人也试图在 hlsl 着色器中放置太多顶点,试图使行进立方体工作,并且需要将其限制为 4096