端口OpenGl缓冲区到XNA

时间:2013-04-27 17:41:18

标签: c# opengl xna opentk monogame

我正在尝试将一些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;
        }

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

此外,是否有任何移植指南或其他东西,因为有几百个与“G1”功能相关的其他错误。

1 个答案:

答案 0 :(得分:1)

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

看一下这些链接:

How To: Create and Use a Custom Vertex

Improving performance by using VertexBuffers and IndexBuffers