protected override bool BeginRenderBrushOverride(PrimitiveBuffer primitiveContext, RenderContext renderContext) { // Clear last context _lastBeginContext = null; bool result = false; foreach (var brushContext in _brushContexts) { // We can only begin a new render pass if the previous ended if (_lastBeginContext != null && brushContext.IsValid()) { _lastBeginContext.Render(0); _lastBeginContext.EndRender(); _lastBeginContext = null; } var currentResult = brushContext.BeginRenderBrushOverride(primitiveContext, renderContext); result |= currentResult; if (currentResult) { _lastBeginContext = brushContext; } } return(result); }
protected BrushContext CreateAndAddBrushContext() { BrushContext context = new BrushContext(this) { GetCachedFinalBrushTransform = GetCachedFinalBrushTransform, GetRelativeTransform = () => RelativeTransform, GetVertBounds = () => _vertsBounds }; _brushContexts.Add(context); return(context); }
void Init() { _streamProperty = new SProperty(typeof(int), 0); _geometryProperty = new SProperty(typeof(string), null); _borderColorProperty = new SProperty(typeof(Color), Color.Black); ISharpDXVideoPlayer player; // Primary video texture BrushContext videoContext = CreateAndAddBrushContext(); videoContext.ContextName = "MainVideoTexture"; videoContext.GetBrushTexture = () => { if (!GetPlayer(out player)) { return(null); } lock (player.SurfaceLock) { var texture = player.Texture; if (!videoContext.RefreshEffectParameters(player, texture)) { return(null); } return(texture); } }; // Check for multiple texture planes if (!GetPlayer(out player)) { return; } ISharpDXMultiTexturePlayer multiTexturePlayer = player as ISharpDXMultiTexturePlayer; if (multiTexturePlayer == null) { return; } for (int i = 0; i < multiTexturePlayer.TexturePlanes.Length; i++) { int plane = i; // All additional overlay textures var planeContext = CreateAndAddBrushContext(); planeContext.ContextName = "OverlayTexture_" + plane; planeContext.GetBrushTexture = () => { if (!GetPlayer(out player)) { return(null); } lock (multiTexturePlayer.SurfaceLock) { var texture = multiTexturePlayer.TexturePlanes[plane]; if (!planeContext.RefreshEffectParameters(player, texture)) { return(null); } return(texture); } }; } }