示例#1
0
        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);
        }
示例#2
0
        /// <summary>
        /// Applies a certain states
        /// </summary>
        /// <param name="step">The step to apply state for.</param>
        public void BeginPass(int step)
        {
            Device device = Device.Instance;

            textures.Apply();
            device.Transformations.World      = World;
            device.Transformations.View       = View;
            device.Transformations.Projection = Projection;
            effect.BeginPass(step);
        }
示例#3
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();
        }
示例#4
0
 /// <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();
     }
 }
示例#5
0
        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;
            }
        }
示例#6
0
        /// <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();
        }
示例#7
0
        /// <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();
        }
示例#8
0
        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();
        }