Esempio n. 1
0
        public void Draw(IDbgPrim parentPrim, Matrix world)
        {
            PreDraw();

            // Always draw unparented children :fatcat:
            foreach (var c in UnparentedChildren)
            {
                c.Draw(this, world);
            }

            if (!EnableDraw)
            {
                return;
            }

            if (Category != DbgPrimCategory.AlwaysDraw && !DBG.GetCategoryEnableDraw(Category))
            {
                return;
            }

            if (Shader == GFX.DbgPrimSolidShader || Shader == GFX.DbgPrimWireShader)
            {
                if (OverrideColor.HasValue)
                {
                    var overrideColor = new Vector3(OverrideColor.Value.R / 255f, OverrideColor.Value.G / 255f, OverrideColor.Value.B / 255f);
                    if (Shader is DbgPrimSolidShader solid)
                    {
                        solid.VertexColorEnabled = false;
                        solid.DiffuseColor       = overrideColor;
                        solid.Alpha = OverrideColor.Value.A / 255f;
                    }
                    else if (Shader is DbgPrimWireShader wire)
                    {
                        wire.VertexColorEnabled = false;
                        wire.DiffuseColor       = overrideColor;
                        wire.Alpha = OverrideColor.Value.A / 255f;
                    }
                }
                else
                {
                    if (Shader is DbgPrimSolidShader solid)
                    {
                        solid.VertexColorEnabled = true;
                        solid.DiffuseColor       = Vector3.One;
                        solid.Alpha = 1;
                    }
                    else if (Shader is DbgPrimWireShader wire)
                    {
                        wire.VertexColorEnabled = true;
                        wire.DiffuseColor       = Vector3.One;
                        wire.Alpha = 1;
                    }
                }
            }

            var effect = Shader.Effect;

            foreach (var pass in effect.CurrentTechnique.Passes)
            {
                if (Shader == GFX.DbgPrimSolidShader || Shader == GFX.DbgPrimWireShader)
                {
                    GFX.World.ApplyViewToShader(Shader, Transform.WorldMatrix * world);
                }
                pass.Apply();
                DrawPrimitive();
            }

            if (Shader == GFX.DbgPrimSolidShader || Shader == GFX.DbgPrimWireShader)
            {
                if (Shader is DbgPrimSolidShader solid)
                {
                    solid.VertexColorEnabled = true;
                    solid.DiffuseColor       = Vector3.One * 2;
                }
                else if (Shader is DbgPrimWireShader wire)
                {
                    wire.VertexColorEnabled = true;
                    wire.DiffuseColor       = Vector3.One * 2;
                }
            }

            foreach (var c in Children)
            {
                c.Draw(this, Transform.WorldMatrix * world);
            }
        }