public void Draw(IRenderer r, Node n) { CreateBuffers(); Material mq = Material.CreateSimpleMaterial(Root.Instance.ResourceManager.LoadTexture("revenant.tga")); mq.twosided = true; mq.wire = true; r.SetMode(RenderMode.Draw3D); r.SetMaterial(mq); IEffect e = (IEffect)Root.Instance.ResourceManager.Load("shaders/simple.cgfx", typeof(IEffect)); float[] modelview = new float[16]; float[] projection = new float[16]; r.GetMatrix(modelview, projection); Matrix4 m1 = Matrix4Extensions.FromFloats(modelview); Matrix4 m2 = Matrix4Extensions.FromFloats(projection); Matrix4 m3 = m2 * m1; e.SetParameter(e.GetParameter("mvp"), Matrix4Extensions.ToFloats(m3)); e.SetParameter(e.GetParameter("mv"), modelview); e.SetParameter(e.GetParameter("Color"), new float[] { 1, 0, 0, 1 }); e.BeginPass(0); foreach (Md5Mesh m in Meshes) { m.Draw(r, n); } e.EndPass(0); }
/// <summary> /// Render a IRenderAble object with a certain effect. /// </summary> /// <param name="effect">The effect to use.</param> /// <param name="renderAble">The object to render.</param> public static void Render(IEffect effect, IRenderAble renderAble) { int steps = effect.Begin(); for (int iStep = 0; iStep < steps; iStep++) { effect.BeginPass(iStep); renderAble.Render(effect); effect.EndPass(); } effect.End(); }
/// <summary> /// Calls the RenderHandler for every pass to render the IRenderAble objects. /// </summary> /// <param name="effect">The used effect.</param> /// <param name="handle">The handler that is called for every pass.</param> public static void Render(IEffect effect, RenderHandler handle) { if (handle != null) { int steps = effect.Begin(); for (int iStep = 0; iStep < steps; iStep++) { effect.BeginPass(iStep); handle(effect); effect.EndPass(); } effect.End(); } }
private void RenderBatches() { int i = 0; int iPass = 0; int startIndex = 0; int startIndexPass = 0; while (i < batchFilled) { Batch batch = batches[i]; IEffect effect = batch.QuadFactory.Effect; // get and apply vertexUnit VertexUnit vertexUnit = batch.QuadFactory.VertexUnit; Device.Instance.VertexUnit = vertexUnit; // begin effect int steps = effect.Begin(); for (int iStep = 0; iStep < steps; iStep++) { // set i and startIndex back to the value of the first pass i = iPass; startIndex = startIndexPass; // apply the texture and other quad specific variables batch.Quad.Apply(); // begin pass effect.BeginPass(iStep); do { // get the current bach, apply and draw it. batch = batches[i]; // if (i != iPass) OctoberUpdate Bug { batch.Quad.Apply(); effect.CommitChanges(); } Device.Instance.DrawIndexed(vertexUnit.Position, batch.VertexBufferStart, batch.VertexBufferEnd, indexStream.Position + startIndex, batch.PrimitiveCount); startIndex += batch.PrimitiveCount * 3; i++; } while (i < batchFilled && batches[i].QuadFactory == null); effect.EndPass(); } // end the effect effect.End(); // set new pass base values iPass = i; startIndexPass = startIndex; } }
/// <summary> /// Renders IRenderAble object with a certain effect. /// </summary> /// <param name="effect">The effect to use.</param> /// <param name="renderAbles">The IRenderAble objects.</param> public static void Render(IEffect effect, IList renderAbles) { int steps = effect.Begin(); for (int iStep = 0; iStep < steps; iStep++) { effect.BeginPass(iStep); for (int i = 0; i < renderAbles.Count; i++) { (renderAbles[i] as IRenderAble).Render(effect); } effect.EndPass(); } effect.End(); }
/// <summary> /// Renders IRenderAble object with a certain effect. /// </summary> /// <param name="effect">The effect to use.</param> /// <param name="renderAbles">The IRenderAble objects.</param> public static void Render(IEffect effect, IRenderAble[] renderAbles) { int steps = effect.Begin(); for (int iStep = 0; iStep < steps; iStep++) { effect.BeginPass(iStep); for (int i = 0; i < renderAbles.Length; i++) { renderAbles[i].Render(effect); } effect.EndPass(); } effect.End(); }
private void Render() { GraphicsContext.CullMode = CullMode.None; GraphicsContext.Clear(1.0f); SetFilterMode(); _modelRenderer.SetEffect(_effect); _modelRenderer.SelectedAnchor = _editor.FocusAnchor; _effect.Technique = _techniqueHandle; _effect.Begin(); _effect.BeginPass(0); _effect.SetMatrix("worldMat", Matrix.Identity); var wvpm = _viewMat * _projection; _effect.SetMatrix("worldViewProjMat", wvpm); _effect.CommitChanges(); _ray = BasicCamera.ScreenToWorldRay(GraphicsContext, MousePosition.X, MousePosition.Y); RenderModel(); _effect.SetMatrix("worldMat", Matrix.Identity); _effect.SetMatrix("worldViewProjMat", wvpm); _effect.CommitChanges(); GraphicsContext.World = Matrix.Identity; GraphicsContext.View = _viewMat; GraphicsContext.Projection = _projection; _modelRenderer.Wireframe = false; _coordinateMarkerRenderer.Render(_effect); _modelRenderer.FloorPlane(); _effect.EndPass(); _effect.End(); _guiRenderer.Render(_guiManager); _consoleRenderer.Render(); }
/// <summary> /// Ends the current pass. /// </summary> public void EndPass() { effect.EndPass(); }