Am I using SampleMapRenderer incorrectly or missing something? I'm getting CyclicGraphExceptions but I don't see what the problem could be. Here's the code:
private static IDeviceImage SampleAt(IDeviceContext dc, IDeviceImage src, float offsetX, float offsetY)
{
IDeviceImage sm = new HlslBinaryOperatorEffect(dc,
new ScenePositionEffect(dc, ScenePositionFormat.XY01),
HlslBinaryOperator.Add,
new Vector4Float(offsetX, offsetY, 0f, 0f));
SampleMapRenderer r = new SampleMapRenderer(dc);
r.Properties.Input.Set(src);
r.Properties.SampleMaps.SetCount(1);
r.Properties.SampleMaps[0].Set(sm);
r.Properties.EdgeMode.SetValue(SampleMapEdgeMode.Clamp);
r.Properties.SamplingMode.SetValue(SampleMapSamplingMode.Linear);
return r;
}
protected override IDeviceImage OnCreateOutput(IDeviceContext dc)
{
IDeviceImage src = Environment.SourceImage;
//IDeviceImage sX1 = SampleAt(dc, src, -0.25f, 0f), sX2 = SampleAt(dc, src, 0.25f, 0f); return new HlslBinaryOperatorEffect(dc, new HlslBinaryFunctionEffect(dc, HlslBinaryFunction.Dot, sX1, sX1), HlslBinaryOperator.Subtract, new HlslBinaryFunctionEffect(dc, HlslBinaryFunction.Dot, sX2, sX2)); // Doesn't help
return new HlslBinaryOperatorEffect(dc,
new HlslBinaryFunctionEffect(dc, HlslBinaryFunction.Dot, SampleAt(dc, src, -0.25f, 0f), SampleAt(dc, src, -0.25f, 0f)),
HlslBinaryOperator.Subtract,
new HlslBinaryFunctionEffect(dc, HlslBinaryFunction.Dot, SampleAt(dc, src, +0.25f, 0f), SampleAt(dc, src, +0.25f, 0f)));
}