예제 #1
0
            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);
            }
예제 #2
0
            /// <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;
                }
            }