如何使用GetBufferSubData

本文关键字:GetBufferSubData 何使用 | 更新日期: 2023-09-27 18:05:13

我目前正在玩SharpGL,但无法弄清楚如何以适当的方式使用它的函数GetBufferSubData。

   public void GetBufferSubData(uint target, 
                                int offset, 
                                int size, 
                                IntPtr data);

用例情况:我已经用一些数据填充了VBO,现在想从那里得到它回托管对象。

我的尝试已经失败与FatalExecutionEngineError,当我读,对应于内存堆泄漏。但我不确定我是否有一个合适的代码来满足我的需求。

public virtual unsafe float[] GetFromBuffer(int offset, int length)
{
    float[] output = new float[length];
    Bind();
    fixed (float* array = output)
    {
        var ptr = new IntPtr(array);
        Gl.GetBufferSubData(Id, offset, sizeof(float) * length, ptr);
        // Not needed code (fixed after answer)
        //GCHandle handle = (GCHandle) ptr;
        //output = (handle.Target as float[]);
    }
    return output;
 }

我的问题是如何让数据返回到托管对象

如何使用GetBufferSubData

GetBufferSubData()的第一个参数不是缓冲区的id(也就是名称),而是缓冲区目标。您需要首先将缓冲区绑定到目标,然后对相同的目标使用GetBufferSubData:

Gl.BindBuffer(OpenGL.GL_ARRAY_BUFFER, Id);
Gl.GetBufferSubData(OpenGL.GL_ARRAY_BUFFER, offset, sizeof(float) * length, ptr);
相关文章:
  • 没有找到相关文章