CSharpGL.InnerPickableRendererFactory.GetRenderer C# (CSharp) Method

GetRenderer() public static method

根据IndexBuffer的具体类型获取一个PickableRenderer
public static GetRenderer ( this model, AttributeMap attributeMap, string positionNameInIBufferable ) : InnerPickableRenderer
model this
attributeMap AttributeMap
positionNameInIBufferable string
return InnerPickableRenderer
        public static InnerPickableRenderer GetRenderer(
            this IBufferable model,
            AttributeMap attributeMap,
            string positionNameInIBufferable,
            params GLState[] switches)
        {
            if (model == null || attributeMap == null || string.IsNullOrEmpty(positionNameInIBufferable))
            { throw new ArgumentNullException(); }

            AttributeMap map = null;
            foreach (AttributeMap.NamePair item in attributeMap)
            {
                if (item.NameInIBufferable == positionNameInIBufferable)
                {
                    map = new AttributeMap();
                    map.Add(item.VarNameInShader, item.NameInIBufferable);
                    break;
                }
            }
            if (map == null) { throw new Exception(string.Format("No matching variable name in shader for [{0}]", positionNameInIBufferable)); }

            if (model.UsesZeroIndexBuffer())
            {
                return new ZeroIndexRenderer(model, PickingShaderHelper.GetShaderCodes(), map, positionNameInIBufferable, switches);
            }
            else
            {
                return new OneIndexRenderer(model, PickingShaderHelper.GetShaderCodes(), map, positionNameInIBufferable, switches);
            }
        }

Usage Example

Example #1
0
        /// <summary>
        /// 支持"拾取"的渲染器
        /// </summary>
        /// <param name="bufferable">一种渲染方式</param>
        /// <param name="shaderCodes">各种类型的shader代码</param>
        /// <param name="propertyNameMap">关联<paramref name="bufferable"/>和<paramref name="shaderCodes"/>中的属性</param>
        /// <param name="positionNameInIBufferable">描述顶点位置信息的buffer的名字</param>
        ///<param name="switches"></param>
        public PickableRenderer(IBufferable bufferable, ShaderCode[] shaderCodes,
                                PropertyNameMap propertyNameMap, string positionNameInIBufferable,
                                params GLSwitch[] switches)
            : base(bufferable, shaderCodes, propertyNameMap, switches)
        {
            var innerPickableRenderer = InnerPickableRendererFactory.GetRenderer(
                bufferable, propertyNameMap, positionNameInIBufferable);

            this.innerPickableRenderer = innerPickableRenderer;
        }
All Usage Examples Of CSharpGL.InnerPickableRendererFactory::GetRenderer
InnerPickableRendererFactory