одна переменная int работает как индекс массива, а другая нет

Я работаю над вычислительным шейдером марширующего куба в единстве, в какой-то момент мне нужно найти индекс, чтобы я мог создавать вершины, соединяя эти ребра, вот код

uint cubeIndex = 0;

for (int i = 0; i < 8; i++)
{
    if (cube[i].isInside == 1)
    {
        cubeIndex |= 1 << i;
    }
}

    return cubeIndex;

проблема в том, что когда я использую cubeIndex в качестве индекса массива, это дает мне эту ошибку: Программа «CSMain», ошибка X4505: сумма временных регистров и индексируемых временных регистров превышает предел 4096 в ядре CSMain.

если изменить индекс массива на любой другой int, код работает!

вот мое основное ядро

 uint myCubeIndex = CubeInit(cube);
Edges midPoints = CalMidPoints(cube);

int edge = triTable[myCubeIndex][0];

float3 position = midPoints.midPoints[edge];

vertexArray.Append(position);

person alireza karampoor    schedule 31.03.2021    source источник


Ответы (1)


Я считаю, что битовый сдвиг с единицей либо уходит в минус, что дает вам переполнение. или !!

Как использовать огромный массив в HLSL (ошибка X4505)

эта проблема, поскольку кто-то здесь также пытался поместить слишком много вершин в шейдер hlsl, пытаясь заставить работать марширующие кубы, и ему нужно было ограничить его до 4096

person Jaibeer Dugal    schedule 31.03.2021
comment
я не понимаю, как это могло стать отрицательным числом, цикл может сдвинуть его максимум на 8 цифр влево, есть ли какое-то правило, о котором я не знаю? - person alireza karampoor; 31.03.2021
comment
В некоторых языках я точно не помню, как это работает, но вот основная концепция. самый левый бит представляет знак, поэтому 1 | 0001 теперь будет +1, если вы достигнете 1 | 1111, и, но снова сдвиньте, он должен использовать больший размер бита, поэтому он будет добавлять 0 соответственно, как 0011 | 1111, делая крайнюю левую цифру 0 представляет отрицательное число. извините, это не очень хороший пример, так как я не помню точных данных. Я бы сказал, попробуйте длинное целое число без знака, но марширующий куб все еще использует большие значения. - person Jaibeer Dugal; 02.04.2021
comment
спс я проверю - person alireza karampoor; 02.04.2021