// tint texture private Action <EffectSpecialPaintShop> TintAction(SourceReady original, [CanBeNull] SourceReady mask, [CanBeNull] SourceReady overlay, Color[] colors, double alphaAdd) => e => { original.Set(e.FxInputMap, e.FxInputMapChannels); overlay.Set(e.FxOverlayMap, e.FxOverlayMapChannels); e.FxColor.Set(new Vector4(colors[0].R / 255f, colors[0].G / 255f, colors[0].B / 255f, (float)alphaAdd)); if (mask != null) { mask.Set(e.FxMaskMap, e.FxMaskMapChannels); var vColors = new Vector4[3]; var i = 0; for (; i < colors.Length - 1; i++) { vColors[i] = colors[i + 1].ToVector4(); } for (; i < 3; i++) { vColors[i] = new Vector4(1f); } e.FxColors.Set(vColors); e.TechTintMask.DrawAllPasses(DeviceContext, 6); } else { e.TechTint.DrawAllPasses(DeviceContext, 6); } };
// txMaps private Action <EffectSpecialPaintShop> MapsAction(SourceReady original, SourceReady mask, double reflection, double gloss, double specular, bool fixGloss) => e => { original.Set(e.FxInputMap, e.FxInputMapChannels); mask.Set(e.FxMaskMap, e.FxMaskMapChannels); e.FxUseMask.Set(mask != null); e.FxColor.Set(new Vector4((float)specular, (float)gloss, (float)reflection, 1f)); (fixGloss ? e.TechMapsFillGreen : e.TechMaps).DrawAllPasses(DeviceContext, 6); };
// pattern private Action <EffectSpecialPaintShop> PatternAction(SourceReady patternView, SourceReady aoView, SourceReady overlayView, Color[] colors) => e => { patternView.Set(e.FxInputMap, e.FxInputMapChannels); aoView.Set(e.FxAoMap, e.FxAoMapChannels); overlayView.Set(e.FxOverlayMap, e.FxOverlayMapChannels); if (colors.Length > 0) { var vColors = new Vector4[3]; for (var i = 0; i < colors.Length; i++) { vColors[i] = colors[i].ToVector4(); } e.FxColors.Set(vColors); e.TechColorfulPattern.DrawAllPasses(DeviceContext, 6); } else { e.TechPattern.DrawAllPasses(DeviceContext, 6); } };
// simple replacement private Action <EffectSpecialPaintShop> OverrideAction(SourceReady input) => e => { input.Set(e.FxInputMap, e.FxInputMapChannels); e.TechReplacement.DrawAllPasses(DeviceContext, 6); };
public static void Set([CanBeNull] this SourceReady ready, [NotNull] EffectOnlyResourceVariable resource, [NotNull] EffectOnlyVector4Variable channelsAssignments) { resource.SetResource(ready?.View); channelsAssignments.Set(ready?.ChannelsAssignments ?? default(Vector4)); }