public MyDecalsForRenderObjects(int capacity) { m_status = MyDecalForModelsState.READY; m_capacity = capacity; m_fadingOutStartLimit = (int)(m_capacity * MyDecalsConstants.TEXTURE_LARGE_FADING_OUT_START_LIMIT_PERCENT); m_fadingOutBuffersCount = (int)(m_capacity * MyDecalsConstants.TEXTURE_LARGE_FADING_OUT_MINIMAL_TRIANGLE_COUNT_PERCENT); m_sortTriangleBuffersByTexture = new List<MyDecalsForRenderObjectsTriangleBuffer>(m_capacity); m_triangleBuffersByKey = new Dictionary<MyDecalsForModelsDictionaryKey, MyDecalsForRenderObjectsTriangleBuffer>(m_capacity); m_freeTriangleBuffers = new Stack<MyDecalsForRenderObjectsTriangleBuffer>(m_capacity); m_usedTriangleBuffers = new List<MyDecalsForRenderObjectsTriangleBuffer>(m_capacity); m_triangleBuffers = new MyDecalsForRenderObjectsTriangleBuffer[m_capacity]; for (int i = 0; i < m_capacity; i++) { m_triangleBuffers[i] = new MyDecalsForRenderObjectsTriangleBuffer(MyDecalsConstants.MAX_DECAL_TRIANGLES_IN_BUFFER); m_freeTriangleBuffers.Push(m_triangleBuffers[i]); } }
public MyDecalsForRenderObjects(int capacity) { m_status = MyDecalForModelsState.READY; m_capacity = capacity; m_fadingOutStartLimit = (int)(m_capacity * MyDecalsConstants.TEXTURE_LARGE_FADING_OUT_START_LIMIT_PERCENT); m_fadingOutBuffersCount = (int)(m_capacity * MyDecalsConstants.TEXTURE_LARGE_FADING_OUT_MINIMAL_TRIANGLE_COUNT_PERCENT); m_sortTriangleBuffersByTexture = new List <MyDecalsForRenderObjectsTriangleBuffer>(m_capacity); m_triangleBuffersByKey = new Dictionary <MyDecalsForModelsDictionaryKey, MyDecalsForRenderObjectsTriangleBuffer>(m_capacity); m_freeTriangleBuffers = new Stack <MyDecalsForRenderObjectsTriangleBuffer>(m_capacity); m_usedTriangleBuffers = new List <MyDecalsForRenderObjectsTriangleBuffer>(m_capacity); m_triangleBuffers = new MyDecalsForRenderObjectsTriangleBuffer[m_capacity]; for (int i = 0; i < m_capacity; i++) { m_triangleBuffers[i] = new MyDecalsForRenderObjectsTriangleBuffer(MyDecalsConstants.MAX_DECAL_TRIANGLES_IN_BUFFER); m_freeTriangleBuffers.Push(m_triangleBuffers[i]); } }
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; } } }