private void Validate() { if (m_indirectDrawArgsBuffer == null || m_genPointsBuffer == null) { ComputeBufferCache bufferCache = null; if (s_bufferCachePool.TryGetValue(m_hash, out bufferCache)) { m_indirectDrawArgsBuffer = bufferCache.IndirectDrawArgsBuffer; m_genPointsBuffer = bufferCache.GenPointsBuffer; m_indirectDrawArgsData = null; m_aGenPointData = null; ++bufferCache.RefCount; } else if (m_indirectDrawArgsData != null && m_aGenPointData != null) { m_indirectDrawArgsBuffer = new ComputeBuffer(4, sizeof(int), ComputeBufferType.IndirectArguments); m_indirectDrawArgsBuffer.SetData(m_indirectDrawArgsData); m_genPointsBuffer = new ComputeBuffer(m_numVerts, GenPoint.Stride); m_genPointsBuffer.SetData(m_aGenPointData); s_bufferCachePool.Add ( m_hash, new ComputeBufferCache() { RefCount = 1, IndirectDrawArgsData = m_indirectDrawArgsData, GenPointsData = m_aGenPointData, IndirectDrawArgsBuffer = m_indirectDrawArgsBuffer, GenPointsBuffer = m_genPointsBuffer } ); m_indirectDrawArgsData = null; m_aGenPointData = null; } else { Assert.Warn("Null constant buffers and no data to initialize from."); } } if (m_renderMaterialProps == null) { m_renderMaterialProps = new MaterialPropertyBlock(); } }
private void OnDisable() { m_indirectDrawArgsBuffer = null; m_genPointsBuffer = null; ComputeBufferCache bufferCache = null; if (s_bufferCachePool.TryGetValue(m_hash, out bufferCache)) { --bufferCache.RefCount; if (bufferCache.RefCount == 0) { bufferCache.Release(); s_bufferCachePool.Remove(m_hash); } } }