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); } } }
public void CheckIfBufferIsFull() { if (m_status == MyDecalForModelsState.FADING_OUT) { if ((MyRender.RenderTimeInMS - m_fadingOutStartTime) > MyDecalsConstants.DECALS_FADE_OUT_INTERVAL_MILISECONDS) { // If fading-out phase finished, we change state and remove faded-out buffers for (int i = 0; i < m_fadingOutBuffersCount; i++) { if (m_usedTriangleBuffers.Count > 0) { MyDecalsForRenderObjectsTriangleBuffer releasedBuffer = m_usedTriangleBuffers[0]; m_usedTriangleBuffers.RemoveAt(0); releasedBuffer.Clear(); m_freeTriangleBuffers.Push(releasedBuffer); m_triangleBuffersByKey.Remove(new MyDecalsForModelsDictionaryKey(releasedBuffer.RenderObject, releasedBuffer.DecalTexture)); } } m_status = MyDecalForModelsState.READY; } } else { if (m_triangleBuffersByKey.Count >= m_fadingOutStartLimit) { int i = 0; foreach (MyDecalsForRenderObjectsTriangleBuffer buffer in m_usedTriangleBuffers) { if (i < m_fadingOutBuffersCount) { buffer.FadeOutAll(); } i++; } m_status = MyDecalForModelsState.FADING_OUT; m_fadingOutStartTime = (int)MyRender.RenderTimeInMS; } } }