Show More
Commit Description:
Fix for linux (fingers crossed).
Commit Description:
Fix for linux (fingers crossed).
References:
File last commit:
Show/Diff file:
Action:
FNA/src/Graphics/Effect/EffectAnnotation.cs
185 lines | 2.8 KiB | text/x-csharp | CSharpLexer
185 lines | 2.8 KiB | text/x-csharp | CSharpLexer
r0 | #region License | |||
/* FNA - XNA4 Reimplementation for Desktop Platforms | ||||
* Copyright 2009-2020 Ethan Lee and the MonoGame Team | ||||
* | ||||
* Released under the Microsoft Public License. | ||||
* See LICENSE for details. | ||||
*/ | ||||
#endregion | ||||
#region Using Statements | ||||
using System; | ||||
#endregion | ||||
namespace Microsoft.Xna.Framework.Graphics | ||||
{ | ||||
public sealed class EffectAnnotation | ||||
{ | ||||
#region Public Properties | ||||
public string Name | ||||
{ | ||||
get; | ||||
private set; | ||||
} | ||||
public string Semantic | ||||
{ | ||||
get; | ||||
private set; | ||||
} | ||||
public int RowCount | ||||
{ | ||||
get; | ||||
private set; | ||||
} | ||||
public int ColumnCount | ||||
{ | ||||
get; | ||||
private set; | ||||
} | ||||
public EffectParameterClass ParameterClass | ||||
{ | ||||
get; | ||||
private set; | ||||
} | ||||
public EffectParameterType ParameterType | ||||
{ | ||||
get; | ||||
private set; | ||||
} | ||||
#endregion | ||||
#region Private Variables | ||||
IntPtr values; | ||||
#endregion | ||||
#region Internal Constructor | ||||
internal EffectAnnotation( | ||||
string name, | ||||
string semantic, | ||||
int rowCount, | ||||
int columnCount, | ||||
EffectParameterClass parameterClass, | ||||
EffectParameterType parameterType, | ||||
IntPtr data | ||||
) { | ||||
Name = name; | ||||
Semantic = semantic ?? string.Empty; | ||||
RowCount = rowCount; | ||||
ColumnCount = columnCount; | ||||
ParameterClass = parameterClass; | ||||
ParameterType = parameterType; | ||||
values = data; | ||||
} | ||||
#endregion | ||||
#region Public Methods | ||||
public bool GetValueBoolean() | ||||
{ | ||||
unsafe | ||||
{ | ||||
// Values are always 4 bytes, so we get to do this. -flibit | ||||
int* resPtr = (int*) values; | ||||
return *resPtr != 0; | ||||
} | ||||
} | ||||
public int GetValueInt32() | ||||
{ | ||||
unsafe | ||||
{ | ||||
int* resPtr = (int*) values; | ||||
return *resPtr; | ||||
} | ||||
} | ||||
public Matrix GetValueMatrix() | ||||
{ | ||||
unsafe | ||||
{ | ||||
float* resPtr = (float*) values; | ||||
return new Matrix( | ||||
resPtr[0], | ||||
resPtr[4], | ||||
resPtr[8], | ||||
resPtr[12], | ||||
resPtr[1], | ||||
resPtr[5], | ||||
resPtr[9], | ||||
resPtr[13], | ||||
resPtr[2], | ||||
resPtr[6], | ||||
resPtr[10], | ||||
resPtr[14], | ||||
resPtr[3], | ||||
resPtr[7], | ||||
resPtr[11], | ||||
resPtr[15] | ||||
); | ||||
} | ||||
} | ||||
public float GetValueSingle() | ||||
{ | ||||
unsafe | ||||
{ | ||||
float* resPtr = (float*) values; | ||||
return *resPtr; | ||||
} | ||||
} | ||||
public string GetValueString() | ||||
{ | ||||
/* FIXME: This requires digging into the effect->objects list. | ||||
* We've got the data, we just need to hook it up to FNA. | ||||
* -flibit | ||||
*/ | ||||
throw new NotImplementedException("effect->objects[?]"); | ||||
} | ||||
public Vector2 GetValueVector2() | ||||
{ | ||||
unsafe | ||||
{ | ||||
float* resPtr = (float*) values; | ||||
return new Vector2(resPtr[0], resPtr[1]); | ||||
} | ||||
} | ||||
public Vector3 GetValueVector3() | ||||
{ | ||||
unsafe | ||||
{ | ||||
float* resPtr = (float*) values; | ||||
return new Vector3(resPtr[0], resPtr[1], resPtr[2]); | ||||
} | ||||
} | ||||
public Vector4 GetValueVector4() | ||||
{ | ||||
unsafe | ||||
{ | ||||
float* resPtr = (float*) values; | ||||
return new Vector4( | ||||
resPtr[0], | ||||
resPtr[1], | ||||
resPtr[2], | ||||
resPtr[3] | ||||
); | ||||
} | ||||
} | ||||
#endregion | ||||
} | ||||
} | ||||