我正在编写一个与XNA一起工作的库。我有一个基元的基类,我计划从中构建Planes,Cubes和其他原始类型。理想情况下,无论使用何种顶点类型,我都希望我的基类能够进行渲染。
相关代码:
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&lt;&gt;上遇到编译错误拨打:
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的泛型参数将不起作用(因为它不是结构)。
有什么方法吗?
提前致谢!
答案 0 :(得分:1)
如何将Primitive
更改为要求VT
是结构?
public abstract class Primitive<VT> where VT : struct, IVertexType
和类似的
public abstract class Plane<VT> : Primitive<VT> where VT : struct, IVertexType
你声称“DrawUserIndexPrimitives泛型参数不起作用(因为它不是结构)”但是你不清楚你的意思。哪个参数?我怀疑以上是你想要的,但它并不是很清楚。