/// <summary> /// /// </summary> /// <param name="controlMode">index buffer is accessable randomly or only by frame.</param> /// <param name="transformFeedbackObj"></param> public void Render(IndexBuffer.ControlMode controlMode = IndexBuffer.ControlMode.ByFrame, TransformFeedbackObject transformFeedbackObj = null) { ShaderProgram program = this.Program; GLStateList stateList = this.StateList; // 绑定shader program.Bind(); program.PushUniforms(); // push new uniform values to GPU side. stateList.On(); if (transformFeedbackObj != null) { transformFeedbackObj.Bind(); transformFeedbackObj.Begin(this.VertexArrayObject.IndexBuffer.Mode); this.VertexArrayObject.Draw(controlMode); transformFeedbackObj.End(); transformFeedbackObj.Unbind(); } else { this.VertexArrayObject.Draw(controlMode); } stateList.Off(); // 解绑shader program.Unbind(); }
/// <summary> /// /// </summary> /// <param name="index"></param> /// <param name="controlMode">index buffer is accessable randomly or only by frame.</param> /// <param name="transformFeedbackObj"></param> public void Render(int index, IndexBuffer.ControlMode controlMode, TransformFeedbackObject transformFeedbackObj = null) { if (index < 0 || this.Methods.Length <= index) { throw new System.IndexOutOfRangeException(); } this.Methods[index].Render(controlMode, transformFeedbackObj); }
/// <summary> /// 执行一次渲染的过程。 /// <para>Execute rendering command.</para> /// </summary> /// <param name="controlMode">index buffer is accessable randomly or only by frame.</param> /// <param name="temporaryIndexBuffer">render by a temporary index buffer</param> public void Draw(IndexBuffer.ControlMode controlMode, IndexBuffer temporaryIndexBuffer = null) { this.Bind(); if (temporaryIndexBuffer != null) { temporaryIndexBuffer.Draw(controlMode); } else { this.IndexBuffer.Draw(controlMode); } this.Unbind(); }
/// <summary> /// /// </summary> /// <param name="controlMode">index buffer is accessable randomly or only by frame.</param> public void Render(IndexBuffer.ControlMode controlMode = IndexBuffer.ControlMode.ByFrame) { this.Render(controlMode, null); }