Exemple #1
0
        internal TerrainPatch(
            HeightMap heightMap,
            Rectangle patchBounds,
            GraphicsDevice graphicsDevice,
            TerrainPatchIndexBufferCache indexBufferCache,
            Material material)
        {
            Bounds = patchBounds;

            _indexBuffer = indexBufferCache.GetIndexBuffer(
                patchBounds.Width,
                patchBounds.Height,
                out var indices);

            _numIndices = (uint)indices.Length;

            _vertexBuffer = AddDisposable(CreateVertexBuffer(
                                              graphicsDevice,
                                              heightMap,
                                              patchBounds,
                                              indices,
                                              out var boundingBox,
                                              out var triangles));

            BoundingBox = boundingBox;
            Triangles   = triangles;

            _material = material;

            _beforeRender = (CommandList cl, Graphics.Rendering.RenderContext context, in RenderItem renderItem) =>
            {
                cl.SetVertexBuffer(0, _vertexBuffer);
            };
        }
Exemple #2
0
        internal TerrainPatch(
            HeightMap heightMap,
            Rectangle patchBounds,
            GraphicsDevice graphicsDevice,
            TerrainPatchIndexBufferCache indexBufferCache,
            Material material)
        {
            DebugName = $"Terrain_{Bounds}";

            Bounds = patchBounds;

            _indexBuffer = indexBufferCache.GetIndexBuffer(
                patchBounds.Width,
                patchBounds.Height,
                out var indices);

            _numIndices = (uint)indices.Length;

            _vertexBuffer = AddDisposable(CreateVertexBuffer(
                                              graphicsDevice,
                                              heightMap,
                                              patchBounds,
                                              indices,
                                              out var boundingBox,
                                              out var triangles));

            BoundingBox = boundingBox;
            Triangles   = triangles;

            MaterialPass = new MaterialPass(material, null);
        }
Exemple #3
0
        internal TerrainPatch(
            HeightMap heightMap,
            Rectangle patchBounds,
            GraphicsDevice graphicsDevice,
            TerrainPatchIndexBufferCache indexBufferCache,
            ResourceSet materialResourceSet)
        {
            Bounds = patchBounds;

            _indexBuffer = indexBufferCache.GetIndexBuffer(
                patchBounds.Width,
                patchBounds.Height,
                out var indices);

            _numIndices = (uint)indices.Length;

            _vertexBuffer = AddDisposable(CreateVertexBuffer(
                                              graphicsDevice,
                                              heightMap,
                                              patchBounds,
                                              indices,
                                              out var boundingBox,
                                              out var triangles));

            BoundingBox = boundingBox;
            Triangles   = triangles;

            _beforeRender = (cl, context) =>
            {
                cl.SetGraphicsResourceSet(4, materialResourceSet);
                cl.SetVertexBuffer(0, _vertexBuffer);
            };
        }
Exemple #4
0
        internal TerrainPatch(
            HeightMap heightMap,
            Rectangle patchBounds,
            GraphicsDevice graphicsDevice,
            TerrainPatchIndexBufferCache indexBufferCache,
            ResourceSet materialResourceSet,
            ResourceSet radiusCursorDecalsResourceSet,
            Func <ResourceSet> causticsRendererCallback)
        {
            Bounds = patchBounds;

            _indexBuffer = indexBufferCache.GetIndexBuffer(
                patchBounds.Width,
                patchBounds.Height,
                out var indices);

            _numIndices = (uint)indices.Length;

            _vertexBuffer = AddDisposable(CreateVertexBuffer(
                                              graphicsDevice,
                                              heightMap,
                                              patchBounds,
                                              indices,
                                              out var boundingBox,
                                              out var triangles));

            BoundingBox = boundingBox;
            Triangles   = triangles;

            _beforeRender = (cl, context) =>
            {
                var isRender = context.Scene3D.Waters.IsRenderCaustics;
                if (isRender)
                {
                    var causticsResourceSet = causticsRendererCallback.Invoke();
                    cl.SetGraphicsResourceSet(4, causticsResourceSet);
                }
                else
                {
                    cl.SetGraphicsResourceSet(4, materialResourceSet);
                }
                cl.SetGraphicsResourceSet(5, radiusCursorDecalsResourceSet);
                cl.SetVertexBuffer(0, _vertexBuffer);
            };
        }