public static void UpdateIndexBuffer(SharpDXInfo info, IEnumerable <int> rawIndices) { if (rawIndices == null) { return; } // 頂点数が既存のデータと違ってたらインデックスバッファを作り直す if (rawIndices.Count() != info.rawIndices.Length) { if (!indexBufferPool.ContainsKey(rawIndices.Count())) { indexBufferPool[rawIndices.Count()] = CreateBuffer <int>(info.Device, BindFlags.IndexBuffer, rawIndices.Count()); } Buffer buffer = indexBufferPool[rawIndices.Count()]; info.UpdateBuffers(indexBuffer: buffer); var binding = new VertexBufferBinding(info.IndexBuffer, Utilities.SizeOf <int>(), 0); info.Device.ImmediateContext.InputAssembler.SetIndexBuffer(buffer, Format.R32_UInt, 0); info.rawIndices = rawIndices.ToArray(); } // インデックスバッファの値を更新 var box = info.Device.ImmediateContext.MapSubresource(info.IndexBuffer, 0, MapMode.WriteDiscard, MapFlags.None); for (int i = 0; i < rawIndices.Count(); i++) { System.Runtime.InteropServices.Marshal.StructureToPtr(rawIndices.ElementAt(i), box.DataPointer + Utilities.SizeOf <int>() * i, false); info.rawIndices[i] = rawIndices.ElementAt(i); } info.Device.ImmediateContext.UnmapSubresource(info.IndexBuffer, 0); }