public void Dispose() { BoundsBuffer?.Dispose(); SamplesBuffer?.Dispose(); PackedUVsBuffer?.Dispose(); InputVerticesBuffer?.Dispose(); InputTrianglesBuffer?.Dispose(); InputNormalsBuffer?.Dispose(); InputTangentsBuffer?.Dispose(); InputUVsBuffer?.Dispose(); OutputVerticesBuffer?.Dispose(); OutputTrianglesBuffer?.Dispose(); OutputNormalsBuffer?.Dispose(); OutputTangentsBuffer?.Dispose(); OutputUVsBuffer?.Dispose(); DestroyImmediate(MeshSampleComputeShader); DestroyImmediate(TessellationComputeShader); }
/// <summary> /// Note: I chose to use buffers instead of writing to texture 3ds directly on the GPU because for some reason it's /// stupidly complicated to write to a texture3d on the gpu and then get that data back to the cpu for serialization. /// </summary> private void RunSamplePhase(bool hasUVs, out float[] samples, out float[] packedUVs, Vector3 minBounds, Vector3 maxBounds) { MeshSampleComputeShader.SetVector(Properties.MinBounds_Vector3, minBounds); MeshSampleComputeShader.SetVector(Properties.MaxBounds_Vector3, maxBounds); int threadGroups = Mathf.CeilToInt(m_size / 8f); MeshSampleComputeShader.Dispatch(GetTextureWholeKernel, threadGroups, threadGroups, threadGroups); SamplesBuffer.GetData(m_samples); samples = m_samples; if (hasUVs) { PackedUVsBuffer.GetData(m_packedUVs); packedUVs = m_packedUVs; } else { packedUVs = null; } }