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