1
我已经精疲力尽了我的大脑,并且来找你寻求帮助。Monogame顶点缓冲区代理怪异
我最近开始研究一个项目来测试Monogame,并且很快遇到了一个问题,我不确定这是我的错还是Mono的。
我有一个系统,其中一个级别有一堆静态实例添加到它(几何),然后这个几何被保存到一个单独的类来呈现所有。该计划是使用顶点和索引缓冲区并使用GraphicsDevice.DrawPrimitives,但这是我遇到的问题。
顶部图像是它应该是什么样子,底部一个就是它实际上是这样的:
这里是相关的代码。现在将模式设置为Array可以正常工作,但Buffer会混乱,所以我知道顶点被正确添加,并且数组是正确的,效果是正确的,只有缓冲区是错误的。
public void End()
{
_vertices = _tempVertices.ToArray();
_vCount = _vertices.Length;
_indices = _tempIndices.ToArray();
_iCount = _indices.Length;
_vBuffer = new VertexBuffer(_graphics, typeof(VertexPositionColorTexture),
_vCount, BufferUsage.WriteOnly);
_vBuffer.SetData(_vertices, 0, _vCount);
_iBuffer = new IndexBuffer(_graphics, IndexElementSize.ThirtyTwoBits,
_iCount, BufferUsage.WriteOnly);
_iBuffer.SetData(_indices, 0, _iCount);
_tempIndices.Clear();
_tempVertices.Clear();
_primitiveCount = _iCount/3;
_canDraw = true;
}
public void Render()
{
if (_canDraw)
{
switch (DrawMode)
{
case Mode.Buffered:
_graphics.Indices = _iBuffer;
_graphics.SetVertexBuffer(_vBuffer);
_graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, _primitiveCount);
break;
case Mode.Array:
_graphics.DrawUserIndexedPrimitives<VertexPositionColorTexture>
(PrimitiveType.TriangleList, _vertices, 0, _vCount,
_indices, 0, _primitiveCount);
break;
}
}
else
throw new InvalidOperationException("End must be called before this can be rendered");
}
任何人有任何想法我在这里失踪?谢谢。
这让我头撞墙壁了好几个小时。感谢您发布自己的问题的答案! – shambulator