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); }
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); } }
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)); }