Example #1
0
        /// <summary>
        /// Wraps glDrawArrays(uint mode, int first, int count).
        /// </summary>
        /// <param name="mode">用哪种方式渲染各个顶点?(OpenGL.GL_TRIANGLES etc.)</param>
        /// <param name="firstVertex">要渲染的第一个顶点的位置。<para>Index of first vertex to be rendered.</para></param>
        /// <param name="vertexCount">要渲染多少个元素?<para>How many vertexes to be rendered?</para></param>
        /// <param name="primCount">primCount in instanced rendering.</param>
        internal ZeroIndexBufferPtr(DrawMode mode, int firstVertex, int vertexCount, int primCount = 1)
            : base(mode, 0, vertexCount, vertexCount * sizeof(uint), primCount)
        {
            if (glDrawArraysInstanced == null)
            {
                glDrawArraysInstanced = OpenGL.GetDelegateFor <OpenGL.glDrawArraysInstanced>();
            }

            this.FirstVertex         = firstVertex;
            this.VertexCount         = vertexCount;
            this.OriginalVertexCount = vertexCount;
        }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="arg"></param>
        public override void Render(RenderEventArgs arg)
        {
            uint mode = 0;

            if (arg.PickingGeometryType == PickingGeometryType.Point &&
                this.Mode.ToGeometryType() == PickingGeometryType.Line)   // picking point from a line
            {
                // this maybe render points that should not appear.
                // so need to select by another picking.
                mode = (uint)DrawMode.Points;
            }
            else
            {
                mode = (uint)this.Mode;
            }

            int primCount = this.PrimCount;

            if (primCount < 1)
            {
                throw new Exception("error: primCount is less than 1.");
            }
            else if (primCount == 1)
            {
                OpenGL.DrawArrays(mode, this.FirstVertex, this.RenderingVertexCount);
            }
            else
            {
                if (glDrawArraysInstanced == null)
                {
                    glDrawArraysInstanced = OpenGL.GetDelegateFor <OpenGL.glDrawArraysInstanced>();
                }

                glDrawArraysInstanced(mode, this.FirstVertex, this.RenderingVertexCount, primCount);
            }
        }
Example #3
0
        /// <summary>
        ///
        /// </summary>
        public override void Render()
        {
            uint mode = (uint)this.Mode;

            int primCount = this.PrimCount;

            if (primCount < 1)
            {
                throw new Exception("error: primCount is less than 1.");
            }
            else if (primCount == 1)
            {
                OpenGL.DrawArrays(mode, this.FirstVertex, this.RenderingVertexCount);
            }
            else
            {
                if (glDrawArraysInstanced == null)
                {
                    glDrawArraysInstanced = OpenGL.GetDelegateFor <OpenGL.glDrawArraysInstanced>();
                }

                glDrawArraysInstanced(mode, this.FirstVertex, this.RenderingVertexCount, primCount);
            }
        }
Example #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="arg"></param>
        public override void Render(RenderEventArgs arg)
        {
            uint mode = 0;
            if (arg.PickingGeometryType == PickingGeometryType.Point
                && this.Mode.ToGeometryType() == PickingGeometryType.Line)// picking point from a line
            {
                // this maybe render points that should not appear.
                // so need to select by another picking.
                mode = (uint)DrawMode.Points;
            }
            else
            {
                mode = (uint)this.Mode;
            }

            int primCount = this.PrimCount;
            if (primCount < 1) { throw new Exception("error: primCount is less than 1."); }
            else if (primCount == 1)
            {
                OpenGL.DrawArrays(mode, this.FirstVertex, this.RenderingVertexCount);
            }
            else
            {
                if (glDrawArraysInstanced == null)
                { glDrawArraysInstanced = OpenGL.GetDelegateFor<OpenGL.glDrawArraysInstanced>(); }

                glDrawArraysInstanced(mode, this.FirstVertex, this.RenderingVertexCount, primCount);
            }
        }