Exemplo n.º 1
0
        private static unsafe void Load()
        {
            _gl ??= GL.GetApi();
            var vertShader = _gl.CreateShader(GLEnum.VertexShader);
            var fragShader = _gl.CreateShader(GLEnum.FragmentShader);
            var vertLen    = VertexShader.Length;

            _gl.ShaderSource(vertShader, 1, SilkMarshal.ToPointer(new [] { VertexShader }), &vertLen);
            var fragLen = FragmentShader.Length;

            _gl.ShaderSource(fragShader, 1, SilkMarshal.ToPointer(new [] { FragmentShader }), &fragLen);
            _gl.CompileShader(vertShader);
            _gl.CompileShader(fragShader);
            _shader = _gl.CreateProgram();
            _gl.AttachShader(_shader, vertShader);
            _gl.AttachShader(_shader, fragShader);
            _gl.LinkProgram(_shader);
            _gl.DetachShader(_shader, vertShader);
            _gl.DetachShader(_shader, fragShader);
            _gl.DeleteShader(fragShader);
            _gl.DeleteShader(vertShader);
            _gl.ClearColor(0.2f, 0.3f, 0.3f, 1.0f);
            _vertexBufferObject = _gl.GenBuffer();
            _gl.BindBuffer(GLEnum.ArrayBuffer, _vertexBufferObject);
            fixed(void *vertices = _vertices)
            {
                _gl.BufferData(GLEnum.ArrayBuffer, (uint)_vertices.Length * sizeof(float), vertices, GLEnum.StaticDraw);
            }

            _vertexArrayObject = _gl.GenVertexArray();
            _gl.BindVertexArray(_vertexArrayObject);
            var attrib = 0;

            _gl.VertexAttribPointer(0, 3, GLEnum.Float, false, 3 * sizeof(float), &attrib);
            _gl.EnableVertexAttribArray(0);
            _gl.BindBuffer(GLEnum.ArrayBuffer, _vertexBufferObject);
            Console.WriteLine("done load");
        }