コード例 #1
0
        /// <summary>
        /// 描画処理を行います
        /// </summary>
        /// <param name="alphaBlendContext"></param>
        protected override void DrawImpl(AlphaBlendContext alphaBlendContext)
        {
            var initialAlpha = alphaBlendContext.Alpha;
            var initialDepth = alphaBlendContext.SRTDepth;

            manager.Draw((filename, structure) =>
            {
                var ir = resourceManager.GetResource <ImageResourceBase>(filename);
                if (ir != null)
                {
                    alphaBlendContext.Texture = ir.Texture;
                    alphaBlendContext.Vertex  = ir.Vertex;
                    alphaBlendContext.Alpha   = initialAlpha * structure.ComposedAlpha;
                    if (structure.ComposedBlendMode != BlendMode.None)
                    {
                        alphaBlendContext.BlendMode = structure.ComposedBlendMode;
                    }
                    alphaBlendContext.SRTDepth = initialDepth + 1;
                    foreach (var matrix in structure.ComposedMatrices)
                    {
                        alphaBlendContext.SetSRT(matrix, alphaBlendContext.SRTDepth++);
                    }
                    var pos = new Vector2(-ir.Width / 2, -ir.Height / 2);
                    if (Alignment == EffectAlignment.TopLeft)
                    {
                        pos = Vector2.Zero;
                    }
                    alphaBlendContext.SetSRT(Matrix.Translation(new Vector3(pos, 0)), alphaBlendContext.SRTDepth);
                    device.GetModule <AlphaBlend>().Draw(device, alphaBlendContext);
                }
            });
        }
コード例 #2
0
        public AlphaBlendContext Clone(AlphaBlendContext context)
        {
            var newContext = Get();

            context.Clone(newContext);
            return(newContext);
        }
コード例 #3
0
        /// <summary>
        /// 描画します
        /// </summary>
        /// <param name="alphaBlendContext">コンテキスト</param>
        /// <param name="startX">表示をはじめるピクセルのx座標(0からwidth)</param>
        /// <param name="endX">表示をおえるピクセルのx座標(0からwidthかつsx以上)</param>
        public void Draw(AlphaBlendContext alphaBlendContext, float startX, float endX)
        {
            if (Hidden || isSpace)
            {
                return;
            }

            if (prevPosition != Position || prevStartX != startX || prevEndX != endX)
            {
                prevPosition = Position;
                prevStartX   = startX;
                prevEndX     = endX;
                float posX0 = Position.X + startX, posX1 = Position.X + endX,
                      posY0 = Position.Y, posY1 = Position.Y + cci.Height;
                var rect = cci.GetActualUVRectangle(startX / (float)cci.Width, 0, endX / (float)cci.Width, 1);
                vertices.Write(new[] {
                    new ColoredTexturedVertex(new Vector3(posX0, posY0, 0.5f), rect.TopLeft),
                    new ColoredTexturedVertex(new Vector3(posX1, posY0, 0.5f), rect.TopRight),
                    new ColoredTexturedVertex(new Vector3(posX0, posY1, 0.5f), rect.BottomLeft),
                    new ColoredTexturedVertex(new Vector3(posX1, posY1, 0.5f), rect.BottomRight)
                });
            }
            alphaBlendContext.Texture = cci.Texture;
            alphaBlendContext.Vertex  = vertices;
            device.GetModule <AlphaBlend>().Draw(device, alphaBlendContext);
        }
コード例 #4
0
            /// <summary>
            /// 描画処理を行います
            /// </summary>
            /// <param name="alphaBlendContext"></param>
            protected override void DrawImpl(AlphaBlendContext alphaBlendContext)
            {
                if (imageResource == null)
                {
                    return;
                }
                var initialAlpha = alphaBlendContext.Alpha;
                var initialDepth = alphaBlendContext.SRTDepth;

                alphaBlendContext.Texture  = imageResource.Texture;
                alphaBlendContext.Vertex   = imageResource.Vertex;
                alphaBlendContext.Alpha    = initialAlpha * effestState.ComposedAlpha;
                alphaBlendContext.SRTDepth = initialDepth + 1;
                if (effestState.ComposedBlendMode != BlendMode.None)
                {
                    alphaBlendContext.BlendMode = effestState.ComposedBlendMode;
                }
                foreach (var matrix in effestState.ComposedMatrices)
                {
                    alphaBlendContext.SetSRT(matrix, alphaBlendContext.SRTDepth++);
                }
                var pos = new SharpDX.Vector2(-imageResource.Width / 2, -imageResource.Height / 2);

                alphaBlendContext.SetSRT(SharpDX.Matrix.Translation(new SharpDX.Vector3(pos, 0)), alphaBlendContext.SRTDepth);
                device.GetModule <AlphaBlend>().Draw(device, alphaBlendContext);
            }
コード例 #5
0
ファイル: GameComponent.cs プロジェクト: KHCmaster/PPD
 /// <summary>
 /// 描画できるかどうかイベントで判定します。
 /// </summary>
 /// <returns></returns>
 protected virtual bool OnCanDrawEvent(AlphaBlendContext alphaBlendContext, int depth, int childIndex)
 {
     if (CanDraw != null)
     {
         return(CanDraw(this, alphaBlendContext, depth, childIndex));
     }
     return(true);
 }
コード例 #6
0
 /// <summary>
 /// 描画します
 /// </summary>
 public void Draw(AlphaBlendContext alphaBlendContext)
 {
     if (Hidden || isSpace)
     {
         return;
     }
     Draw(alphaBlendContext, 0, cci.Width);
 }
コード例 #7
0
ファイル: PostDrawManager.cs プロジェクト: Bananaboy15/PPD
 /// <summary>
 /// 描画します。
 /// </summary>
 /// <param name="alphaBlendContext"></param>
 protected override void DrawImpl(AlphaBlendContext alphaBlendContext)
 {
     while (contexts.Count > 0)
     {
         var context = contexts.Dequeue();
         context.GameComponent.DrawInternal(context.AlphaBlendContext, context.Depth);
     }
 }
コード例 #8
0
ファイル: NumberPictureObject.cs プロジェクト: KHCmaster/PPD
 /// <summary>
 /// 描画の処理
 /// </summary>
 /// <param name="alphaBlendContext"></param>
 protected override void DrawImpl(AlphaBlendContext alphaBlendContext)
 {
     alphaBlendContext.Texture = imageResource.Texture;
     foreach (var vertices in numberVertices)
     {
         alphaBlendContext.Vertex = vertices;
         device.GetModule <AlphaBlend>().Draw(device, alphaBlendContext);
     }
 }
コード例 #9
0
ファイル: PostDrawManager.cs プロジェクト: Bananaboy15/PPD
 /// <summary>
 /// 追加します。
 /// </summary>
 /// <param name="gameComponent"></param>
 /// <param name="alphaBlendContext"></param>
 /// <param name="depth"></param>
 public void Add(GameComponent gameComponent, AlphaBlendContext alphaBlendContext, int depth)
 {
     contexts.Enqueue(new Context
     {
         GameComponent     = gameComponent,
         AlphaBlendContext = device.GetModule <AlphaBlendContextCache>().Clone(alphaBlendContext),
         Depth             = depth
     });
 }
コード例 #10
0
 protected override void DrawImpl(AlphaBlendContext alphaBlendContext)
 {
     alphaBlendContext.Texture = markConnectionCommon.ImageResource.Texture;
     foreach (var vertex in vertices)
     {
         alphaBlendContext.Vertex = vertex;
         device.GetModule <AlphaBlend>().Draw(device, alphaBlendContext, PrimitiveType.TriangleStrip, drawCount - 2,
                                              (MarkConnectionCommon.SplitCount - drawCount) / 2, drawCount);
     }
 }
コード例 #11
0
ファイル: PlayerBase.cs プロジェクト: KHCmaster/PPD
        protected override void DrawImpl(AlphaBlendContext alphaBlendContext)
        {
            TextureBase texture;

            if ((texture = Texture) == null)
            {
                return;
            }

            alphaBlendContext.Texture = texture;
            alphaBlendContext.Vertex  = vertices;
            device.GetModule <AlphaBlend>().Draw(device, alphaBlendContext);
        }
コード例 #12
0
 protected override void DrawImpl(AlphaBlendContext alphaBlendContext)
 {
     alphaBlendContext.Texture = trace.ImageResource.Texture;
     if (drawVerticesCount1 > 2)
     {
         alphaBlendContext.Vertex = vertices1;
         device.GetModule <AlphaBlend>().Draw(device, alphaBlendContext, PrimitiveType.TriangleStrip, drawVerticesCount1 - 2, 0, drawVerticesCount1);
     }
     if (drawVerticesCount2 > 2)
     {
         alphaBlendContext.Vertex = vertices2;
         device.GetModule <AlphaBlend>().Draw(device, alphaBlendContext, PrimitiveType.TriangleStrip, drawVerticesCount2 - 2, 0, drawVerticesCount2);
     }
 }
コード例 #13
0
ファイル: GameComponent.cs プロジェクト: KHCmaster/PPD
 /// <summary>
 /// 描画する
 /// </summary>
 /// <param name="alphaBlendContext"></param>
 /// <param name="depth"></param>
 /// <param name="childIndex"></param>
 protected virtual void Draw(AlphaBlendContext alphaBlendContext, int depth, int childIndex)
 {
     if (disposed || Hidden || alphaBlendContext.Alpha <= 0 || !OnCanDraw(alphaBlendContext, depth, childIndex) || !OnCanDrawEvent(alphaBlendContext, depth, childIndex))
     {
         return;
     }
     if (PostDrawManager != null)
     {
         PostDrawManager.Add(this, alphaBlendContext, depth);
     }
     else
     {
         DrawInternal(alphaBlendContext, depth);
     }
 }
コード例 #14
0
ファイル: TextureString.cs プロジェクト: KHCmaster/PPD
        private void DrawWithSpare(AlphaBlendContext alphaBlendContext)
        {
            float sum = 0;

            for (int i = 0; i < chars.Length; i++)
            {
                if (chars[i].Width + sum + sparechar.Width <= maxwidth)
                {
                    sum += chars[i].Width;
                    chars[i].Draw(alphaBlendContext);
                }
                else
                {
                    sparechar.Position = chars[i].Position;
                    sparechar.Draw(alphaBlendContext);
                    break;
                }
            }
        }
コード例 #15
0
        public AlphaBlendContext Get()
        {
            AlphaBlendContext ret;

            lock (allContexts)
            {
                if (allContexts.Count <= gotIndex)
                {
                    ret = new AlphaBlendContext();
                    allContexts.Add(ret);
                }
                else
                {
                    ret = allContexts[gotIndex];
                    ret.Initialize();
                }
                gotIndex++;
            }
            return(ret);
        }
コード例 #16
0
ファイル: GameComponent.cs プロジェクト: KHCmaster/PPD
 /// <summary>
 /// 子要素を描画します。
 /// </summary>
 /// <param name="alphaBlendContext"></param>
 /// <param name="currentAlpha"></param>
 /// <param name="currentBlendMode"></param>
 /// <param name="currentFilterCount"></param>
 /// <param name="depth"></param>
 protected virtual void DrawChildrenImpl(AlphaBlendContext alphaBlendContext, float currentAlpha, BlendMode currentBlendMode, int currentFilterCount, int depth)
 {
     if (Clip != null)
     {
         Matrix m = Matrix.Identity;
         for (var i = 0; i < alphaBlendContext.SRTDepth + 1; i++)
         {
             m *= alphaBlendContext.SRTS[i];
         }
         for (int i = children.Count - 1; i >= 0; i--)
         {
             var top    = Vector2.TransformCoordinate(children[i].Position, m).Y;
             var bottom = Vector2.TransformCoordinate(children[i].Position + new Vector2(0, children[i].Height), m).Y;
             if ((bottom < Clip.PositionY) || top > (Clip.PositionY + Clip.Height))
             {
                 continue;
             }
             alphaBlendContext.Alpha       = currentAlpha * children[i].Alpha;
             alphaBlendContext.BlendMode   = currentBlendMode;
             alphaBlendContext.FilterCount = currentFilterCount;
             if (OnCanDrawChild(alphaBlendContext, depth, i) && OnCanDrawChildEvent(alphaBlendContext, depth, i))
             {
                 children[i].Draw(alphaBlendContext, depth, i);
             }
         }
     }
     else
     {
         for (int i = children.Count - 1; i >= 0; i--)
         {
             alphaBlendContext.Alpha       = currentAlpha * children[i].Alpha;
             alphaBlendContext.BlendMode   = currentBlendMode;
             alphaBlendContext.FilterCount = currentFilterCount;
             if (OnCanDrawChild(alphaBlendContext, depth, i) && OnCanDrawChildEvent(alphaBlendContext, depth, i))
             {
                 children[i].Draw(alphaBlendContext, depth, i);
             }
         }
     }
 }
コード例 #17
0
 protected override bool OnCanDraw(AlphaBlendContext alphaBlendContext, int depth, int childIndex)
 {
     return(displayNum >= 2);
 }
コード例 #18
0
 protected override bool OnCanDraw(AlphaBlendContext alphaBlendContext, int depth, int childIndex)
 {
     return(!(mk1.Hidden || mk2.Hidden || mk1.ColorHidden || mk2.ColorHidden));
 }
コード例 #19
0
 protected override bool OnCanDraw(AlphaBlendContext alphaBlendContext, int depth, int childIndex)
 {
     return(resource != null && rectangleWidth > 0 && rectangleHeight > 0 && borderThickness > 0);
 }
コード例 #20
0
 protected override bool OnCanDraw(AlphaBlendContext alphaBlendContext, int depth, int childIndex)
 {
     return(initialized);
 }
コード例 #21
0
ファイル: DxTextBox.cs プロジェクト: KHCmaster/PPD
 protected override bool OnCanDraw(AlphaBlendContext alphaBlendContext, int depth, int childIndex)
 {
     return(!(PPDSetting.Setting.TextBoxDisabled || Hidden || (DrawOnlyFocus && !Focused)));
 }
コード例 #22
0
ファイル: DxTextBox.cs プロジェクト: KHCmaster/PPD
 protected override void DrawImpl(AlphaBlendContext alphaBlendContext)
 {
     //host.SetClipping((int)this.ScreenPos.X - thickness, (int)this.ScreenPos.Y - thickness, (int)TextBoxWidth + caretMargin + 2 * thickness, (int)TextBoxHeight + 2 * thickness + caretMargin);
     //host.RestoreClipping();
 }
コード例 #23
0
ファイル: VMR9Movie.cs プロジェクト: KHCmaster/PPD
 protected override bool OnCanDraw(AlphaBlendContext alphaBlendContext, int depth, int childIndex)
 {
     return(allocator != null && allocator.TextureCreated);
 }
コード例 #24
0
ファイル: GameComponent.cs プロジェクト: KHCmaster/PPD
        internal void DrawInternal(AlphaBlendContext alphaBlendContext, int depth)
        {
            if (Clip != null)
            {
                Clip.GameHost.SetClipping(Clip.PositionX, Clip.PositionY, Clip.Width, Clip.Height);
            }
            if (preScreenFilters.Count > 0)
            {
                device.GetModule <AlphaBlend>().Flush();
                foreach (var filter in preScreenFilters)
                {
                    filter.Filter(device);
                }
            }
            if (BlendMode != BlendMode.None)
            {
                alphaBlendContext.BlendMode = BlendMode;
            }
            alphaBlendContext.SetSRT(Matrix.Transformation2D(ScaleCenter, 0, Scale, RotationCenter, Rotation, Position + Offset), depth);
            alphaBlendContext.SRTDepth = depth;
            for (var i = colorFilters.Count - 1; i >= 0; i--)
            {
                alphaBlendContext.SetFilter(colorFilters[i], alphaBlendContext.FilterCount++);
            }
            var currentAlpha       = alphaBlendContext.Alpha;
            var currentBlendMode   = alphaBlendContext.BlendMode;
            var currentFilterCount = alphaBlendContext.FilterCount;
            var enabledRenderMask  = renderMasks.Where(m => m.Enabled).ToArray();

            WorkspaceTexture renderMaskTexture = null;

            if (enabledRenderMask.Length > 0 && !PPDSetting.Setting.ShaderDisabled)
            {
                device.GetModule <AlphaBlend>().Flush();
                var renderTarget = device.GetRenderTarget();
                renderMaskTexture = device.Workspace.Get();
                device.SetRenderTarget(renderMaskTexture);
                device.Clear();
                DrawImpl(alphaBlendContext);
                device.GetModule <AlphaBlend>().Flush();
                device.SetRenderTarget(renderTarget);
            }
            WorkspaceTexture maskTexture = null;

            if (Mask != null && !PPDSetting.Setting.ShaderDisabled)
            {
                device.GetModule <AlphaBlend>().Flush();
                maskTexture = device.Workspace.Get();
                var renderTarget = device.GetRenderTarget();
                device.SetRenderTarget(maskTexture);
                device.Clear(MaskType == MaskType.Include ? new Color4(0, 0, 0, 0) : new Color4(0, 0, 0, 1));
                using (var handler = device.GetModule <AlphaBlend>().StartMaskGeneration(MaskType))
                {
                    Mask.Draw(device.GetModule <AlphaBlendContextCache>().Clone(alphaBlendContext), depth + 1, 0);
                }
                device.SetRenderTarget(renderTarget);
                alphaBlendContext.MaskTexture = maskTexture.Texture;
            }
            WorkspaceTexture filterTargetTexture = null;
            WorkspaceTexture prevRenderTarget    = null;

            if (currentFilterCount >= 2 && !PPDSetting.Setting.ShaderDisabled)
            {
                device.GetModule <AlphaBlend>().Flush();
                alphaBlendContext.Alpha     = 1;
                alphaBlendContext.BlendMode = BlendMode.Normal;
                filterTargetTexture         = device.Workspace.Get();
                prevRenderTarget            = device.GetRenderTarget();
                device.SetRenderTarget(filterTargetTexture);
                device.Clear(new Color4(0, 0, 0, 0));
            }
            DrawImpl(alphaBlendContext);
            if (currentFilterCount >= 2 && !PPDSetting.Setting.ShaderDisabled)
            {
                device.GetModule <AlphaBlend>().Flush();
                var context = device.GetModule <AlphaBlendContextCache>().Get();
                context.Alpha     = 1;
                context.BlendMode = BlendMode.Normal;
                context.Vertex    = device.GetModule <ShaderCommon>().ScreenVertex;
                context.SetSRT(Matrix.Identity, 0);
                WorkspaceTexture renderedTexture = filterTargetTexture;
                for (var i = currentFilterCount - 2; i >= 0; i--)
                {
                    context.Texture = renderedTexture.Texture;
                    var newRenderTarget = device.Workspace.Get();
                    device.SetRenderTarget(newRenderTarget);
                    context.SetFilter(alphaBlendContext.Filters[i], 0);
                    context.FilterCount = 1;
                    device.GetModule <AlphaBlend>().Draw(device, context);
                    renderedTexture.Dispose();
                    renderedTexture = newRenderTarget;
                    if (i == 0)
                    {
                        context.Alpha       = currentAlpha;
                        context.BlendMode   = currentBlendMode;
                        context.Texture     = renderedTexture.Texture;
                        context.FilterCount = 0;
                        device.SetRenderTarget(prevRenderTarget);
                        device.GetModule <AlphaBlend>().Draw(device, context);
                    }
                }
                if (renderedTexture != null)
                {
                    renderedTexture.Dispose();
                }
            }
            if (enabledRenderMask.Length > 0 && !PPDSetting.Setting.ShaderDisabled)
            {
                device.GetModule <AlphaBlend>().Flush();
                foreach (var renderMask in enabledRenderMask)
                {
                    renderMask.Draw(device, renderMaskTexture);
                }
                if (renderMaskTexture != null)
                {
                    renderMaskTexture.Dispose();
                }
            }
            DrawChildrenImpl(alphaBlendContext, currentAlpha, currentBlendMode, currentFilterCount, depth + 1);
            if (Mask != null && !PPDSetting.Setting.ShaderDisabled)
            {
                alphaBlendContext.MaskTexture = null;
                if (maskTexture != null)
                {
                    maskTexture.Dispose();
                }
            }
            alphaBlendContext.SRTDepth    = depth;
            alphaBlendContext.Alpha       = currentAlpha;
            alphaBlendContext.BlendMode   = currentBlendMode;
            alphaBlendContext.FilterCount = currentFilterCount;
            AfterChildenDraw(alphaBlendContext);
            if (postScreenFilters.Count > 0)
            {
                device.GetModule <AlphaBlend>().Flush();
                foreach (var filter in postScreenFilters)
                {
                    filter.Filter(device);
                }
            }
            if (Clip != null)
            {
                Clip.GameHost.RestoreClipping();
            }
        }
コード例 #25
0
ファイル: PictureObject.cs プロジェクト: KHCmaster/PPD
 /// <summary>
 /// 描画します
 /// </summary>
 /// <param name="alphaBlendContext"></param>
 protected override void DrawImpl(AlphaBlendContext alphaBlendContext)
 {
     alphaBlendContext.Texture = imageResource.Texture;
     alphaBlendContext.Vertex  = useCustomVertices ? vertices : imageResource.Vertex;
     device.GetModule <AlphaBlend>().Draw(device, alphaBlendContext);
 }
コード例 #26
0
ファイル: GameComponent.cs プロジェクト: KHCmaster/PPD
 /// <summary>
 /// 子を描画した後の描画の処理
 /// </summary>
 /// <param name="alphaBlendContext"></param>
 protected virtual void AfterChildenDraw(AlphaBlendContext alphaBlendContext)
 {
 }
コード例 #27
0
ファイル: GameComponent.cs プロジェクト: KHCmaster/PPD
 /// <summary>
 /// 描画の処理
 /// </summary>
 /// <param name="alphaBlendContext"></param>
 protected virtual void DrawImpl(AlphaBlendContext alphaBlendContext)
 {
 }
コード例 #28
0
 protected override bool OnCanDraw(AlphaBlendContext alphaBlendContext, int depth, int childIndex)
 {
     return(!Hidden && OverFocused);
 }
コード例 #29
0
ファイル: GameComponent.cs プロジェクト: KHCmaster/PPD
 /// <summary>
 /// 描画するかどうかを返します
 /// </summary>
 /// <param name="alphaBlendContext"></param>
 /// <param name="depth"></param>
 /// <param name="childIndex"></param>
 /// <returns></returns>
 protected virtual bool OnCanDraw(AlphaBlendContext alphaBlendContext, int depth, int childIndex)
 {
     return(true);
 }
コード例 #30
0
ファイル: DummyDrawComponent.cs プロジェクト: KHCmaster/PPD
 protected override void Draw(AlphaBlendContext alphaBlendContext, int depth, int childIndex)
 {
     Drawing?.Invoke();
 }