public void SetValueTranspose(Matrix value)
{
if (ParameterClass != EffectParameterClass.Matrix || ParameterType != EffectParameterType.Single)
throw new InvalidCastException();
// HLSL expects matrices to be transposed by default, so copying them straight
// from the in-memory version effectively transposes them back to row-major.
if (RowCount == 4 && ColumnCount == 4)
{
var fData = (float[])Data;
fData[0] = value.M11;
fData[1] = value.M12;
fData[2] = value.M13;
fData[3] = value.M14;
fData[4] = value.M21;
fData[5] = value.M22;
fData[6] = value.M23;
fData[7] = value.M24;
fData[8] = value.M31;
fData[9] = value.M32;
fData[10] = value.M33;
fData[11] = value.M34;
fData[12] = value.M41;
fData[13] = value.M42;
fData[14] = value.M43;
fData[15] = value.M44;
}
else if (RowCount == 4 && ColumnCount == 3)
{
var fData = (float[])Data;
fData[0] = value.M11;
fData[1] = value.M12;
fData[2] = value.M13;
fData[3] = value.M21;
fData[4] = value.M22;
fData[5] = value.M23;
fData[6] = value.M31;
fData[7] = value.M32;
fData[8] = value.M33;
fData[9] = value.M41;
fData[10] = value.M42;
fData[11] = value.M43;
}
else if (RowCount == 3 && ColumnCount == 4)
{
var fData = (float[])Data;
fData[0] = value.M11;
fData[1] = value.M12;
fData[2] = value.M13;
fData[3] = value.M14;
fData[4] = value.M21;
fData[5] = value.M22;
fData[6] = value.M23;
fData[7] = value.M24;
fData[8] = value.M31;
fData[9] = value.M32;
fData[10] = value.M33;
fData[11] = value.M34;
}
else if (RowCount == 3 && ColumnCount == 3)
{
var fData = (float[])Data;
fData[0] = value.M11;
fData[1] = value.M12;
fData[2] = value.M13;
fData[3] = value.M21;
fData[4] = value.M22;
fData[5] = value.M23;
fData[6] = value.M31;
fData[7] = value.M32;
fData[8] = value.M33;
}
else if (RowCount == 3 && ColumnCount == 2)
{
var fData = (float[])Data;
fData[0] = value.M11;
fData[1] = value.M12;
fData[2] = value.M13;
fData[3] = value.M21;
fData[4] = value.M22;
fData[5] = value.M23;
}
StateKey = unchecked(NextStateKey++);
}