Ejemplo n.º 1
0
        private void PickingLastLineInLineLoop(out uint[] vertexIds, out vec3[] positions)
        {
            const int    vertexCount = 2;
            VertexBuffer buffer      = this.Renderer.PickingRenderUnit.PositionBuffer;
            var          offsets     = new int[vertexCount] {
                (buffer.VertexCount - 1) * buffer.Config.GetDataSize() * buffer.Config.GetDataTypeByteLength(), 0,
            };

            vertexIds = new uint[vertexCount];
            positions = new vec3[vertexCount];
            buffer.Bind();
            for (int i = 0; i < vertexCount; i++)
            {
                IntPtr pointer = buffer.MapBufferRange(
                    offsets[i],
                    1 * buffer.Config.GetDataSize() * buffer.Config.GetDataTypeByteLength(),
                    MapBufferRangeAccess.MapReadBit, false);
                unsafe
                {
                    var array = (vec3 *)pointer.ToPointer();
                    positions[i] = array[0];
                }
                buffer.UnmapBuffer(false);
                vertexIds[i] = (uint)offsets[i] / (uint)(buffer.Config.GetDataSize() * buffer.Config.GetDataTypeByteLength());
            }
            buffer.Unbind();
        }
Ejemplo n.º 2
0
        protected vec3[] FillPickedGeometrysPosition(uint[] indexes)
        {
            var positions = new vec3[indexes.Length];

            VertexBuffer buffer = this.Renderer.PositionBuffer;

            buffer.Bind();
            for (int i = 0; i < indexes.Length; i++)
            {
                int offset = (int)(indexes[i] * buffer.Config.GetDataSize() * buffer.Config.GetDataTypeByteLength());
                //IntPtr pointer = GL.MapBuffer(BufferTarget.ArrayBuffer, MapBufferAccess.ReadOnly);
                IntPtr pointer = buffer.MapBufferRange(
                    offset,
                    1 * buffer.Config.GetDataSize() * buffer.Config.GetDataTypeByteLength(),
                    MapBufferRangeAccess.MapReadBit, false);
                if (pointer.ToInt64() != 0)
                {
                    unsafe
                    {
                        var array = (vec3 *)pointer.ToPointer();
                        positions[i] = array[0];
                    }
                }
                else
                {
                    ErrorCode error = (ErrorCode)GL.Instance.GetError();
                    if (error != ErrorCode.NoError)
                    {
                        Debug.WriteLine(string.Format(
                                            "Error:[{0}] glMapBufferRange failed: buffer ID: [{1}]", error, buffer.BufferId.ToString()));
                    }
                }
                buffer.UnmapBuffer(false);
            }
            buffer.Unbind();

            return(positions);
        }