Exemplo n.º 1
0
        public void Render(Camera camera, Int2 screenResolution, Span <TInstance> instances, int start, int count)
        {
            Use();
            vertexConstants.Bind(0);
            this.instances.Bind(0);
            OnDrawSetup();

            var vertexConstantsData = new RasterizedVertexConstants
            {
                Projection     = camera.Projection,
                CameraPosition = camera.Position,
                CameraRight    = camera.Right,
                CameraUp       = camera.Up,
                CameraBackward = camera.Backward,
            };

            vertexConstants.Update(ref vertexConstantsData);

            while (count > 0)
            {
                var batchCount = Math.Min(this.instances.Capacity, count);
                this.instances.Update(instances, batchCount, start);
                OnBatchDraw(batchCount);
                count -= batchCount;
                start += batchCount;
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Sets up the rendering pipeline with any glyph rendering specific render state that can be shared across all glyph batches drawn using the GlyphRenderer.Render function.
 /// </summary>
 public void PreparePipeline()
 {
     Use();
     indices.Bind();
     vertexConstants.Bind(0);
     instances.Bind(0);
 }
Exemplo n.º 3
0
        public void Render(int source)
        {
            Use();
            constants.Bind(0);
            GL.BindTexture(TextureTarget.Texture2D, source);
            float inverseGamma = 1f / Gamma;

            constants.Update(ref inverseGamma);
            GL.DrawArrays(PrimitiveType.Triangles, 0, 3);
        }
Exemplo n.º 4
0
        public unsafe void Render(Camera camera, Int2 screenResolution, Span <MeshInstance> instances, int start, int count)
        {
            Use();
            vertexConstants.Bind(0);
            this.instances.Bind(0);
            meshCache.TriangleBuffer.Bind(1);

            //Examine the set of instances and batch them into groups using the same mesh data.
            var batches = new QuickDictionary <ulong, QuickList <MeshInstance>, PrimitiveComparer <ulong> >(16, meshCache.Pool);
            var end     = start + count;

            for (int i = start; i < end; ++i)
            {
                ref var instance = ref instances[i];
                ref var id       = ref Unsafe.As <int, ulong>(ref instance.VertexStart);
Exemplo n.º 5
0
        public void Render(Camera camera, Int2 screenResolution, Span <TInstance> instances, int start, int count)
        {
            Use();
            indices.Bind();
            vertexConstants.Bind(0);
            this.instances.Bind(0);
            pixelConstants.Bind(1);

            var vertexConstantsData = new RayTracedVertexConstants {
                Projection     = camera.Projection,
                CameraPosition = camera.Position,
                CameraRight    = camera.Right,
                NearClip       = camera.NearClip,
                CameraUp       = camera.Up,
                CameraBackward = camera.Backward,
            };

            vertexConstants.Update(ref vertexConstantsData);
            var viewportHeight     = 2 * (float)Math.Tan(camera.FieldOfView / 2);
            var viewportWidth      = viewportHeight * camera.AspectRatio;
            var pixelConstantsData = new RayTracedPixelConstants {
                CameraRight          = camera.Right,
                NearClip             = camera.NearClip,
                CameraUp             = camera.Up,
                FarClip              = camera.FarClip,
                CameraBackward       = camera.Backward,
                PixelSizeAtUnitPlane = new Vector2(viewportWidth / screenResolution.X, viewportHeight / screenResolution.Y)
            };

            pixelConstants.Update(ref pixelConstantsData);

            while (count > 0)
            {
                var batchCount = Math.Min(this.instances.Capacity, count);
                this.instances.Update(instances, batchCount, start);
                GL.DrawElements(PrimitiveType.Triangles, 36 * batchCount, indices.Type, 0);
                count -= batchCount;
                start += batchCount;
            }
        }