Beispiel #1
0
        public static void Initialize(GLContext control)
        {
            if (DefaultShaderProgram != null)
            {
                return;
            }

            if (DefaultShaderProgram == null)
            {
                string frag = System.IO.File.ReadAllText("Shaders/FinalHDR.frag");
                string vert = System.IO.File.ReadAllText("Shaders/FinalHDR.vert");

                DefaultShaderProgram = new ShaderProgram(
                    new FragmentShader(frag),
                    new VertexShader(vert));

                int buffer = GL.GenBuffer();
                vao = new VertexBufferObject(buffer);
                vao.AddAttribute(0, 2, VertexAttribPointerType.Float, false, 16, 0);
                vao.AddAttribute(1, 2, VertexAttribPointerType.Float, false, 16, 8);
                vao.Initialize();

                Vector2[] positions = new Vector2[4]
                {
                    new Vector2(-1.0f, 1.0f),
                    new Vector2(-1.0f, -1.0f),
                    new Vector2(1.0f, 1.0f),
                    new Vector2(1.0f, -1.0f),
                };

                Vector2[] texCoords = new Vector2[4]
                {
                    new Vector2(0.0f, 1.0f),
                    new Vector2(0.0f, 0.0f),
                    new Vector2(1.0f, 1.0f),
                    new Vector2(1.0f, 0.0f),
                };

                List <float> list = new List <float>();
                for (int i = 0; i < 4; i++)
                {
                    list.Add(positions[i].X);
                    list.Add(positions[i].Y);
                    list.Add(texCoords[i].X);
                    list.Add(texCoords[i].Y);
                }

                Length = 4;

                float[] data = list.ToArray();
                GL.BufferData(BufferTarget.ArrayBuffer, sizeof(float) * data.Length, data, BufferUsageHint.StaticDraw);
            }
        }
Beispiel #2
0
        public void UpdateVaoAttributes()
        {
            vao.Clear();

            var strideTotal = Attributes.Sum(x => x.Stride);

            for (int i = 0; i < Attributes.Count; i++)
            {
                var att = Attributes[i];
                vao.AddAttribute(
                    att.UniformName,
                    att.ElementCount,
                    att.Type,
                    false,
                    strideTotal,
                    att.Offset);
            }
            vao.Initialize();
        }
        public static void Init()
        {
            if (Length == 0)
            {
                int buffer = GL.GenBuffer();
                vao = new VertexBufferObject(buffer);
                vao.AddAttribute(0, 2, VertexAttribPointerType.Float, false, 16, 0);
                vao.AddAttribute(1, 2, VertexAttribPointerType.Float, false, 16, 8);
                vao.Initialize();

                Vector2[] positions = new Vector2[4]
                {
                    new Vector2(-1.0f, 1.0f),
                    new Vector2(-1.0f, -1.0f),
                    new Vector2(1.0f, 1.0f),
                    new Vector2(1.0f, -1.0f),
                };

                Vector2[] texCoords = new Vector2[4]
                {
                    new Vector2(0.0f, 1.0f),
                    new Vector2(0.0f, 0.0f),
                    new Vector2(1.0f, 1.0f),
                    new Vector2(1.0f, 0.0f),
                };

                List <float> list = new List <float>();
                for (int i = 0; i < 4; i++)
                {
                    list.Add(positions[i].X);
                    list.Add(positions[i].Y);
                    list.Add(texCoords[i].X);
                    list.Add(texCoords[i].Y);
                }

                Length = 4;

                float[] data = list.ToArray();
                GL.BufferData(BufferTarget.ArrayBuffer, sizeof(float) * data.Length, data, BufferUsageHint.StaticDraw);
            }
        }
Beispiel #4
0
        public static void Init()
        {
            if (Length == 0)
            {
                int buffer = GL.GenBuffer();
                vao = new VertexBufferObject(buffer);
                vao.AddAttribute(0, 2, VertexAttribPointerType.Float, false, 8, 0);
                vao.Initialize();

                Length = 1;
            }
        }
        private void CheckBuffers(GLContext control)
        {
            bool buffersWereInitialized = vbo_position != 0;

            if (!buffersWereInitialized)
            {
                GL.GenBuffers(1, out vbo_position);

                vbo = new VertexBufferObject(vbo_position);
                vbo.AddAttribute("point", 4, VertexAttribPointerType.Float, false, 16, 0);
                vbo.Initialize();

                UpdateVertexData(control);
            }
        }
Beispiel #6
0
        public void UpdateVertexData()
        {
            Vector3[] vertices = new Vector3[3];
            vertices[0] = new Vector3(-1f, -1f, 1f);
            vertices[1] = new Vector3(3f, -1f, 1f);
            vertices[2] = new Vector3(-1f, 3f, 1f);

            GL.GenBuffers(1, out vbo_position);
            GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_position);
            GL.BufferData <Vector3>(BufferTarget.ArrayBuffer,
                                    new IntPtr(vertices.Length * Vector3.SizeInBytes),
                                    vertices, BufferUsageHint.StaticDraw);

            vao = new VertexBufferObject(vbo_position);
            vao.AddAttribute(0, 3, VertexAttribPointerType.Float, false, 12, 0);
            vao.Initialize();

            Prepare();

            GLErrorHandler.CheckGLError();
        }
        public static void Initialize(GLContext control)
        {
            if (DefaultShaderProgram != null)
            {
                return;
            }

            if (DefaultShaderProgram == null)
            {
                string vert = @"#version 330
                        layout (location = 0) in vec2 aPos;
                        layout (location = 1) in vec2 aTexCoords;

                        out vec2 TexCoords;

                        void main()
                        {
                            gl_Position = vec4(aPos.x, aPos.y, 0.0, 1.0); 
                            TexCoords = aTexCoords;
                        }";
                string frag = @"#version 330 core
                    out vec4 FragColor;
  
                    in vec2 TexCoords;

                    uniform sampler2D scene;
                    uniform sampler2D bloomBlur;
                    uniform float exposure;

                    void main()
                    {             
                        const float gamma = 2.2;
                        vec3 hdrColor = texture(scene, TexCoords).rgb;      
                        vec3 bloomColor = texture(bloomBlur, TexCoords).rgb * 0.7f;
                        hdrColor += bloomColor; // additive blending
                        // tone mapping
                     //   vec3 result = vec3(1.0) - exp(-hdrColor * exposure);
                        FragColor = vec4(hdrColor, 1.0);
                    }";


                DefaultShaderProgram = new ShaderProgram(
                    new FragmentShader(frag), new VertexShader(vert));

                int buffer = GL.GenBuffer();
                vao = new VertexBufferObject(buffer);
                vao.AddAttribute(0, 2, VertexAttribPointerType.Float, false, 16, 0);
                vao.AddAttribute(1, 2, VertexAttribPointerType.Float, false, 16, 8);
                vao.Initialize();

                Vector2[] positions = new Vector2[4]
                {
                    new Vector2(-1.0f, 1.0f),
                    new Vector2(-1.0f, -1.0f),
                    new Vector2(1.0f, 1.0f),
                    new Vector2(1.0f, -1.0f),
                };

                Vector2[] texCoords = new Vector2[4]
                {
                    new Vector2(0.0f, 1.0f),
                    new Vector2(0.0f, 0.0f),
                    new Vector2(1.0f, 1.0f),
                    new Vector2(1.0f, 0.0f),
                };

                List <float> list = new List <float>();
                for (int i = 0; i < 4; i++)
                {
                    list.Add(positions[i].X);
                    list.Add(positions[i].Y);
                    list.Add(texCoords[i].X);
                    list.Add(texCoords[i].Y);
                }

                Length = 4;

                float[] data = list.ToArray();
                GL.BufferData(BufferTarget.ArrayBuffer, sizeof(float) * data.Length, data, BufferUsageHint.StaticDraw);
            }
            else
            {
                vao.Initialize();
                DefaultShaderProgram.Link();
            }
        }