Exemple #1
0
        protected override void OnLoad()
        {
            // load textures into array
            for (var i = 0; i < _stateTextures.Length; i++)
            {
                using (var bitmap = new Bitmap(Path.Combine("Data/Textures/", _stateTextures[i])))
                {
                    bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
                    if (_textureArray == null)
                    {
                        BitmapTexture.CreateCompatible(bitmap, out _textureArray, _stateTextures.Length, 1);
                    }
                    _textureArray.LoadBitmap(bitmap, i);
                }
            }
            // initialize buffer
            var field = new Minefield[FieldWidth * FieldHeight];

            for (var i = 0; i < field.Length; i++)
            {
                field[i] = new Minefield(i % FieldWidth, i / FieldHeight, i % _stateTextures.Length);
            }
            _buffer = new Buffer <Minefield>();
            _buffer.Init(BufferTarget.ArrayBuffer, field);
            // load program
            _gridProgram = ProgramFactory.Create <TextureGridProgram>();
            _gridProgram.Use();
            // bind the texture and set uniform
            _gridProgram.TextureData.BindTexture(TextureUnit.Texture0, _textureArray);
            // set up vertex array and attributes
            _vao = new VertexArray();
            _vao.Bind();
            _vao.BindAttribute(_gridProgram.InPosition, _buffer);
            _vao.BindAttribute(_gridProgram.InTexture, _buffer, 8);
            // set nice clear color
            GL.ClearColor(Color.MidnightBlue);
            // initialize camera position
            Camera.DefaultState.Position = new Vector3(0, 5, 15);
            Camera.ResetToDefault();
        }