private void DrawMesh(MeshRenderData data, BoxedValueStore <string> metadata) { var mesh = data.Mesh; device.SetVertexBuffer(mesh.VertexBuffer); device.Indices = mesh.IndexBuffer; var world = metadata.Get <Matrix>("world"); var view = metadata.Get <Matrix>("view"); var projection = metadata.Get <Matrix>("projection"); var worldView = metadata.Get <Matrix>("worldview"); var worldViewProjection = metadata.Get <Matrix>("worldviewprojection"); for (int i = 0; i < visibleInstances.Count; i++) { var instance = visibleInstances[i]; world.Value = instance.Instance.Transform; Matrix.Multiply(ref world.Value, ref view.Value, out worldView.Value); Matrix.Multiply(ref worldView.Value, ref projection.Value, out worldViewProjection.Value); foreach (var pass in data.Material.Begin(metadata)) { pass.Apply(); device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, mesh.VertexCount, 0, mesh.TriangleCount); #if PROFILE polysDrawnStat.Value += mesh.TriangleCount; drawsStat.Value++; #endif } } }
public void Apply(BoxedValueStore <string> data) { if (setter != null) { setter.Apply(data); } }
public override void OnShown() { material = content.Load <Material>("Red"); quad = new Quad(device); metadata = new BoxedValueStore <string>(); base.OnShown(); }
public void Draw(Material material, BoxedValueStore <string> parameters) { foreach (var pass in material.Begin(parameters)) { pass.Apply(); Draw(); } }
public IEnumerable <EffectPass> Begin(BoxedValueStore <string> parameterValues) { for (int i = 0; i < parameters.Length; i++) { parameters[i].Apply(parameterValues); } return(effect.CurrentTechnique.Passes); }
public override void OnShown() { material = new Material(content.Load <Effect>("Basic"), null); quad = new Quad(device); metadata = new BoxedValueStore <string>(); metadata.Set("colour", Color.White.ToVector4()); base.OnShown(); }
public override void Apply(BoxedValueStore <string> globals) { if (value == null || previousGlobals != globals) { globals.TryGet(Semantic, out value); previousGlobals = globals; } if (value != null) { Parameter.SetValue(value.Value); } }
public void Draw(string phase, BoxedValueStore <string> metadata) { List <MeshRenderData> meshes; if (!phases.TryGetValue(phase, out meshes)) { return; } var viewFrustum = metadata.Get <BoundingFrustum>("viewfrustum").Value; bounds.Clear(); bounds.Add(viewFrustum); QueryVisible(bounds, buffer); foreach (var item in buffer) { item.IsVisible = true; } foreach (var mesh in meshes) { foreach (var instance in mesh.Instances) { if (instance.IsVisible) { visibleInstances.Add(instance); } } if (visibleInstances.Count > 0) { DrawMesh(mesh, metadata); visibleInstances.Clear(); } } foreach (var item in buffer) { item.IsVisible = false; } buffer.Clear(); }
public void SetMetadata(BoxedValueStore <string> metadata) { metadata.Set("camera", this); metadata.Set("view", View); metadata.Set("projection", Projection); metadata.Set("viewprojection", ViewProjection); metadata.Set("inverseview", inverseView); metadata.Set("inverseprojection", inverseProjection); metadata.Set("inverseviewprojection", inverseViewProjection); metadata.Set("viewfrustum", Bounds); metadata.Set("nearclip", NearClip); metadata.Set("farclip", FarClip); metadata.Set("cameraposition", -view.Translation); bounds.GetCorners(frustumCorners); for (int i = 0; i < 4; i++) { farFrustumCorners[i] = frustumCorners[i + 4]; } Vector3.Transform(farFrustumCorners, ref view, farFrustumCorners); metadata.Set("farfrustumcorners", farFrustumCorners); }
public override void Apply(BoxedValueStore<string> globals) { if (_value == null || _previousGlobals != globals) { globals.TryGet(Semantic, out _value); _previousGlobals = globals; } if (_value != null) Parameter.SetValue(_value.Value); }
//Why does this take a BoxedValueStore<string> and not a NamedValueCollection? //Because I don't *want* named values, I want boxed values! public abstract void Apply(BoxedValueStore<string> globals);
public void Apply(BoxedValueStore<string> data) { if (setter != null) setter.Apply(data); }
public override void Apply(BoxedValueStore<string> globals) { if (_value == null || _previousGlobals != globals) { globals.TryGet(Semantic, out _value); _previousGlobals = globals; } if (_value != null) { //Create an array to convert into (or reuse existing one) if (_conversion == null || _conversion.Length != _value.Value.Length) _conversion = new Microsoft.Xna.Framework.Matrix[_value.Value.Length]; //Convert to XNA types for (int i = 0; i < _value.Value.Length; i++) _conversion[i] = _value.Value[i].ToXNA(); Parameter.SetValue(_conversion); } }
public void SetMetadata(BoxedValueStore<string> metadata) { metadata.Set("camera", this); metadata.Set("view", View); metadata.Set("projection", Projection); metadata.Set("viewprojection", ViewProjection); metadata.Set("inverseview", inverseView); metadata.Set("inverseprojection", inverseProjection); metadata.Set("inverseviewprojection", inverseViewProjection); metadata.Set("viewfrustum", Bounds); metadata.Set("nearclip", NearClip); metadata.Set("farclip", FarClip); metadata.Set("cameraposition", -view.Translation); bounds.GetCorners(frustumCorners); for (int i = 0; i < 4; i++) farFrustumCorners[i] = frustumCorners[i + 4]; Vector3.Transform(farFrustumCorners, ref view, farFrustumCorners); metadata.Set("farfrustumcorners", farFrustumCorners); }
public abstract void Apply(BoxedValueStore <string> globals);
public void Draw(Material material, BoxedValueStore<string> parameters) { foreach (var pass in material.Begin(parameters)) { pass.Apply(); Draw(); } }