Exemplo n.º 1
0
 protected RenderPipeline(IRenderable renderable, ACamera camera)
 {
     Renderable = renderable;
     Camera     = camera;
     if (_uniformBuffer != null)
     {
         return;
     }
     _uniformBuffer = new GLUniformBuffer(Marshal.SizeOf <Matrix4>() * 2, 0);
     _uniformBuffer.GpuAllocateDeferred();
 }
Exemplo n.º 2
0
        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);
        }