Ejemplo n.º 1
0
 public void TransformFeedbackStreamInstanced(BeginMode mode, ITransformFeedback transformFeedback, int stream, int instanceCount)
 {
     if (transformFeedback == null)
     {
         throw new ArgumentNullException("transformFeedback");
     }
     gl.DrawTransformFeedbackStreamInstanced((int)mode, transformFeedback.Handle, (uint)stream, instanceCount);
 }
Ejemplo n.º 2
0
 public void TransformFeedback(BeginMode mode, ITransformFeedback transformFeedback)
 {
     if (transformFeedback == null)
     {
         throw new ArgumentNullException("transformFeedback");
     }
     gl.DrawTransformFeedback((int)mode, transformFeedback.Handle);
 }
Ejemplo n.º 3
0
        public override void Initialize()
        {
            var vertexData = new Vertex[MaxVertices];

            vertexData[0] = Vertex.Cannon;

            var vertexBufferSource = Context.Create.Buffer(BufferTarget.TransformFeedback, Vertex.SizeInBytes * MaxVertices, BufferUsageHint.StaticDraw, vertexData);
            var vertexBufferTarget = Context.Create.Buffer(BufferTarget.TransformFeedback, Vertex.SizeInBytes * MaxVertices, BufferUsageHint.StaticDraw);

            vertexArraySource = Context.Create.VertexArray();
            vertexArraySource.SetVertexAttributeF(0, vertexBufferSource, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 0);
            vertexArraySource.SetVertexAttributeF(1, vertexBufferSource, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 2 * sizeof(float));
            vertexArraySource.SetVertexAttributeF(2, vertexBufferSource, VertexAttributeDimension.One, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 4 * sizeof(float));
            vertexArraySource.SetVertexAttributeI(3, vertexBufferSource, VertexAttributeDimension.One, VertexAttribIPointerType.Int, Vertex.SizeInBytes, 5 * sizeof(float));
            vertexArraySource.SetVertexAttributeF(4, vertexBufferSource, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 6 * sizeof(float));

            vertexArrayTarget = Context.Create.VertexArray();
            vertexArrayTarget.SetVertexAttributeF(0, vertexBufferTarget, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 0);
            vertexArrayTarget.SetVertexAttributeF(1, vertexBufferTarget, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 2 * sizeof(float));
            vertexArrayTarget.SetVertexAttributeF(2, vertexBufferTarget, VertexAttributeDimension.One, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 4 * sizeof(float));
            vertexArrayTarget.SetVertexAttributeI(3, vertexBufferTarget, VertexAttributeDimension.One, VertexAttribIPointerType.Int, Vertex.SizeInBytes, 5 * sizeof(float));
            vertexArrayTarget.SetVertexAttributeF(4, vertexBufferTarget, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 6 * sizeof(float));

            transformFeedbackSource = Context.Create.TransformFeedback();
            transformFeedbackSource.SetBuffer(0, vertexBufferSource);

            transformFeedbackTarget = Context.Create.TransformFeedback();
            transformFeedbackTarget.SetBuffer(0, vertexBufferTarget);

            timeBuffer = Context.Create.Buffer(BufferTarget.Uniform, 2 * sizeof(float), BufferUsageHint.DynamicDraw);

            IVertexShader   vsh = Context.Create.VertexShader(VertexShaderText);
            IGeometryShader gsh = Context.Create.GeometryShader(GeometryShaderText);
            IFragmentShader fsh = Context.Create.FragmentShader(FragmentShaderText);

            program = Context.Create.Program(new ShaderProgramDescription
            {
                VertexShaders                   = new[] { vsh },
                GeometryShaders                 = new[] { gsh },
                FragmentShaders                 = new[] { fsh },
                VertexAttributeNames            = new[] { "in_position", "in_velocity", "in_timeToAction", "in_type", "in_color" },
                TransformFeedbackAttributeNames = new[] { "g_position", "g_velocity", "g_timeToAction", "g_type", "g_color" },
                TransformFeedbackMode           = TransformFeedbackMode.InterleavedAttribs,
                UniformBufferNames              = new[] { "Time" }
            });
        }
Ejemplo n.º 4
0
        public override void Initialize()
        {
            var vertexData = new Vertex[ParticleCount];

            for (int i = 0; i < vertexData.Length; i++)
            {
                vertexData[i] = new Vertex(i * ParticleTicksDelta);
            }

            var vertexBufferSource = Context.Create.Buffer(BufferTarget.TransformFeedback, ParticleCount * Vertex.SizeInBytes, BufferUsageHint.StaticDraw, vertexData);
            var vertexBufferTarget = Context.Create.Buffer(BufferTarget.TransformFeedback, ParticleCount * Vertex.SizeInBytes, BufferUsageHint.StaticDraw, IntPtr.Zero);

            vertexArraySource = Context.Create.VertexArray();
            vertexArraySource.SetVertexAttributeF(0, vertexBufferSource, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 0);
            vertexArraySource.SetVertexAttributeF(1, vertexBufferSource, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 2 * sizeof(float));
            vertexArraySource.SetVertexAttributeF(2, vertexBufferSource, VertexAttributeDimension.One, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 4 * sizeof(float));
            vertexArraySource.SetVertexAttributeF(3, vertexBufferSource, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 5 * sizeof(float));
            vertexArraySource.SetVertexAttributeF(4, vertexBufferSource, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 7 * sizeof(float));

            vertexArrayTarget = Context.Create.VertexArray();
            vertexArrayTarget.SetVertexAttributeF(0, vertexBufferTarget, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 0);
            vertexArrayTarget.SetVertexAttributeF(1, vertexBufferTarget, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 2 * sizeof(float));
            vertexArrayTarget.SetVertexAttributeF(2, vertexBufferTarget, VertexAttributeDimension.One, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 4 * sizeof(float));
            vertexArrayTarget.SetVertexAttributeF(3, vertexBufferTarget, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 5 * sizeof(float));
            vertexArrayTarget.SetVertexAttributeF(4, vertexBufferTarget, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, Vertex.SizeInBytes, 7 * sizeof(float));

            transformFeedbackSource = Context.Create.TransformFeedback();
            transformFeedbackSource.SetBuffer(0, vertexBufferSource);

            transformFeedbackTarget = Context.Create.TransformFeedback();
            transformFeedbackTarget.SetBuffer(0, vertexBufferTarget);

            var vsh = Context.Create.VertexShader(VertexShaderText);
            var fsh = Context.Create.FragmentShader(FragmentShaderText);

            program = Context.Create.Program(new ShaderProgramDescription
            {
                VertexShaders                   = new[] { vsh },
                FragmentShaders                 = new[] { fsh },
                VertexAttributeNames            = new[] { "in_position", "in_velocity", "in_spawn_cooldown", "in_initial_velocity", "in_color" },
                TransformFeedbackAttributeNames = new[] { "v_position", "v_velocity", "v_spawn_cooldown", "v_initial_velocity", "v_color" },
                TransformFeedbackMode           = TransformFeedbackMode.InterleavedAttribs
            });
        }
Ejemplo n.º 5
0
 public void BeginTransformFeedback(ITransformFeedback transformFeedback, BeginFeedbackMode beginFeedbackMode)
 {
     context.Bindings.TransformFeedback.Set(transformFeedback);
     context.GL.BeginTransformFeedback((int)beginFeedbackMode);
 }
Ejemplo n.º 6
0
 public void TransformFeedbackStreamInstanced(BeginMode mode, ITransformFeedback transformFeedback, int stream, int instanceCount)
 {
     if (transformFeedback == null)
         throw new ArgumentNullException("transformFeedback");
     gl.DrawTransformFeedbackStreamInstanced((int)mode, transformFeedback.Handle, (uint)stream, instanceCount);
 }
Ejemplo n.º 7
0
 public void TransformFeedback(BeginMode mode, ITransformFeedback transformFeedback)
 {
     if (transformFeedback == null)
         throw new ArgumentNullException("transformFeedback");
     gl.DrawTransformFeedback((int)mode, transformFeedback.Handle);
 }