示例#1
0
        public void SetRenderState(IEffectTechnique technique, int passIndex, RenderState rs)
        {
            RenderStateRecord[] records;
            if (!_map.TryGetValue(technique.Name, out records))
            {
                records = new RenderStateRecord[technique.Passes.Count];
                _map.Add(technique.Name, records);
            }

            if (passIndex >= 0 && passIndex < records.Length)
            {
                RenderStateRecord record = records[passIndex];
                switch (rs.StateType)
                {
                case RenderStateType.BlendState:
                    record.BlendState = rs as BlendState;
                    break;

                case RenderStateType.DepthStencilState:
                    record.DepthStencilState = rs as DepthStencilState;
                    break;

                case RenderStateType.RasterizerState:
                    record.RasterizerState = rs as RasterizerState;
                    break;
                }
                records[passIndex] = record;
            }
            else
            {
                throw new ArgumentOutOfRangeException("Pass index out of range");
            }
        }
示例#2
0
 public void SetActiveRecords(IEffectTechnique technique)
 {
     _activeTechniqueName = technique.Name;
     _map.TryGetValue(_activeTechniqueName, out _activeRecords);
     if (_activeRecords == null)
     {
         _activeRecords = new RenderStateRecord[technique.Passes.Count];
         _map.Add(technique.Name, _activeRecords);
     }
 }
 /// <summary>
 /// Gets the technique specified by its index.
 /// </summary>
 /// <returns>The technique, if it exists</returns>
 public IEffectTechnique this[String name] {
     get {
         for (int i = 0; i < _techniques.Count; i++)
         {
             IEffectTechnique tech = _techniques[i];
             if (tech.Name.Equals(name))
             {
                 return(tech);
             }
         }
         return(null);
     }
 }
示例#4
0
 public void SetActiveTechnique(String techniqueName)
 {
     if (IsValid)
     {
         IEffectTechnique technique = _effect.Techniques[techniqueName];
         if (technique != null)
         {
             _effect.CurrentTechnique = technique;
             _currentTechnique        = technique;
             _renderStateMap.SetActiveRecords(technique);
         }
     }
 }
示例#5
0
 public void SetRenderState(RenderState rs, String techniqueName, int passIndex)
 {
     if (IsValid)
     {
         IEffectTechnique technique = _effect.Techniques[techniqueName];
         if (technique != null)
         {
             _renderStateMap.SetRenderState(technique, passIndex, rs);
         }
     }
     else
     {
         throw new ArgumentNullException("Material does not have a valid effect loaded, cannot set RenderState. Call LoadEffect() first");
     }
 }
示例#6
0
 public RenderState GetRenderState(RenderStateType type, int techniqueIndex, int passIndex)
 {
     if (IsValid)
     {
         IEffectTechnique technique = _effect.Techniques[techniqueIndex];
         if (technique != null)
         {
             return(_renderStateMap.GetRenderState(type, technique.Name, passIndex));
         }
         else
         {
             return(null);
         }
     }
     else
     {
         throw new ArgumentNullException("Material does not have a valid effect loaded, cannot set RenderState. Call LoadEffect() first");
     }
 }
示例#7
0
 public void SetRenderState(RenderState rs, String techniqueName, String passName)
 {
     if (IsValid)
     {
         IEffectTechnique technique = _effect.Techniques[techniqueName];
         if (technique != null)
         {
             for (int i = 0; i < technique.Passes.Count; i++)
             {
                 IEffectPass pass = technique.Passes[i];
                 if (pass.Name.Equals(passName))
                 {
                     _renderStateMap.SetRenderState(technique, i, rs);
                     return;
                 }
             }
         }
     }
     else
     {
         throw new ArgumentNullException("Material does not have a valid effect loaded, cannot set RenderState. Call LoadEffect() first");
     }
 }
示例#8
0
        public RenderState GetRenderState(RenderStateType type, int techniqueIndex, String passName)
        {
            if (IsValid)
            {
                IEffectTechnique technique = _effect.Techniques[techniqueIndex];
                if (technique != null)
                {
                    for (int i = 0; i < technique.Passes.Count; i++)
                    {
                        IEffectPass pass = technique.Passes[i];
                        if (pass.Name.Equals(passName))
                        {
                            return(_renderStateMap.GetRenderState(type, technique.Name, i));
                        }
                    }
                }
            }
            else
            {
                throw new ArgumentNullException("Material does not have a valid effect loaded, cannot set RenderState. Call LoadEffect() first");
            }

            return(null);
        }