Beispiel #1
0
        static void Main(string[] args)
        {
            Log.AddLogger(new FileLogger("log.txt"));
            Log.AddLogger(new ConsoleLogger());

            Assets.AddAssets(Assembly.GetExecutingAssembly(), "");

            var window = new Window(800, 600, "Sandbox");

            window.MakeCurrent();
            GL.LoadBindings(new GLFWBindingsContext());

            var vbo = new Buffer <float>(new [] { 0f, 0f, 0f, 1f, 1f, 1f, 1f, 0f });
            var ebo = new Buffer <uint>(new uint[] { 0, 1, 2, 0, 2, 3 });
            var vao = new VertexArray();

            vao.AddVertexBuffer(vbo, 0, sizeof(float) * 2,
                                new VertexArray.Attribute(0, 2, VertexAttribType.Float, sizeof(float) * 2));
            vao.SetElementBuffer(ebo);
            var shader = new Shader(Assets.GetAsset <VertexShader>("shader.vert"), Assets.GetAsset <FragmentShader>("shader.frag"));

            shader.Bind();
            shader.SetUniform(shader.GetUniformLocation("uTest"), Vector4.One);

            GL.ClearColor(Color4.Aqua);

            while (window.IsRunning)
            {
                GL.Clear(ClearBufferMask.ColorBufferBit);

                GL.DrawElements(PrimitiveType.Triangles, 6, DrawElementsType.UnsignedInt, 0);

                window.SwapBuffers();

                window.PollEvents();
            }

            vbo.Dispose();
            ebo.Dispose();
            vao.Dispose();
            shader.Dispose();
            window.Dispose();
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            Log.AddLogger(new ConsoleLogger());

            Assets.AddAssets(Assembly.GetExecutingAssembly(), "Assets");

            var window = new Window(800, 600, "CubeWave");

            window.MakeCurrent();
            GL.LoadBindings(new GLFWBindingsContext());

            GL.Enable(EnableCap.DepthTest);

            var shader = new Shader(Assets.GetAsset <VertexShader>("shader.vert"),
                                    Assets.GetAsset <FragmentShader>("shader.frag"));

            var positionBuffer = new Buffer <float>(new float[] {
                -_size, -_size, -_size, //0
                -_size, -_size, _size,  //1
                -_size, _size, -_size,  //2
                -_size, _size, _size,   //3
                _size, -_size, -_size,  //4
                _size, -_size, _size,   //5
                _size, _size, -_size,   //6
                _size, _size, _size,    //7
            });
            var ebo = new Buffer <uint>(new uint[] {
                0, 1, 2, 1, 2, 3,     //Left
                4, 5, 6, 5, 6, 7,     //Right
                0, 1, 4, 1, 4, 5,     //Bottom
                2, 3, 6, 3, 6, 7,     //Top
                0, 2, 4, 2, 4, 6,     //Front
                1, 3, 5, 3, 5, 7,     //Back
            });
            var vao = new VertexArray();

            vao.SetElementBuffer(ebo);
            vao.AddVertexBuffer(positionBuffer, 0, sizeof(float) * 3,
                                new VertexArray.Attribute(0, 3, VertexAttribType.Float, 0));

            var perspective = Matrix4.CreatePerspectiveFieldOfView(MathHelper.DegreesToRadians(65), window.Width / (float)window.Height, 0.001f,
                                                                   1000f);
            var viewLoc = shader.GetUniformLocation("uView");
            var timeLoc = shader.GetUniformLocation("uTime");

            shader.Bind();
            shader.SetUniform(shader.GetUniformLocation("uPerspective"), ref perspective);

            var stopWatch = new Stopwatch();

            stopWatch.Start();
            vao.Bind();
            while (window.IsRunning)
            {
                GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

                var t    = stopWatch.ElapsedMilliseconds / 5000f;
                var view = Matrix4.LookAt(new Vector3(MathF.Cos(t) * 5, 5f, MathF.Sin(t) * 5), Vector3.Zero, Vector3.UnitY);
                shader.SetUniform(viewLoc, ref view);
                shader.SetUniform(timeLoc, ref t);
                GL.DrawElementsInstanced(PrimitiveType.Triangles, 36, DrawElementsType.UnsignedInt, IntPtr.Zero, 10000);

                window.SwapBuffers();

                window.PollEvents();
            }

            window.Dispose();
        }