Exemplo n.º 1
0
 public void SetResource <T>(int resourceIndex, EffectResourceType type, T value)
 {
     resources[resourceIndex] = value;
     unsafe
     {
         Pointers[resourceIndex] = GetNativePointer(resourceIndex, type, value);
     }
 }
Exemplo n.º 2
0
 public void SetResource(int resourceIndex, EffectResourceType type, Direct3D11.UnorderedAccessView view, int uavInitialCount)
 {
     resources[resourceIndex] = view;
     unsafe
     {
         UAVCounts[resourceIndex] = uavInitialCount;
         Pointers[resourceIndex]  = GetNativePointer(resourceIndex, type, view);
     }
 }
Exemplo n.º 3
0
 public void SetResourcePointer(int resourceIndex, EffectResourceType type, IntPtr value)
 {
     // Don't setup the resources at the global level, only setup the native pointer
     //resources[resourceIndex] = value;
     unsafe
     {
         Pointers[resourceIndex] = value;
     }
 }
Exemplo n.º 4
0
 public void SetResource <T>(int resourceIndex, EffectResourceType type, params T[] valueArray) where T : class
 {
     foreach (var value in valueArray)
     {
         resources[resourceIndex] = value;
         unsafe
         {
             Pointers[resourceIndex] = GetNativePointer(resourceIndex, type, value);
         }
         resourceIndex++;
     }
 }
Exemplo n.º 5
0
 public void SetResource(int resourceIndex, EffectResourceType type, Direct3D11.UnorderedAccessView[] valueArray, int[] uavInitialCount)
 {
     for (int i = 0; i < valueArray.Length; i++, resourceIndex++)
     {
         var value = valueArray[i];
         resources[resourceIndex] = value;
         unsafe
         {
             UAVCounts[resourceIndex] = uavInitialCount[i];
             Pointers[resourceIndex]  = GetNativePointer(resourceIndex, type, value);
         }
     }
 }
Exemplo n.º 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="EffectParameter"/> class.
        /// </summary>
        internal EffectParameter(EffectData.ResourceParameter parameterDescription, EffectResourceType resourceType, int offset, EffectResourceLinker resourceLinker)
            : base(parameterDescription.Name)
        {
            this.ParameterDescription = parameterDescription;
            this.resourceLinker       = resourceLinker;

            ResourceType   = resourceType;
            IsValueType    = false;
            ParameterClass = parameterDescription.Class;
            ParameterType  = parameterDescription.Type;
            RowCount       = ColumnCount = 0;
            ElementCount   = parameterDescription.Count;
            Offset         = offset;
        }
Exemplo n.º 7
0
        private IntPtr GetNativePointer(int resourceIndex, EffectResourceType type, object value)
        {
            if (value == null)
            {
                return(IntPtr.Zero);
            }

            if (value is IntPtr)
            {
                return((IntPtr)value);
            }

            switch (type)
            {
            case EffectResourceType.ConstantBuffer:
            {
                var constantBuffer = value as EffectConstantBuffer;
                if (constantBuffer != null)
                {
                    var rawBuffer = constantBuffer;
                    ConstantBuffers[resourceIndex] = rawBuffer;
                    return(((Direct3D11.Buffer)rawBuffer).NativePointer);
                }
                var buffer = value as Buffer;
                if (buffer != null)
                {
                    var rawBuffer = buffer;
                    ConstantBuffers[resourceIndex] = rawBuffer;
                    return(((Direct3D11.Buffer)rawBuffer).NativePointer);
                }
            }
            break;

            case EffectResourceType.ShaderResourceView:
            {
                var buffer = value as Buffer;
                if (buffer != null)
                {
                    return(((Direct3D11.ShaderResourceView)buffer).NativePointer);
                }
                var texture = value as Texture;
                if (texture != null)
                {
                    return(((Direct3D11.ShaderResourceView)texture).NativePointer);
                }
                var srv = value as Direct3D11.ShaderResourceView;
                if (srv != null)
                {
                    return(srv.NativePointer);
                }
            }
            break;

            case EffectResourceType.UnorderedAccessView:
            {
                var buffer = value as Buffer;
                if (buffer != null)
                {
                    return(((Direct3D11.UnorderedAccessView)buffer).NativePointer);
                }
                var texture = value as Texture;
                if (texture != null)
                {
                    return(((Direct3D11.UnorderedAccessView)texture).NativePointer);
                }
                var srv = value as Direct3D11.UnorderedAccessView;
                if (srv != null)
                {
                    return(srv.NativePointer);
                }
            }
            break;

            case EffectResourceType.SamplerState:
                var samplerState = value as Graphics.SamplerState;
                if (samplerState != null)
                {
                    return(((Direct3D11.SamplerState)samplerState).NativePointer);
                }
                var samplerStateD3D11 = value as Direct3D11.SamplerState;
                if (samplerStateD3D11 != null)
                {
                    return(samplerStateD3D11.NativePointer);
                }
                break;
            }

            // Throws an exception if the resource is not supported.
            throw new NotSupportedException(string.Format("Unsupported resource type [{0}/{1}]", type, value.GetType().Name));
        }