Exemple #1
0
        //-----------------------------------------------------------------------------------------
        private bool _InitVao()
        {
            // Create VAO object to hold vertex shader inputs and attach it to our context. As
            // OpenGL requires the VAO object (whether or not it's used) we do this here.
            GL.GenVertexArrays(1, out _vertexArrayName);
            GL.BindVertexArray(_vertexArrayName);

            GL.BindBuffer(BufferTarget.ArrayBuffer, Buffers.GetName(Buffers.Type.VERTEX));
            GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 0, 0);
            GL.BindBuffer(BufferTarget.ArrayBuffer, 0);

            // Enable the vertex attribute. Note we don't have to be bound to do this!
            GL.EnableVertexAttribArray(0);

            return(true);
        }
Exemple #2
0
        //-----------------------------------------------------------------------------------------
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            // Clear the window with given color
            GL.ClearBuffer(ClearBuffer.Color, 0, Statics.colorGreen);

            for (int cubeId = 0; cubeId < 24; cubeId++)
            {
                this._UpdateTransform(cubeId);

                // Reset atomic counter
                uint data = 0;
                GL.BindBuffer(BufferTarget.AtomicCounterBuffer, Buffers.GetName(Buffers.Type.ATOMIC_COUNTER));
                GL.ClearBufferSubData(BufferTarget.AtomicCounterBuffer, PixelInternalFormat.R8ui, IntPtr.Zero,
                                      (IntPtr)sizeof(uint), PixelFormat.Rgba, All.UnsignedInt, ref data);
                GL.BindBuffer(BufferTarget.AtomicCounterBuffer, 0);

                // Attach our atomic buffer to our contexts atomic counter buffer binding point
                GL.BindBufferBase(BufferRangeTarget.AtomicCounterBuffer, 0, Buffers.GetName(Buffers.Type.ATOMIC_COUNTER));

                // Use first program object to calculate object area
                GL.UseProgram(_shaderProgramName[0]);
                //GL.ColorMask( false, false, false, false );  // disable writing to framebuffer

                // Set the transformation matrix for current program object
                GL.UniformMatrix4(_uniformNames[0], false, ref _transformMatrix);

                // Run our shader to update our atomic counter
                GL.DrawArrays(PrimitiveType.Triangles, 0, 36);

                GL.BindBufferBase(BufferRangeTarget.UniformBuffer, 0, Buffers.GetName(Buffers.Type.ATOMIC_COUNTER));

                // Switch to our second program to actually draw the cube
                GL.UseProgram(_shaderProgramName[1]);
                //GL.ColorMask( true, true, true, true );  // enable writing to framebuffer

                GL.UniformMatrix4(_uniformNames[1], false, ref _transformMatrix);

                GL.DrawArrays(PrimitiveType.Triangles, 0, 36);
            }
            SwapBuffers();
        }
Exemple #3
0
        //-----------------------------------------------------------------------------------------
        private bool _InitBuffers()
        {
            float[] vertexData = new float[]
            {
                // back
                -0.25f, 0.25f, -0.25f, -0.25f, -0.25f, -0.25f, 0.25f, -0.25f, -0.25f,
                0.25f, -0.25f, -0.25f, 0.25f, 0.25f, -0.25f, -0.25f, 0.25f, -0.25f,
                // right
                0.25f, -0.25f, -0.25f, 0.25f, -0.25f, 0.25f, 0.25f, 0.25f, -0.25f,
                0.25f, -0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, -0.25f,
                // front
                0.25f, -0.25f, 0.25f, -0.25f, -0.25f, 0.25f, 0.25f, 0.25f, 0.25f,
                -0.25f, -0.25f, 0.25f, -0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f,
                // left
                -0.25f, -0.25f, 0.25f, -0.25f, -0.25f, -0.25f, -0.25f, 0.25f, 0.25f,
                -0.25f, -0.25f, -0.25f, -0.25f, 0.25f, -0.25f, -0.25f, 0.25f, 0.25f,
                // bottom
                -0.25f, -0.25f, 0.25f, 0.25f, -0.25f, 0.25f, 0.25f, -0.25f, -0.25f,
                0.25f, -0.25f, -0.25f, -0.25f, -0.25f, -0.25f, -0.25f, -0.25f, 0.25f,
                // top
                -0.25f, 0.25f, -0.25f, 0.25f, 0.25f, -0.25f, 0.25f, 0.25f, 0.25f,
                0.25f, 0.25f, 0.25f, -0.25f, 0.25f, 0.25f, -0.25f, 0.25f, -0.25f
            };

            GL.GenBuffers(Buffers.GetCount(), Buffers.Names);

            GL.BindBuffer(BufferTarget.ArrayBuffer, Buffers.GetName(Buffers.Type.VERTEX));
            GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(sizeof(float) * 4 * vertexData.Length),
                          vertexData, BufferUsageHint.StaticDraw);
            GL.BindBuffer(BufferTarget.ArrayBuffer, 0);

            GL.BindBuffer(BufferTarget.AtomicCounterBuffer, Buffers.GetName(Buffers.Type.ATOMIC_COUNTER));
            GL.BufferData(BufferTarget.AtomicCounterBuffer, (IntPtr)sizeof(uint),
                          IntPtr.Zero, BufferUsageHint.DynamicCopy);
            GL.BindBuffer(BufferTarget.AtomicCounterBuffer, 0);

            return(true);
        }