Esempio n. 1
0
        internal static Background Create()
        {
            Background background = new Background();

            using (var vertexShader = ShaderFactory <VertexShader> .FromSource(Resources.BackgroundVertex))
                using (var fragmentShader = ShaderFactory <FragmentShader> .FromSource(Resources.BackgroundFrag))
                {
                    background.program = ShaderProgram.LinkShaders(vertexShader, fragmentShader);
                }
            background.timeUniform           = background.program.GetUniform <FloatUniform>("uTime");
            background.viewProjectionUniform = background.program.GetUniform <Mat4Uniform>("uViewProjection");

            var vao = VertexArray.Create();

            using (var vaoBinding = vao.BindVertexArray())
            {
                using (var vboBinding = Quad.VertexBuffer.BindBuffer())
                {
                    var positionAttribute = new Vec2Attribute(0u);
                    vaoBinding.SetAttributePointer(positionAttribute, 0, 0);
                    vaoBinding.EnableAttribute(positionAttribute);
                }
            }
            background.vao = vao;

            return(background);
        }
Esempio n. 2
0
        public static BulletBatch Create()
        {
            var program      = CreateProgram();
            var timeUniform  = program.GetUniform <FloatUniform>("uTime");
            var scaleUniform = program.GetUniform <FloatUniform>("uScale");
            var vbo          = Quad.VertexBuffer;
            var ivbo         = BufferFactory.Create <ArrayBuffer>((uint)Marshal.SizeOf <Position>() * MAX_BULLETS, null, BufferUsage.StreamDraw);
            var vao          = CreateVertexArray();

            return(new BulletBatch(vao, ivbo, program, timeUniform, scaleUniform));

            ShaderProgram CreateProgram()
            {
                using (var vertexShader = ShaderFactory <VertexShader> .FromSource(Resources.BulletVertex))
                    using (var fragShader = ShaderFactory <FragmentShader> .FromSource(Resources.BulletFrag))
                    {
                        return(ShaderProgram.LinkShaders(vertexShader, fragShader));
                    }
            }

            VertexArray CreateVertexArray()
            {
                var newVao = VertexArray.Create();

                using (var vaoBinding = newVao.BindVertexArray())
                {
                    using (var vboBinding = vbo.BindBuffer())
                    {
                        var positionAttribute = new Vec2Attribute(0u);
                        vaoBinding.SetAttributePointer(positionAttribute, 0, 0);
                        vaoBinding.EnableAttribute(positionAttribute);
                    }
                    using (var ivboBinding = ivbo.BindBuffer())
                    {
                        var offsetAttribute = new Vec2Attribute(1u);
                        vaoBinding.SetAttributePointer(offsetAttribute, 0, 0);
                        vaoBinding.EnableAttribute(offsetAttribute);
                        vaoBinding.SetAttributeDivisor(offsetAttribute, 1);
                    }
                }
                return(newVao);
            }
        }
Esempio n. 3
0
        internal static ShipBatch Create()
        {
            ShaderProgram program;

            using (var vertexShader = ShaderFactory.FromSource <VertexShader>(Resources.BulletVertex))
                using (var fragmentShader = ShaderFactory.FromSource <FragmentShader>(Resources.ShipFrag))
                {
                    program = ShaderProgram.LinkShaders(vertexShader, fragmentShader);
                }
            var timeUniform  = program.GetUniform <FloatUniform>("uTime");
            var scaleUniform = program.GetUniform <FloatUniform>("uScale");

            var ivbo = BufferFactory.Create <ArrayBuffer>((uint)Marshal.SizeOf <Position>() * MAX_SHIPS, null, BufferUsage.StreamDraw);
            var vbo  = Triangle.VertexBuffer;

            var vertexArray = VertexArray.Create();

            using (var vaoBinding = vertexArray.BindVertexArray())
            {
                using (var vboBinding = vbo.BindBuffer())
                {
                    var positionAttribute = new Vec2Attribute(0u);
                    vaoBinding.SetAttributePointer(positionAttribute, 0, 0);
                    vaoBinding.EnableAttribute(positionAttribute);
                }
                using (var ivboBinding = ivbo.BindBuffer())
                {
                    var offsetAttribute = new Vec2Attribute(1u);
                    vaoBinding.SetAttributePointer(offsetAttribute, 0, 0);
                    Gl.VertexAttribDivisor(offsetAttribute.Index, 1u);
                    vaoBinding.EnableAttribute(offsetAttribute);
                }
            }

            return(new ShipBatch(program, ivbo, vertexArray, timeUniform, scaleUniform));
        }