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); } }