public MyDecalsForRenderObjectsTriangleBuffer GetTrianglesBuffer(MyRenderObject renderObject, MyDecalTexturesEnum decalTexture) { MyDecalsForModelsDictionaryKey key = new MyDecalsForModelsDictionaryKey(renderObject, decalTexture); MyDecalsForRenderObjectsTriangleBuffer outValue; if (m_triangleBuffersByKey.TryGetValue(key, out outValue)) { // Combination of model/texture was found in dictionary, so we can return in right now return outValue; } else { if (m_triangleBuffersByKey.Count >= m_capacity) { // We are full, can't place decal on a new model/texture. Need to wait for next CheckBufferFull. return null; } else { // This is first time we want to place decal on this model/texture, so here we allocate and initialize buffer MyDecalsForRenderObjectsTriangleBuffer newBuffer = m_freeTriangleBuffers.Pop(); m_triangleBuffersByKey.Add(key, newBuffer); m_usedTriangleBuffers.Add(newBuffer); newBuffer.Start(renderObject, decalTexture); return newBuffer; } } }
public MyDecalsForRenderObjectsTriangleBuffer GetTrianglesBuffer(MyRenderObject renderObject, MyDecalTexturesEnum decalTexture) { MyDecalsForModelsDictionaryKey key = new MyDecalsForModelsDictionaryKey(renderObject, decalTexture); MyDecalsForRenderObjectsTriangleBuffer outValue; if (m_triangleBuffersByKey.TryGetValue(key, out outValue)) { // Combination of model/texture was found in dictionary, so we can return in right now return(outValue); } else { if (m_triangleBuffersByKey.Count >= m_capacity) { // We are full, can't place decal on a new model/texture. Need to wait for next CheckBufferFull. return(null); } else { // This is first time we want to place decal on this model/texture, so here we allocate and initialize buffer MyDecalsForRenderObjectsTriangleBuffer newBuffer = m_freeTriangleBuffers.Pop(); m_triangleBuffersByKey.Add(key, newBuffer); m_usedTriangleBuffers.Add(newBuffer); newBuffer.Start(renderObject, decalTexture); return(newBuffer); } } }
public void ReturnTrianglesBuffer(MyRenderObject renderObject) { foreach (byte value in Enum.GetValues(typeof(MyDecalTexturesEnum))) { var key = new MyDecalsForModelsDictionaryKey(renderObject, (MyDecalTexturesEnum)value); MyDecalsForRenderObjectsTriangleBuffer outValue; if (m_triangleBuffersByKey.TryGetValue(key, out outValue)) { MyDecalsForRenderObjectsTriangleBuffer usedBuffer = outValue; m_triangleBuffersByKey.Remove(key); usedBuffer.Clear(); m_usedTriangleBuffers.Remove(usedBuffer); m_freeTriangleBuffers.Push(usedBuffer); } } }