我正在尝试将一些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”功能相关的其他错误。
答案 0 :(得分:1)
在XNA中,您通常会创建一个包含顶点数据的结构类型(例如position,normal ...)。根据该类型,您可以创建一个VertexDeclaration
,告诉GPU如何解释数据。最后,您创建一个VertexBuffer
并设置数据。您可以选择创建索引缓冲区。
看一下这些链接:
How To: Create and Use a Custom Vertex
Improving performance by using VertexBuffers and IndexBuffers