2014-02-13 44 views
0

我只能寫入一次到頂點緩衝區而無需重新聲明整個類。重寫到Directx 3D11緩衝區

原來寫

SlimDX.Direct3D11.Buffer vertexBuffer; 
vertexBuffer = new SlimDX.Direct3D11.Buffer(DeviceManager.Instance.device, 
      vertices, 
      SizeOfVertexBufferInBytes, 
      ResourceUsage.Default, 
      BindFlags.VertexBuffer, 
      CpuAccessFlags.None, 
      ResourceOptionFlags.None, 
      0); 

正在使用重寫緩衝器內的代碼。它目前不動,只是想重寫。

public void Move(Vector3 deltaVec) 
{ 
    this.vertexBuffer.Dispose(); 
    vertexBuffer = new SlimDX.Direct3D11.Buffer(DeviceManager.Instance.device, 
      vertices, 
      SizeOfVertexBufferInBytes, 
      ResourceUsage.Default, 
      BindFlags.VertexBuffer, 
      CpuAccessFlags.None, 
      ResourceOptionFlags.None, 
      0); 
    render(); 
}     

我該如何能夠重寫這個緩衝區來改變頂點的位置。謝謝

回答

0

對於碰巧遇到同樣問題的其他人,我相信我已經找到了解決方案。在Move函數中,我從來沒有將位置設置回0(這導致它索引出來?)。這裏的任何方式都是固定代碼。

public void Move(Vector3 deltaVec) 
    { 
     this.vertices.Close(); 
     vertices = new DataStream(SizeOfVertexBufferInBytes, true, true); 
     foreach (Vector3 vec in this.verticiesList) 
     { 
      vertices.Write(vec + deltaVec); 
     } 

     vertices.Position = 0; 

     // create the vertex layout and buffer 
     var elements = new[] { 
      new InputElement("POSITION", 0, Format.R32G32B32_Float, 0) 
     }; 
     layout = new InputLayout(DeviceManager.Instance.device, inputSignature, elements); 


     vertexBuffer = new SlimDX.Direct3D11.Buffer(DeviceManager.Instance.device, 
      vertices, 
      SizeOfVertexBufferInBytes, 
      ResourceUsage.Default, 
      BindFlags.VertexBuffer, 
      CpuAccessFlags.None, 
      ResourceOptionFlags.None, 
      0); 
     render(); 
    } 

祝你好運!