Я пишу библиотеку, которая работает вместе с XNA. У меня есть базовый класс для примитивов, из которого я планирую строить самолеты, кубы и другие типы примитивов. В идеале я хотел бы, чтобы мой базовый класс выполнял рендеринг, независимо от используемого типа вершины.
Соответствующий код:
public abstract class Primitive<VT> where VT : IVertexType
{
private void Draw(GraphicsDevice graphics)
{
graphics.DrawUserIndexedPrimitives<VT>(primitiveType_,
vertices_,
0,
vertices_.Length,
indices_,
0,
primitiveCount_);
}
}
Теперь другие классы, кроме производных от этого, используют соответствующий тип вершины:
public abstract class Plane<VT> : Primitive<VT> where VT : IVertextTpye { ... }
public class PlaneColored : Primitive<VertexPositionColor> { .... }
public class PlaneTextured : Primitive<VertexPositionTexture> { .... }
Проблема в том, что я получаю ошибку компиляции при вызове DrawUserIndexPrimitives <>:
Error 1 The type 'VT' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'Microsoft.Xna.Framework.Graphics.GraphicsDevice.DrawUserIndexedPrimitives<T>(Microsoft.Xna.Framework.Graphics.PrimitiveType, T[], int, int, short[], int, int)' C:\dev\Projects\2010\XNAParts\XNAParts\Parts\Primitive.cs 88
И я не могу изменить конструкцию на struct
, иначе универсальный параметр DrawUserIndexPrimitives не будет работать (так как это не структура).
Есть ли способ обойти это?
Заранее спасибо!