protected RenderPipeline(IRenderable renderable, ACamera camera) { Renderable = renderable; Camera = camera; if (_uniformBuffer != null) { return; } _uniformBuffer = new GLUniformBuffer(Marshal.SizeOf <Matrix4>() * 2, 0); _uniformBuffer.GpuAllocateDeferred(); }
private unsafe void CreateMiscGLObjects() { // Quad drawing. { Span <Vertex2D> quadVertices = stackalloc[] { new Vertex2D(1, 0, 1, 1), new Vertex2D(0, 0, 0, 1), new Vertex2D(1, 1, 1, 0), new Vertex2D(0, 1, 0, 0) }; QuadVBO = new GLBuffer <Vertex2D>(this, BufferTarget.ArrayBuffer, BufferUsageHint.StaticDraw, quadVertices, nameof(QuadVBO)); QuadVAO = MakeQuadVao(); CheckGlError(); } // Window VBO { Span <Vertex2D> winVertices = stackalloc[] { new Vertex2D(-1, 1, 0, 1), new Vertex2D(-1, -1, 0, 0), new Vertex2D(1, 1, 1, 1), new Vertex2D(1, -1, 1, 0), }; WindowVBO = new GLBuffer <Vertex2D>( this, BufferTarget.ArrayBuffer, BufferUsageHint.StaticDraw, winVertices, nameof(WindowVBO)); CheckGlError(); } // Batch rendering { BatchVBO = new GLBuffer(this, BufferTarget.ArrayBuffer, BufferUsageHint.DynamicDraw, Vertex2D.SizeOf * BatchVertexData.Length, nameof(BatchVBO)); BatchVAO = new GLHandle(GenVertexArray()); BindVertexArray(BatchVAO.Handle); ObjectLabelMaybe(ObjectLabelIdentifier.VertexArray, BatchVAO, nameof(BatchVAO)); // Vertex Coords GL.VertexAttribPointer(0, 2, VertexAttribPointerType.Float, false, Vertex2D.SizeOf, 0); GL.EnableVertexAttribArray(0); // Texture Coords. GL.VertexAttribPointer(1, 2, VertexAttribPointerType.Float, false, Vertex2D.SizeOf, 2 * sizeof(float)); GL.EnableVertexAttribArray(1); CheckGlError(); BatchEBO = new GLBuffer(this, BufferTarget.ElementArrayBuffer, BufferUsageHint.DynamicDraw, sizeof(ushort) * BatchIndexData.Length, nameof(BatchEBO)); } ProjViewUBO = new GLUniformBuffer <ProjViewMatrices>(this, BindingIndexProjView, nameof(ProjViewUBO)); UniformConstantsUBO = new GLUniformBuffer <UniformConstants>(this, BindingIndexUniformConstants, nameof(UniformConstantsUBO)); screenBufferHandle = new GLHandle(GL.GenTexture()); GL.BindTexture(TextureTarget.Texture2D, screenBufferHandle.Handle); ApplySampleParameters(TextureSampleParameters.Default); ScreenBufferTexture = GenTexture(screenBufferHandle, _windowing !.MainWindow !.FramebufferSize, true, null, TexturePixelType.Rgba32); }