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