Example #1
1
        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();
                }
            }
        }
Example #2
0
        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);
        }
Example #3
0
 public Framebuffer(IOpenGL30 gl, FramebufferTarget target)
 {
     var handle = gl.GenFramebuffer();
     if(handle == 0)
         throw new NoHandleCreatedException();
     _gl = gl;
     _target = target;
     Handle = handle;
 }
Example #4
0
        protected Texture(IOpenGL30 gl, TextureTarget target)
        {
            var newHandle = gl.GenTexture();
            if(newHandle == 0u)
                throw new NoHandleCreatedException();

            Target = target;
            this._gl = gl;
            Handle = newHandle;
        }
Example #5
0
        /// <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;
        }
Example #6
0
 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");
 }
Example #7
0
 public FragmentShader(IOpenGL30 gl, string code)
     : base(gl, ShaderType.FragmentShader,  code)
 {
 }
Example #8
0
 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 });
 }
Example #9
0
 public VertexShader(IOpenGL30 gl, string code) 
     : base(gl, ShaderType.VertexShader, code)
 {
 }
Example #10
0
 public Renderer(IOpenGL30 gl)
 {
     _gl = gl;
 }