#pragma kernel FgFiltBodyIndex uint _TexResX; uint _TexResY; //uint _NumBodies; //int _BodyIndices[10]; // ComputeShader.SetInts() doesn't work correctly int _BodyIndexAll; int _BodyIndex0; int _BodyIndex1; int _BodyIndex2; int _BodyIndex3; int _BodyIndex4; StructuredBuffer _BodyIndexMap; RWTexture2D _AlphaTex; [numthreads(8, 8, 1)] void FgFiltBodyIndex(uint3 id : SV_DispatchThreadID) { uint di = (id.x + id.y * _TexResX); uint bi4 = _BodyIndexMap[di >> 2]; int bi = 255; //_NumBodies = 2; //_BodyIndices[0] = 5; //_BodyIndices[1] = 0; switch (di & 3) { case 0: bi = bi4 & 255; break; case 1: bi = (bi4 >> 8) & 255; break; case 2: bi = (bi4 >> 16) & 255; break; case 3: bi = (bi4 >> 24) & 255; break; } bool mask0 = (bi != 255); bool mask = false; // _NumBodies == 0 ? mask0 : false; //for (uint i = 0; mask0 && i < _NumBodies; i++) //{ // mask = mask || (bi == _BodyIndices[i]); // if (mask) break; //} if (_BodyIndexAll != 0) { mask = mask0; } else { mask = (bi == _BodyIndex0) || (bi == _BodyIndex1) || (bi == _BodyIndex2) || (bi == _BodyIndex3) || (bi == _BodyIndex4); } _AlphaTex[id.xy] = float4(mask, mask, mask, mask); }