Esempio n. 1
0
        /// <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();
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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();
        }
Esempio n. 4
0
 /// <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);
 }