public static IEnumerable <D3DXCONSTANT_DESC> GetConstantDesc(
            this ID3DXConstantTable contantTable,
            IntPtr constantHandle)
        {
            VerifyNonNullArgument(
                contantTable,
                "contantTable");

            uint count = 0;

            if (Succeeded(
                    contantTable.GetConstantDesc(
                        constantHandle,
                        null,
                        ref count)))
            {
                var array = new D3DXCONSTANT_DESC[count];
                if (Succeeded(
                        contantTable.GetConstantDesc(
                            constantHandle,
                            array,
                            ref count)))
                {
                    return(array.Take((int)count));
                }
            }
            return(Enumerable.Empty <D3DXCONSTANT_DESC>());
        }
        public static D3DXCONSTANTTABLE_DESC?GetDesc(
            this ID3DXConstantTable contantTable)
        {
            VerifyNonNullArgument(
                contantTable,
                "contantTable");

            var desc = default(D3DXCONSTANTTABLE_DESC);

            return(Succeeded(contantTable.GetDesc(out desc))
                   ? (D3DXCONSTANTTABLE_DESC?)desc
                   : null);
        }
        public static IEnumerable <IntPtr> GetTopLevelConstantHandles(
            this ID3DXConstantTable contantTable)
        {
            VerifyNonNullArgument(
                contantTable,
                "contantTable");

            var desc_ = contantTable.GetDesc();

            if (!desc_.HasValue)
            {
                return(Enumerable.Empty <IntPtr>());
            }
            var desc = desc_.Value;

            return(Enumerable.Range(
                       0,
                       (int)desc.Constants)
                   .Select(
                       index => contantTable.GetConstant(
                           IntPtr.Zero,
                           (uint)index)));
        }