0

我正在尝试将带有一些 OpenTK(C# Opengl 实现)的应用程序移植到 XNA/MonoGame 并且我已经来到缓冲区,但我无法弄清楚如何移植它,因为似乎没有任何直接等效的缓冲区函数. 我正在尝试移植此代码:

public void RefillVBO()
        {
            if (positions == null) return;
            if (hasBuf)
                GL.DeleteBuffers(3, buf);
            GL.GenBuffers(3, buf);
            GL.BindBuffer(BufferTarget.ArrayBuffer, buf[0]);
            GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(positions.Length * sizeof(float)), positions, BufferUsageHint.StaticDraw);
            if (normals != null)
            {
                GL.BindBuffer(BufferTarget.ArrayBuffer, buf[1]);
                GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(normals.Length * sizeof(float)), normals, BufferUsageHint.StaticDraw);
            }
            GL.BindBuffer(BufferTarget.ElementArrayBuffer, buf[2]);
            GL.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)(elementsLength * sizeof(int)), elements, BufferUsageHint.StaticDraw);
            hasBuf = true;
        }

任何人都可以为我翻译这个并可能解释发生了什么,因为我不知道吗?

此外,是否有任何移植指南或其他内容,因为实际上还有数百个与“Gl”功能相关的其他错误。

4

1 回答 1

1

在 XNA 中,您通常会创建一个包含顶点数据的结构类型(例如位置、法线...)。基于该类型,您创建一个VertexDeclaration告诉 GPU 如何解释数据的方法。最后你创建一个VertexBuffer并设置数据。您可以选择创建索引缓冲区。

看看这些链接:

如何:创建和使用自定义顶点

使用 VertexBuffers 和 IndexBuffers 提高性能

于 2013-04-27T20:38:07.040 回答