使用DrawUserIndexedPrimitives<比;在泛型基类中
本文关键字:泛型 基类 DrawUserIndexedPrimitives 使用 | 更新日期: 2023-09-27 18:11:37
我正在编写一个与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的泛型参数将不起作用(因为它不是一个结构体)。
有别的办法吗?
提前感谢!
如何改变Primitive
要求VT
是一个结构体?
public abstract class Primitive<VT> where VT : struct, IVertexType
和类似的
public abstract class Plane<VT> : Primitive<VT> where VT : struct, IVertexType
你声称"DrawUserIndexPrimitives通用参数不会工作(因为它不是一个结构体)",但不清楚你的意思是什么。哪些参数?我怀疑以上就是你想要的,但是不是很清楚。