95 lines
2.3 KiB
C#

using System;
using System.IO;
// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license
namespace ANX.RenderSystem.Windows.Metro.Shader
{
public class ExtendedShaderParameter
{
#region Public
public string Type
{
get;
private set;
}
public string Name
{
get;
private set;
}
public int ArraySize
{
get;
private set;
}
public int[] TypeDimensions
{
get;
private set;
}
public int SizeInBytes
{
get;
private set;
}
public bool IsTexture
{
get;
private set;
}
#endregion
#region Constructor
public ExtendedShaderParameter(BinaryReader reader)
{
Type = reader.ReadString();
Name = reader.ReadString();
ArraySize = reader.ReadInt32();
IsTexture = Type.ToLower().Contains("texture");
SizeInBytes = GetParameterTypeSize();
if (ArraySize > 0)
SizeInBytes *= ArraySize;
int numberOfDimensions = reader.ReadByte();
TypeDimensions = new int[numberOfDimensions];
for (int dimIndex = 0; dimIndex < numberOfDimensions; dimIndex++)
{
TypeDimensions[dimIndex] = (int)reader.ReadByte();
SizeInBytes *= TypeDimensions[dimIndex];
}
}
#endregion
#region GetParameterTypeSize
private int GetParameterTypeSize()
{
if (IsTexture)
return 0;
if (Type == "float" ||
Type == "int" ||
Type == "uint" ||
Type == "dword")
return 4;
if (Type == "double")
return 8;
if (Type == "bool")
return 1;
if (Type == "half")
return 2;
throw new NotImplementedException("Parameter type " + Type + " has no size value!");
}
#endregion
}
}