public VAO(OpenGL gl, IShaderProgram program, VBO vbo) { _gl = gl; _program = program; VBO = vbo; var buffers = new uint[1]; gl.GenVertexArrays(1, buffers); Handle = buffers[0]; using (new Bind(program)) using (new Bind(this)) using (new Bind(vbo)) { var stride = Vect3f.SizeInBytes * 2 + Vect4f.SizeInBytes; gl.EnableVertexAttribArray(0); gl.VertexAttribPointer(0, 3, OpenGL.GL_FLOAT, true, stride, IntPtr.Zero); gl.BindAttribLocation(program.Handle, 0, "vert_position"); gl.EnableVertexAttribArray(1); gl.VertexAttribPointer(1, 3, OpenGL.GL_FLOAT, true, stride, new IntPtr(Vect3f.SizeInBytes)); gl.BindAttribLocation(program.Handle, 1, "vert_normal"); gl.EnableVertexAttribArray(2); gl.VertexAttribPointer(2, 4, OpenGL.GL_FLOAT, false, stride, new IntPtr(Vect3f.SizeInBytes * 2)); gl.BindAttribLocation(program.Handle, 2, "vert_colour"); } }
public void Apply(IVertexArrayAdapter adapter, IShaderProgram shaderProgram) { if (adapter == null) { throw new ArgumentNullException(nameof(adapter)); } if (shaderProgram == null) { throw new ArgumentNullException(nameof(shaderProgram)); } shaderProgram.ThrowIfDisposed(); foreach (var element in Elements) { /* Let ShaderAttributeNotFoundException bubble up * If we can't find an attribute in the shaderProgram that matches * the usages defined in the given vertex declaration. */ int location = shaderProgram.GetAttributeLocation(element.Usage); adapter.EnableVertexAttribArray(location); //TODO: cache these values adapter.VertexAttribPointer( location, element.NumberOfComponents, element.PointerType, element.Normalised, Stride, element.Offset ); } }
public DatumPlaneLeaf(OpenGL gl, IShaderProgram shader, IEnumerable<DatumPlane> planes) { _gl = gl; _shader = shader; var linedata = new List<Vert>(); var quaddata = new List<Vert>(); const float size = 20f; foreach (var plane in planes) { var v1 = (plane.Transform * Mat4.Translate(new Vect3(-size / 2.0, -size / 2.0, 0))).ToVect3(); var v2 = (plane.Transform * Mat4.Translate(new Vect3(size / 2.0, -size / 2.0, 0))).ToVect3(); var v3 = (plane.Transform * Mat4.Translate(new Vect3(size / 2.0, size / 2.0, 0))).ToVect3(); var v4 = (plane.Transform * Mat4.Translate(new Vect3(-size / 2.0, size / 2.0, 0))).ToVect3(); linedata.Add(new Vert(v1, Vect3.Zero, _edgecolour)); linedata.Add(new Vert(v2, Vect3.Zero, _edgecolour)); linedata.Add(new Vert(v2, Vect3.Zero, _edgecolour)); linedata.Add(new Vert(v3, Vect3.Zero, _edgecolour)); linedata.Add(new Vert(v3, Vect3.Zero, _edgecolour)); linedata.Add(new Vert(v4, Vect3.Zero, _edgecolour)); linedata.Add(new Vert(v4, Vect3.Zero, _edgecolour)); linedata.Add(new Vert(v1, Vect3.Zero, _edgecolour)); quaddata.AddRange(new[] { new Vert(v1, Vect3.Zero, _basecolour), new Vert(v2, Vect3.Zero, _basecolour), new Vert(v3, Vect3.Zero, _basecolour), new Vert(v4, Vect3.Zero, _basecolour) }); quaddata.AddRange(new[] { new Vert(v4, Vect3.Zero, _basecolour), new Vert(v3, Vect3.Zero, _basecolour), new Vert(v2, Vect3.Zero, _basecolour), new Vert(v1, Vect3.Zero, _basecolour) }); } _lineVAO = new VAO(gl, _shader, new VBO(gl, BeginMode.Lines, linedata)); _quadVAO = new VAO(gl, _shader, new VBO(gl, BeginMode.Quads, quaddata)); }
public FullTextureProcessor(IClientSettings settings, IContext context, string fragmentShaderText, string[] samplerNames) { var header = settings.IsEs ? EsHeader : DesktopHeader; var vertexShader = context.Create.VertexShader(header + VertexShaderText); var decodeFragmentShader = context.Create.FragmentShader(header + fragmentShaderText); program = context.Create.Program(new ShaderProgramDescription { VertexShaders = new[] { vertexShader }, FragmentShaders = new[] { decodeFragmentShader }, VertexAttributeNames = new[] { "in_position" }, SamplerNames = samplerNames }); var vertexBuffer = context.Create.Buffer(BufferTarget.ArrayBuffer, 4 * Vertex.Size, BufferUsageHint.StaticDraw, new[] { new Vertex(-1f, 1f), new Vertex(1f, 1f), new Vertex(1f, -1f), new Vertex(-1f, -1f) }); var elementArrayBuffer = context.Create.Buffer(BufferTarget.ElementArrayBuffer, 6 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[] { 0, 1, 2, 0, 2, 3 }); vertexArray = context.Create.VertexArray(); vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.Size, 0); vertexArray.SetElementArrayBuffer(elementArrayBuffer); }
protected override void OnLoad(EventArgs e) { GL.Enable(EnableCap.Texture2D); GL.Enable(EnableCap.CullFace); GL.Enable(EnableCap.DepthTest); GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); //solid = new Cube(); var data = new List<OpenGLVertex> { new OpenGLVertex {Position = new Vector3(-1, -1, 0), Colour =new Color4(0.118f, 0.118f, 0.118f, 1f).ToVector4()},//bottom left new OpenGLVertex {Position = new Vector3(1, -1, 0), Colour= new Color4(0.118f, 0.118f, 0.118f, 1f).ToVector4() }, //bottom right new OpenGLVertex {Position = new Vector3(1, 1, 0), Colour = new Color4(0.176f, 0.176f, 0.188f, 1f).ToVector4() },//top right new OpenGLVertex {Position = new Vector3(-1, 1, 0), Colour = new Color4(0.176f, 0.176f, 0.188f, 1f).ToVector4()},//top left }; _ubo = new CameraUBO(); _shader = new FlatShaderProgram(); _basicShader = new BasicShaderProgram(_ubo); _vbo = new VBO(data) { BeginMode = BeginMode.Quads }; _vao = new VAO(_shader, _vbo); var dotdata = new List<OpenGLVertex> { new OpenGLVertex {Position = new Vector3(0, 0, 0)}, new OpenGLVertex {Position = new Vector3(10, 10, 0)}, }; _dotsvbo = new VBO(dotdata) { BeginMode = BeginMode.Lines }; _dotsvao = new VAO(_basicShader, _dotsvbo); var stl = new STL("rounded_cube.stl", Color.GreenYellow); var cubedata = new List<OpenGLVertex>(); var col = stl.Color.ToVector4(); foreach (var ele in stl.Elements) { cubedata.Add(new OpenGLVertex { Position = ele.P1.ToVector3(), Normal = ele.Normal.ToVector3(), Colour = col }); cubedata.Add(new OpenGLVertex { Position = ele.P2.ToVector3(), Normal = ele.Normal.ToVector3(), Colour = col }); cubedata.Add(new OpenGLVertex { Position = ele.P3.ToVector3(), Normal = ele.Normal.ToVector3(), Colour = col }); } _geovbo = new VBO(cubedata) { BeginMode = BeginMode.Triangles }; _geovao = new VAO(_basicShader, _geovbo); var err = GL.GetError(); if (err != ErrorCode.NoError) Console.WriteLine("Error at OnLoad: " + err); }
public void SetUp(IShaderProgram shaderProgram, IVertexDeclaration vertexDeclaration) { this.ThrowIfDisposed(); if (shaderProgram == null) { throw new ArgumentNullException(nameof(shaderProgram)); } if (vertexDeclaration == null) { throw new ArgumentNullException(nameof(vertexDeclaration)); } vertexDeclaration.Apply(adapter, shaderProgram); }
public CoordinateSystemLeaf(OpenGL gl, IShaderProgram shader, IEnumerable<CoordinateSystem> coordinateSystems) { _shader = shader; var data = new List<Vert>(); foreach (var csys in coordinateSystems) { var origin = csys.Transform.ToVect3(); data.Add(new Vert(origin, Vect3.Zero, Color.Blue.ToVector4())); data.Add(new Vert((csys.Transform * Mat4.Translate(new Vect3(Size, 0, 0))).ToVect3(), Vect3.Zero, Color.Blue.ToVector4())); data.Add(new Vert(origin, Vect3.Zero, Color.Red.ToVector4())); data.Add(new Vert((csys.Transform * Mat4.Translate(new Vect3(0, Size, 0))).ToVect3(), Vect3.Zero, Color.Red.ToVector4())); data.Add(new Vert(origin, Vect3.Zero, Color.Green.ToVector4())); data.Add(new Vert((csys.Transform * Mat4.Translate(new Vect3(0, 0, Size))).ToVect3(), Vect3.Zero, Color.Green.ToVector4())); } _vao = new VAO(gl, _shader, new VBO(gl, BeginMode.Lines, data)); }
public void Load() { _shader = _assets.Shader<BlockShaderProgram>(); var stl = new STL("chamfer_cube.stl", Color.Yellow); var cubedata = new List<float>(); foreach (var vertex in stl.ToMesh().Vertices) { cubedata.Add((float)vertex.Position.X); cubedata.Add((float)vertex.Position.Y); cubedata.Add((float)vertex.Position.Z); } foreach (var vertex in stl.ToMesh().Vertices) { cubedata.Add((float)vertex.Normal.X); cubedata.Add((float)vertex.Normal.Y); cubedata.Add((float)vertex.Normal.Z); } _squareVertices = cubedata.ToArray(); GL.GenVertexArrays(1, out _squareVao); GL.GenBuffers(1, out _squareVbo); GL.BindVertexArray(_squareVao); GL.BindBuffer(BufferTarget.ArrayBuffer, _squareVbo); GL.EnableVertexAttribArray(0); GL.EnableVertexAttribArray(1); GL.EnableVertexAttribArray(2); GL.EnableVertexAttribArray(3); GL.EnableVertexAttribArray(4); GL.Arb.VertexAttribDivisor(2, 1);//position GL.Arb.VertexAttribDivisor(3, 1);//rotation GL.Arb.VertexAttribDivisor(4, 1);//color GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 0, 0); GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, false, 0, 0); GL.VertexAttribPointer(2, 3, VertexAttribPointerType.Float, false, 11 * sizeof(float), _squareVertices.Length * sizeof(float)); GL.VertexAttribPointer(3, 4, VertexAttribPointerType.Float, false, 11 * sizeof(float), (_squareVertices.Length + 3) * sizeof(float)); GL.VertexAttribPointer(4, 4, VertexAttribPointerType.Float, false, 11 * sizeof(float), (_squareVertices.Length + 3 + 4) * sizeof(float)); Loaded = true; }
public override void OnLoad(OpenGL gl) { gl.Enable(OpenGL.GL_CULL_FACE); gl.Enable(OpenGL.GL_DEPTH_TEST); gl.Enable(OpenGL.GL_BLEND); gl.BlendFunc(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.OneMinusSourceAlpha); _camera = new OrthographicCamera(); _camera.View *= Mat4.RotateY(Angle.FromDegrees(15)); _shader = new BasicShader(gl); _modelUniform = gl.GetUniformLocation(_shader.Handle, "Model"); _viewUniform = gl.GetUniformLocation(_shader.Handle, "View"); _projectionUniform = gl.GetUniformLocation(_shader.Handle, "Projection"); _graph = new OpenGLSceneGraph(); _graph.Nodes.Add(new CoordinateSystemLeaf(gl, _shader, _model.Features.OfType<CoordinateSystem>())); _graph.Nodes.Add(new DatumPlaneLeaf(gl, _shader, _model.Features.OfType<DatumPlane>())); _graph.Nodes.Add(new GeometryLeaf(gl, _shader)); }
internal SpriteBatch( ISpriteSheet spriteSheet, IShaderProgram shaderProgram, IVertexArrayObject vao, IVertexBuffer<VertexPositionColourTexture> vbo, IDrawAdapter adapter) { spriteSheet.ThrowIfNull(nameof(spriteSheet)); this.spriteSheet = spriteSheet; Debug.Assert(shaderProgram != null, $"{nameof(shaderProgram)} was null in SpriteBatch"); Debug.Assert(vao != null, $"{nameof(vao)} was null in SpriteBatch"); Debug.Assert(vbo != null, $"{nameof(vbo)} was null ins SpriteBatch"); Debug.Assert(adapter != null, $"{nameof(adapter)} was null in SpriteBatch"); this.shaderProgram = shaderProgram; this.vao = vao; this.vbo = vbo; this.adapter = adapter; Initialise(); }
public VAO(IShaderProgram program, VBO vbo) { _program = program; VBO = vbo; GL.GenVertexArrays(1, out _handle); using (new Bind(program)) using (new Bind(this)) using (new Bind(vbo)) { var stride = Vector3.SizeInBytes * 2 + Vector4.SizeInBytes; GL.EnableVertexAttribArray(0); GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, true, stride, 0); GL.BindAttribLocation(program.Handle, 0, "vert_position"); GL.EnableVertexAttribArray(1); GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, true, stride, Vector3.SizeInBytes); GL.BindAttribLocation(program.Handle, 1, "vert_normal"); GL.EnableVertexAttribArray(2); GL.VertexAttribPointer(2, 4, VertexAttribPointerType.Float, false, stride, Vector3.SizeInBytes * 2); GL.BindAttribLocation(program.Handle, 2, "vert_colour"); } }
/* --------------------------------------Attributes and Uniforms---------------------------------------------------*/ public abstract void BindAttributeLocation(IShaderProgram program, int index, String name);
/* --------------------------------------------Shaders---------------------------------------------------*/ public abstract void AttachShader(IShaderProgram program, IShader shader);
public abstract void LinkProgram(IShaderProgram program);
public override void Initialize() { var vertexBuffer = Context.Create.Buffer(BufferTarget.Array, 24 * 8 * sizeof(float), BufferUsageHint.StaticDraw, new[] { new Vertex(1f, -1f, 1f, 1f, 0.0f, 0.0f, 0f, 0f), new Vertex(1f, 1f, 1f, 1f, 0.0f, 0.0f, 1f, 0f), new Vertex(1f, 1f, -1f, 1f, 0.0f, 0.0f, 1f, 1f), new Vertex(1f, -1f, -1f, 1f, 0.0f, 0.0f, 0f, 1f), new Vertex(1f, 1f, 1f, 0.0f, 1f, 0.0f, 0f, 0f), new Vertex(-1f, 1f, 1f, 0.0f, 1f, 0.0f, 1f, 0f), new Vertex(-1f, 1f, -1f, 0.0f, 1f, 0.0f, 1f, 1f), new Vertex(1f, 1f, -1f, 0.0f, 1f, 0.0f, 0f, 1f), new Vertex(-1f, 1f, 1f, -1f, 0.0f, 0.0f, 0f, 0f), new Vertex(-1f, -1f, 1f, -1f, 0.0f, 0.0f, 1f, 0f), new Vertex(-1f, -1f, -1f, -1f, 0.0f, 0.0f, 1f, 1f), new Vertex(-1f, 1f, -1f, -1f, 0.0f, 0.0f, 0f, 1f), new Vertex(-1f, -1f, 1f, 0.0f, -1f, 0.0f, 0f, 0f), new Vertex(1f, -1f, 1f, 0.0f, -1f, 0.0f, 1f, 0f), new Vertex(1f, -1f, -1f, 0.0f, -1f, 0.0f, 1f, 1f), new Vertex(-1f, -1f, -1f, 0.0f, -1f, 0.0f, 0f, 1f), new Vertex(-1f, -1f, 1f, 0.0f, 0.0f, 1f, 0f, 0f), new Vertex(-1f, 1f, 1f, 0.0f, 0.0f, 1f, 1f, 0f), new Vertex(1f, 1f, 1f, 0.0f, 0.0f, 1f, 1f, 1f), new Vertex(1f, -1f, 1f, 0.0f, 0.0f, 1f, 0f, 1f), new Vertex(-1f, 1f, -1f, 0.0f, 0.0f, -1f, 0f, 0f), new Vertex(-1f, -1f, -1f, 0.0f, 0.0f, -1f, 1f, 0f), new Vertex(1f, -1f, -1f, 0.0f, 0.0f, -1f, 1f, 1f), new Vertex(1f, 1f, -1f, 0.0f, 0.0f, -1f, 0f, 1f) }); var indexBuffer = Context.Create.Buffer(BufferTarget.ElementArray, 36 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[] { 0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23 }); vertexArray = Context.Create.VertexArray(); vertexArray.SetElementArrayBuffer(indexBuffer); vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, 32, 0); vertexArray.SetVertexAttributeF(1, vertexBuffer, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, 32, 12); vertexArray.SetVertexAttributeF(2, vertexBuffer, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, 32, 24); transformBuffer = Context.Create.Buffer(BufferTarget.Uniform, 64, BufferUsageHint.DynamicDraw); cameraBuffer = Context.Create.Buffer(BufferTarget.Uniform, 64, BufferUsageHint.DynamicDraw); cameraExtraBuffer = Context.Create.Buffer(BufferTarget.Uniform, 12, BufferUsageHint.DynamicDraw); lightBuffer = Context.Create.Buffer(BufferTarget.Uniform, 12, BufferUsageHint.DynamicDraw); using (var textureLoader = new TextureLoader("../Textures/DiffuseTest.png")) { diffuseMap = Context.Create.Texture2D(textureLoader.Width, textureLoader.Height, TextureHelper.CalculateMipCount(textureLoader.Width, textureLoader.Height, 1), Format.Rgba8); for (int i = 0; i < diffuseMap.MipCount; i++) { diffuseMap.SetData(i, textureLoader.GetMipData(i), FormatColor.Rgba, FormatType.UnsignedByte); } } using (var textureLoader = new TextureLoader("../Textures/SpecularTest.png")) { specularMap = Context.Create.Texture2D(textureLoader.Width, textureLoader.Height, TextureHelper.CalculateMipCount(textureLoader.Width, textureLoader.Height, 1), Format.Rgba8); for (int i = 0; i < diffuseMap.MipCount; i++) { specularMap.SetData(i, textureLoader.GetMipData(i), FormatColor.Rgba, FormatType.UnsignedByte); } } sampler = Context.Create.Sampler(); sampler.SetMagFilter(TextureMagFilter.Linear); sampler.SetMinFilter(TextureMinFilter.LinearMipmapLinear); sampler.SetMaxAnisotropy(16f); var vsh = Context.Create.VertexShader(VertexShaderText); var fsh = Context.Create.FragmentShader(FragmentShaderText); program = Context.Create.Program(new ShaderProgramDescription { VertexShaders = new[] { vsh }, FragmentShaders = new[] { fsh }, VertexAttributeNames = new[] { "in_position", "in_normal", "in_tex_coord" }, UniformBufferNames = new[] { "Transform", "Camera", "CameraExtra", "Light" }, SamplerNames = new[] { "DiffuseMap", "SpecularMap" } }); }
public PointRenderer(OpenGL gl, IShaderProgram shader, IEnumerable<Vert> data) { _shader = shader; _vbo = new VBO(gl, BeginMode.Lines, data); _vao = new VAO(gl, _shader, _vbo); }
protected override void OnLoad(EventArgs e) { GL.Enable(EnableCap.Texture2D); GL.Enable(EnableCap.CullFace); GL.Enable(EnableCap.DepthTest); GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); _fbo = new FBO(Width,Height); _assetManager.Load(); _shader = _assetManager.Shader<DefaultShaderProgram>(); var data = new List<OpenGLVertex> { new OpenGLVertex {Position = new Vector3(-1, -1, 0),TexCoord = new Vector2(0,0)}, new OpenGLVertex {Position = new Vector3(1, -1, 0),TexCoord = new Vector2(1,0)}, new OpenGLVertex {Position = new Vector3(1, 1, 0),TexCoord = new Vector2(1,1)}, new OpenGLVertex {Position = new Vector3(-1, 1, 0),TexCoord = new Vector2(0,1)} }; _vbo = new VBO(data){BeginMode = BeginMode.Quads}; _vao = new VAO(_assetManager.Shader<FlatShaderProgram>(), _vbo); var dotdata = new List<OpenGLVertex> { new OpenGLVertex {Position = new Vector3(0, 0, 0)}, new OpenGLVertex {Position = new Vector3(10, 10, 0)}, }; _dotsvbo = new VBO(dotdata) { BeginMode = BeginMode.Lines }; _dotsvao = new VAO(_assetManager.Shader<BasicShaderProgram>(), _dotsvbo); _viewManager.Load(); Bus.Add(new DebugMessage(Timer.LastTickTime, "Loaded OpenGL Window")); var err = GL.GetError(); if (err != ErrorCode.NoError) Console.WriteLine("Error at OnLoad: " + err); }
public override void Initialize() { var vertexBuffer = Context.Create.Buffer(BufferTarget.Array, 4 * 8 * sizeof(float), BufferUsageHint.StaticDraw, new[] { new Vertex(-1f, -1f, 0f, 1f), new Vertex(-1f, 1f, 0f, 0f), new Vertex(1f, 1f, 1f, 0f), new Vertex(1f, -1f, 1f, 1f), }); var indexBuffer = Context.Create.Buffer(BufferTarget.ElementArray, 6 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[] { 0, 1, 2, 0, 2, 3 }); vertexArray = Context.Create.VertexArray(); vertexArray.SetElementArrayBuffer(indexBuffer); vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Four, VertexAttribPointerType.Float, false, 32, 0); vertexArray.SetVertexAttributeF(1, vertexBuffer, VertexAttributeDimension.Four, VertexAttribPointerType.Float, false, 32, 16); using (var textureLoader = new TextureLoader("../Textures/Chess256.png")) { diffuseMap = Context.Create.Texture2D(textureLoader.Width, textureLoader.Height, TextureHelper.CalculateMipCount(textureLoader.Width, textureLoader.Height, 1), Format.Srgb8Alpha8); for (int i = 0; i < diffuseMap.MipCount; i++) diffuseMap.SetData(i, textureLoader.GetMipData(i), FormatColor.Rgba, FormatType.UnsignedByte); } sampler = Context.Create.Sampler(); sampler.SetMagFilter(TextureMagFilter.Linear); sampler.SetMinFilter(TextureMinFilter.LinearMipmapLinear); sampler.SetMaxAnisotropy(16f); var vsh = Context.Create.VertexShader(VertexShaderText); var fsh = Context.Create.FragmentShader(FragmentShaderText); program = Context.Create.Program(new ShaderProgramDescription { VertexShaders = new[] {vsh}, FragmentShaders = new[] {fsh}, VertexAttributeNames = new[] {"in_position", "in_tex_coord"}, SamplerNames = new[] {"DiffuseMap"} }); }
public abstract int GetAttribLocation(IShaderProgram program, String name);
public abstract List<IShader> GetAttachedShaders(IShaderProgram program);
public abstract IActiveInfo GetActiveUniform(IShaderProgram program, int index);
public Addition(IContentLoader contentLoader, byte fboTexComponentCount = 4, bool fboTexFloat = false) { _addProgram = contentLoader.LoadPixelShader("addition.glsl"); _fboTexComponentCount = fboTexComponentCount; _fboTexFloat = fboTexFloat; }
public abstract void UseProgram(IShaderProgram program);
public override void Initialize() { var vertexBuffer = Context.Create.Buffer(BufferTarget.Array, 3 * 8 * sizeof(float), BufferUsageHint.StaticDraw, new[] { new Vertex { Position = new Vector4(-0.5f, -0.5f, 0f, 1f), Color = new Color4(1, 0, 0, 1)}, new Vertex { Position = new Vector4(0.0f, 0.5f, 0f, 1f), Color = new Color4(0, 1, 0, 1)}, new Vertex { Position = new Vector4(0.5f, -0.5f, 0f, 1f), Color = new Color4(1, 1, 0, 1)} }); var indexBuffer = Context.Create.Buffer(BufferTarget.ElementArray, 3 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[] { 0, 1, 2 }); vertexArray = Context.Create.VertexArray(); vertexArray.SetElementArrayBuffer(indexBuffer); vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Four, VertexAttribPointerType.Float, false, 32, 0); vertexArray.SetVertexAttributeF(1, vertexBuffer, VertexAttributeDimension.Four, VertexAttribPointerType.Float, false, 32, 16); IVertexShader vsh = Context.Create.VertexShader(VertexShaderText); IFragmentShader fsh = Context.Create.FragmentShader(FragmentShaderText); program = Context.Create.Program(new ShaderProgramDescription { VertexShaders = new[] {vsh}, FragmentShaders = new[] {fsh}, VertexAttributeNames = new[] {"in_position", "in_color"} }); }
public abstract void ValidateProgram(IShaderProgram program);
public void SetLightViewMesh(VAO mesh, IShaderProgram shader) { lightViewMesh = mesh; lightViewShader = shader; }
public void SetDeferredGeometryMesh(VAO mesh, IShaderProgram shader) { deferredMesh = mesh; deferredShader = shader; }
/// <summary> /// Initializes a new instance of the <see cref="MeshVisual"/> class. /// </summary> /// <param name="drawable"></param> /// <param name="shader">The shader.</param> /// <param name="textureBindings">The texture bindings.</param> public MeshVisual(IDrawable drawable, IShaderProgram shader, IEnumerable <TextureBinding> textureBindings = null) { ShaderProgram = shader; Drawable = drawable; TextureBindings = textureBindings; }
public void SetShadowMapMesh(VAO mesh, IShaderProgram shader) { shadowMapMesh = mesh; shadowMapShader = shader; }
public abstract bool IsShaderProgram(IShaderProgram shaderProgram);
public abstract String GetProgramInfoLog(IShaderProgram program);
//public void UpdateInstanceAttribute<DATA_ELEMENT_TYPE>(string name, DATA_ELEMENT_TYPE[] data) where DATA_ELEMENT_TYPE : struct //{ // Vao.SetAttribute(GetAttributeShaderLocationAndCheckVao(name), data, VertexAttribPointerType.Float, 3, true); //} /// <summary> /// Updates the mesh shader. /// </summary> /// <param name="mesh">The mesh.</param> /// <param name="shaderProgram">The shader program.</param> /// <exception cref="ArgumentNullException"> /// mesh /// or /// shaderProgram /// or /// A shaderName is required /// </exception> /// <exception cref="ArgumentException">Shader '" + shaderName + "' does not exist</exception> public void UpdateMeshShader(DefaultMesh mesh, IShaderProgram shaderProgram) { ShaderProgram = shaderProgram ?? throw new ArgumentNullException(nameof(shaderProgram)); Vao = mesh is null ? null : VAOLoader.FromMesh(mesh, ShaderProgram); }
public abstract Object GetProgramParameter(IShaderProgram program, int pName);
public abstract List<float> GetUniform(IShaderProgram program, IUniformLocation location);
public CursorRenderer(IClientSettings settings, IContext context, ITextureLoader textureLoader) { var header = settings.IsEs ? EsHeader : DesktopHeader; var vertexShader = context.Create.VertexShader(header + VertexShaderText); var fragmentShader = context.Create.FragmentShader(header + FragmentShaderText); program = context.Create.Program(new ShaderProgramDescription { VertexShaders = new[] { vertexShader }, FragmentShaders = new[] { fragmentShader }, VertexAttributeNames = new[] { "in_position", "in_tex_coord" }, SamplerNames = new[] { "DiffTexture" } }); var vertexBuffer = context.Create.Buffer(BufferTarget.ArrayBuffer, 4 * Vertex.Size, BufferUsageHint.StaticDraw, new[] { new Vertex(-1f, 1f, 0f, 0f), new Vertex(1f, 1f, 1f, 0f), new Vertex(1f, -1f, 1f, 1f), new Vertex(-1f, -1f, 0f, 1f) }); var indexBuffer = context.Create.Buffer(BufferTarget.ElementArrayBuffer, 6 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[] { 0, 1, 2, 0, 2, 3 }); vertexArray = context.Create.VertexArray(); vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.Size, 0); vertexArray.SetVertexAttributeF(1, vertexBuffer, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.Size, 2 * sizeof(float)); vertexArray.SetElementArrayBuffer(indexBuffer); texture = textureLoader.LoadTexture(context, "Cursor.png"); sampler = context.Create.Sampler(); sampler.SetMagFilter(TextureMagFilter.Nearest); }
public abstract IUniformLocation GetUniformLocation(IShaderProgram program, String name);
public override void Initialize() { renderTarget = Context.Create.Texture2D(RenderTargetSize, RenderTargetSize, TextureHelper.CalculateMipCount(RenderTargetSize, 1, 1), Format.Rgba8); depthStencil = Context.Create.Renderbuffer(RenderTargetSize, RenderTargetSize, Format.Depth24Stencil8); framebuffer = Context.Create.Framebuffer(); framebuffer.AttachTextureImage(FramebufferAttachmentPoint.Color0, renderTarget, 0); framebuffer.AttachRenderbuffer(FramebufferAttachmentPoint.DepthStencil, depthStencil); var vertexBuffer = Context.Create.Buffer(BufferTarget.Array, 24 * 8 * sizeof(float), BufferUsageHint.StaticDraw, new[] { new Vertex(1f, -1f, 1f, 1f, 0f, 0f, 0f, 0f), new Vertex(1f, 1f, 1f, 1f, 0f, 0f, 1f, 0f), new Vertex(1f, 1f, -1f, 1f, 0f, 0f, 1f, 1f), new Vertex(1f, -1f, -1f, 1f, 0f, 0f, 0f, 1f), new Vertex(1f, 1f, 1f, 0f, 1f, 0f, 0f, 0f), new Vertex(-1f, 1f, 1f, 0f, 1f, 0f, 1f, 0f), new Vertex(-1f, 1f, -1f, 0f, 1f, 0f, 1f, 1f), new Vertex(1f, 1f, -1f, 0f, 1f, 0f, 0f, 1f), new Vertex(-1f, 1f, 1f, -1f, 0f, 0f, 0f, 0f), new Vertex(-1f, -1f, 1f, -1f, 0f, 0f, 1f, 0f), new Vertex(-1f, -1f, -1f, -1f, 0f, 0f, 1f, 1f), new Vertex(-1f, 1f, -1f, -1f, 0f, 0f, 0f, 1f), new Vertex(-1f, -1f, 1f, 0f, -1f, 0f, 0f, 0f), new Vertex(1f, -1f, 1f, 0f, -1f, 0f, 1f, 0f), new Vertex(1f, -1f, -1f, 0f, -1f, 0f, 1f, 1f), new Vertex(-1f, -1f, -1f, 0f, -1f, 0f, 0f, 1f), new Vertex(-1f, -1f, 1f, 0f, 0f, 1f, 0f, 0f), new Vertex(-1f, 1f, 1f, 0f, 0f, 1f, 1f, 0f), new Vertex(1f, 1f, 1f, 0f, 0f, 1f, 1f, 1f), new Vertex(1f, -1f, 1f, 0f, 0f, 1f, 0f, 1f), new Vertex(-1f, 1f, -1f, 0f, 0f, -1f, 0f, 0f), new Vertex(-1f, -1f, -1f, 0f, 0f, -1f, 1f, 0f), new Vertex(1f, -1f, -1f, 0f, 0f, -1f, 1f, 1f), new Vertex(1f, 1f, -1f, 0f, 0f, -1f, 0f, 1f) }); var indexBuffer = Context.Create.Buffer(BufferTarget.ElementArray, 36 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[] { 0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23 }); vertexArray = Context.Create.VertexArray(); vertexArray.SetElementArrayBuffer(indexBuffer); vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, 32, 0); vertexArray.SetVertexAttributeF(1, vertexBuffer, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, 32, 12); vertexArray.SetVertexAttributeF(2, vertexBuffer, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, 32, 24); transformBuffer = Context.Create.Buffer(BufferTarget.Uniform, 64, BufferUsageHint.DynamicDraw); cameraBuffer = Context.Create.Buffer(BufferTarget.Uniform, 64, BufferUsageHint.DynamicDraw); #if INTEL_WORKAROUND cameraOutsideBuffer = Context.Create.Buffer(BufferTarget.Uniform, 64, BufferUsageHint.DynamicDraw); #endif cameraExtraBuffer = Context.Create.Buffer(BufferTarget.Uniform, 12, BufferUsageHint.DynamicDraw); lightBuffer = Context.Create.Buffer(BufferTarget.Uniform, 12, BufferUsageHint.DynamicDraw); using (var textureLoader = new TextureLoader("../Textures/DiffuseTest.png")) { diffuseMap = Context.Create.Texture2D(textureLoader.Width, textureLoader.Height, TextureHelper.CalculateMipCount(textureLoader.Width, textureLoader.Height, 1), Format.Rgba8); for (int i = 0; i < diffuseMap.MipCount; i++) diffuseMap.SetData(i, textureLoader.GetMipData(i), FormatColor.Rgba, FormatType.UnsignedByte); } sampler = Context.Create.Sampler(); sampler.SetMagFilter(TextureMagFilter.Linear); sampler.SetMinFilter(TextureMinFilter.LinearMipmapLinear); sampler.SetMaxAnisotropy(16f); IVertexShader vsh = Context.Create.VertexShader(VertexShaderText); IFragmentShader fsh = Context.Create.FragmentShader(FragmentShaderText); program = Context.Create.Program(new ShaderProgramDescription { VertexShaders = new[] {vsh}, FragmentShaders = new[] {fsh}, VertexAttributeNames = new[] {"in_position", "in_normal", "in_tex_coord"}, UniformBufferNames = new[] {"Transform", "Camera", "Light"}, SamplerNames = new[] {"DiffuseMap"} }); }
/// <summary> /// Initializes a new instance of the <see cref="MeshVisual"/> class. /// </summary> /// <param name="mesh">The mesh.</param> /// <param name="shader">The shader.</param> /// <param name="textureBindings">The texture bindings.</param> public MeshVisual(DefaultMesh mesh, IShaderProgram shader, IEnumerable <TextureBinding> textureBindings = null) : this(VAOLoader.FromMesh(mesh, shader), shader, textureBindings) { }