Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
        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);
                }
            }
        }