public VertexArray(IOpenGL30 gl, IEnumerable<IVertexBuffer> buffers, IEnumerable<IVertexDescriptor> descriptors) { IVertexBuffer[] bufferObjects = buffers.ToArray(); IVertexDescriptor[] descs = descriptors.ToArray(); if (descs.Length != bufferObjects.Length) throw new InvalidOperationException("Number of buffers and number of descriptors must match."); uint[] handles = new uint[1]; gl.GenVertexArrays(1, handles); if(handles[0] == 0u) throw new NoHandleCreatedException(); _gl = gl; Handle = handles.Single(); Buffers = bufferObjects; using (Bind()) { int count = 0; for (int index = 0; index < bufferObjects.Length; index++) { var buffer = bufferObjects[index]; var desc = descs[index]; buffer.Bind(); Apply(desc, count); count += desc.Elements.Count(); } } }
public RenderBuffer(IOpenGL30 gl, int width, int height, PixelInternalFormat internalFormat, int samples) { if(gl == null) throw new ArgumentNullException("gl"); if(width <= 0) throw new ArgumentException("Width must be greater than 0", "width"); if(height <= 0) throw new ArgumentException("Height must be greater than 0.", "height"); uint handle = gl.GenRenderBuffer(); if(handle == 0) throw new NoHandleCreatedException(); Handle = handle; Width = width; Height = height; InternalFormat = internalFormat; _gl = gl; gl.BindRenderbuffer(Constants.Renderbuffer, Handle); gl.RenderbufferStorage(Constants.Renderbuffer, (uint)InternalFormat, Width, Height); gl.BindRenderbuffer(Constants.Renderbuffer, 0); }
public Framebuffer(IOpenGL30 gl, FramebufferTarget target) { var handle = gl.GenFramebuffer(); if(handle == 0) throw new NoHandleCreatedException(); _gl = gl; _target = target; Handle = handle; }
protected Texture(IOpenGL30 gl, TextureTarget target) { var newHandle = gl.GenTexture(); if(newHandle == 0u) throw new NoHandleCreatedException(); Target = target; this._gl = gl; Handle = newHandle; }
/// <summary> /// Creates a new shader. /// </summary> /// <param name="gl">GL interface containing shader entry points.</param> /// <param name="shaderType">Type of OpenGL shader to instantiate.</param> /// <param name="code">Shader code.</param> /// <exception cref="ArgumentNullException">Thrown if <see cref="gl"/> is null, or if <see cref="code"/> is null or empty.</exception> protected Shader(IOpenGL30 gl, ShaderType shaderType, string code) { if(gl == null) throw new ArgumentNullException("gl"); if(string.IsNullOrEmpty(code)) throw new ArgumentNullException("code"); _gl = gl; Handle = gl.CreateShader((uint)shaderType); if(Handle == 0) throw new NoHandleCreatedException(); _shaderType = shaderType; this._code = code; }
public CubeShader(IOpenGL30 gl) { // Create the vertex shader vertexShader = new VertexShader(gl, GetEmbeddedResourceAsString("cube.vs")); // Create the fragmet shader fragmentShader = new FragmentShader(gl, GetEmbeddedResourceAsString("cube.fs")); // Create the program for both shaders var p = new ModGL.ObjectModel.Shaders.Program(gl, vertexShader, fragmentShader); // Tell the shader what field names to use (taken from the vertex Descriptor) p.BindVertexAttributeLocations(PositionNormalTexCoord.Descriptor); // Bind output fragment to the specified nme gl.BindFragDataLocation(p.Handle, 0, "Color"); // Compile program and shaders p.Compile(); program = p; // Get the uniforms used by the shader program. modelViewProjection = p.GetUniform<MatrixUniform, Matrix4f>("ModelViewProjection"); viewProjection = p.GetUniform<MatrixUniform, Matrix4f>("ViewProjection"); diffuseUniform = p.GetUniform<Vector4fUniform, Vector4f>("DiffuseColor"); }
public FragmentShader(IOpenGL30 gl, string code) : base(gl, ShaderType.FragmentShader, code) { }
public Cube(IOpenGL30 gl) { Model = Matrix4f.Identity; View = Matrix4f.Identity; Projection = Matrix4f.Identity; this.gl = gl; shader = new CubeShader(gl); vertexBuffer = CreateBuffer(); vertexArray = new VertexArray(gl, new [] { vertexBuffer }, new [] { Vertex.Descriptor }); }
public VertexShader(IOpenGL30 gl, string code) : base(gl, ShaderType.VertexShader, code) { }
public Renderer(IOpenGL30 gl) { _gl = gl; }