Example #1
0
        public void SetBufferObject(int index, GPUBuffer buffer, int elementCount, VertexAttribPointerType type)
        {
            GPUStateMachine.BindVertexArray(id);

            GL.EnableVertexAttribArray(index);
            GPUStateMachine.BindBuffer(buffer.target, buffer.id);
            GL.VertexAttribPointer(index, elementCount, type, false, 0, 0);
            GPUStateMachine.UnbindBuffer(buffer.target);

            GPUStateMachine.UnbindVertexArray();
        }
Example #2
0
        public static void Draw(PrimitiveType type, int first, int count)
        {
            if (count == 0)
            {
                return;
            }

            if (curVarray == null)
            {
                return;
            }
            if (curProg == null)
            {
                return;
            }
            if (curFramebuffer == null)
            {
                return;
            }


            for (int i = 0; i < textures.Count; i++)
            {
                GPUStateMachine.BindTexture(i, textures[i].texTarget, textures[i].id);
            }
            for (int i = 0; i < feedbackBufs.Count; i++)
            {
                GPUStateMachine.BindBuffer(BufferTarget.TransformFeedbackBuffer, feedbackBufs[i].Item1.id, i, (IntPtr)feedbackBufs[i].Item2, (IntPtr)feedbackBufs[i].Item3);
            }



            GPUStateMachine.BindFramebuffer(curFramebuffer.id);
            if (feedbackBufs.Count > 0)
            {
                GL.BeginTransformFeedback((TransformFeedbackPrimitiveType)feedbackPrimitive);
            }

            GL.UseProgram(curProg.id);
            GPUStateMachine.BindVertexArray(curVarray.id);
            if (curIndices != null)
            {
                GPUStateMachine.BindBuffer(BufferTarget.ElementArrayBuffer, curIndices.id);
            }

            if (curIndices != null)
            {
                GL.DrawElements(type, count, DrawElementsType.UnsignedInt, IntPtr.Zero);
            }
            else
            {
                GL.DrawArrays(type, first, count);
            }

            if (feedbackBufs.Count > 0)
            {
                GL.EndTransformFeedback();
            }

            for (int i = 0; i < feedbackBufs.Count; i++)
            {
                GPUStateMachine.UnbindBuffer(BufferTarget.TransformFeedbackBuffer, i);
            }
            for (int i = 0; i < textures.Count; i++)
            {
                GPUStateMachine.UnbindTexture(i, textures[i].texTarget);
            }

            textures.Clear();
            feedbackBufs.Clear();
        }