public struct FastSetPixels<TColor,TBlend> : ISetPixels<TColor,TBlend> where TColor : unmanaged, IColor<TColor> where TBlend : unmanaged,IBlend<TColor>
{
public static void SetPixel(ref ColorBuf<TColor> image, ArrayView1D<int, Dense> zBuffer, TColor color, int zInd, int addr)
{
if (zBuffer[addr] < zInd)
{
zBuffer[addr] = zInd;
image.SetBlendOperation<TBlend>(addr, color);
}
}
public static void SetPixelAtomic(){}static unsafe F createUnsafe(ref MyStruct s1, int x)
{
// почему нету такого типа
// const int _x =x;
F d = (ref MyStruct s) =>
{
//x же константа, и никуда не убежит
//s.x = _x; // есть ли способы?
// по факту сюда просто Il-команду Ldc.I4 n вставить надо
};
return (d);
}public class UpdateCanvasListener
{
public Action Update { get; private set; }
public EventHandler< SKPaintSurfaceEventArgs> PaintHandler;
public UpdateCanvasListener(EventHandler<SKPaintSurfaceEventArgs> handler)
{
PaintHandler = handler;
}
}
class canvas{
public readonly static DependencyProperty SurfaceListenerProperty
= DependencyProperty.Register(nameof(SurfaceListener),
typeof(UpdateCanvasListener), typeof(FieldCanvas),
new PropertyMetadata(null, new PropertyChangedCallback(initSurfacePaintCommand)));
private static void initSurfacePaintCommand(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
FieldCanvas obj = (FieldCanvas)d;
var handlerOwner = e.NewValue as UpdateCanvasListener;
obj.PaintSurface += handlerOwner?.PaintHandler;
handlerOwner?.GetType().GetProperty("Update", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)?
.SetValue(handlerOwner, obj.InvalidateVisual };
}
}
(a^b ) | (b^c) > 0 может быть больше нуля, только если старший бит равен нулю, а будет равен нулю, только если a,b,c>0 или a,b,c<0, тогда точка лежит внутри треугольника