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; } }
/// <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); }
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); }
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);
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; } }