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