void SetKernelOffsets()
{
if ((dirtyFlags & DirtyFlags.KernelOffsets) != 0)
{
var dx = 1.0f / (float) width;
var dy = 1.0f / (float) height;
horizontalKernels[0].X = 0.0f;
horizontalKernels[0].Y = 0.0f;
verticalKernels[0].X = 0.0f;
verticalKernels[0].Y = 0.0f;
for (int i = 0; i < kernelSize / 2; i++)
{
int baseIndex = i * 2;
int left = baseIndex + 1;
int right = baseIndex + 2;
// XNA BloomPostprocess サンプルに従ってオフセットを決定。
float sampleOffset = i * 2 + 1.5f;
var offsetX = dx * sampleOffset;
var offsetY = dy * sampleOffset;
horizontalKernels[left].X = offsetX;
horizontalKernels[right].X = -offsetX;
verticalKernels[left].Y = offsetY;
verticalKernels[right].Y = -offsetY;
}
dirtyFlags &= ~DirtyFlags.KernelOffsets;
}
}