1
我想創建一個非常基本的網格渲染器,使用D3D11在我的學校最終項目中使用。儘管我在rastertek網站和Frank De Luna的書中使用了最簡單的透視着色器等基本在線教程,但我無法讓我的三角形顯示在屏幕上。最後,我發現了VS 2013的圖形調試功能,並且我能夠看到我的頂點和索引緩衝區充滿了垃圾數據。如果您想運行代碼,我已經主持瞭解決方案here,但是熟悉D3D和/或其SharpDX C#包裝的人能否告訴我在下面的代碼中我做錯了什麼?基於SharpDX DataStream的緩衝區初始化失敗
這是我的幾何數據。頂點結構具有Vector4位置和顏色字段,索引是ushort的別名。
var vertices = new[]
{
new Vertex(new Vector4(-1, 1, 0, 1), Color.Red),
new Vertex(new Vector4(1, 1, 0, 1), Color.Green),
new Vertex(new Vector4(1, -1, 0, 1), Color.Blue),
new Vertex(new Vector4(-1, -1, 0, 1), Color.White)
};
var indices = new Index[]
{
0, 2, 1,
0, 3, 2
};
這裏是代碼未能初始化我的頂點和索引緩衝區與上述數據。
var vStream = new DataStream(sizeInBytes: vertices.Length * sizeof(Vertex), canRead: false, canWrite: true);
var iStream = new DataStream(sizeInBytes: indices.Length * sizeof(Index), canRead: false, canWrite: true);
{
vStream.WriteRange(vertices);
iStream.WriteRange(indices);
vBuffer = new Buffer(
device, vStream, new BufferDescription(
vertices.Length * sizeof(Vertex),
ResourceUsage.Immutable,
BindFlags.VertexBuffer,
CpuAccessFlags.None,
ResourceOptionFlags.None,
0)) { DebugName = "Vertex Buffer" };
iBuffer = new Buffer(
device, iStream, new BufferDescription(
indices.Length * sizeof(Index),
ResourceUsage.Immutable,
BindFlags.IndexBuffer,
CpuAccessFlags.None,
ResourceOptionFlags.None,
0)) { DebugName = "Index Buffer" };
}
如果我用上面的代碼替換下面的代碼,但是,它的工作原理。我不知道我在做什麼錯。
vBuffer = Buffer.Create(
device, vertices, new BufferDescription(
vertices.Length * sizeof(Vertex),
ResourceUsage.Immutable,
BindFlags.VertexBuffer,
CpuAccessFlags.None,
ResourceOptionFlags.None,
0));
vBuffer.DebugName = "Vertex Buffer";
iBuffer = Buffer.Create(
device, indices, new BufferDescription(
indices.Length * sizeof(Index),
ResourceUsage.Immutable,
BindFlags.IndexBuffer,
CpuAccessFlags.None,
ResourceOptionFlags.None,
0));
iBuffer.DebugName = "Index Buffer";
難以置信前流位置歸零(如
iStream.Position = 0
),它的工作原理!非常感謝。 – Drake