我尝试用Ope绘制网格 当调用GL.DrawElements时,我得到以下异常。
Stacktrace:
at (wrapper managed-to-native) OpenTK.Graphics.ES20.GL/Core.DrawElements(OpenTK.Graphics.ES20.All,int,OpenTK.Graphics.ES20.All,intptr) <IL 0x00026, 0xffffffff>
at OpenTK.Graphics.ES20.GL.DrawElements (OpenTK.Graphics.ES20.All,int,OpenTK.Graphics.ES20.All,intptr) [0x00000] in /Developer/MonoTouch/Source/monotouch/src/OpenGLES/OpenTK/Graphics/ES20.iPhone/GL.cs:1659
at App.PipedreamWrapper.Resource.Model.VertexBuffer.Render () [0x00067] in /Users/felixk/Projects/Windkraft/App/PipedreamWrapper/Resource/Model/VertexBuffer.cs:74
这是绘图代码:
// Bind buffers
GL.BindBuffer(All.ArrayBufferBinding, _ElementsBuffer);
GL.BindBuffer(All.ElementArrayBufferBinding, _IndexBuffer);
for (int i = 0; i < _Data.Length; i++)
{
VertexData data = _Data[i];
// Using fixed size here, just using 3 floats for the drawing
GL.VertexAttribPointer(i, data.Size, data.Type, data.Normalized, 12, new IntPtr(0));
GL.EnableVertexAttribArray(i);
}
// Draw elements
GL.DrawElements(All.Triangles, _Triangles, All.UnsignedShort, IntPtr.Zero);
// Unbind buffers
GL.BindBuffer(All.ArrayBufferBinding, 0);
GL.BindBuffer(All.ElementArrayBufferBinding, 0);
这是初始化的代码:
public VertexBuffer(UInt16[] indices, Byte[] data, params VertexData[] vertexData)
{
_Data = vertexData;
_Triangles = indicies.Length / 3;
// Generate buffer id's
Int32[] buffers = new Int32[2];
GL.GenBuffers(2, buffers);
_IndexBuffer = buffers[0];
_ElementsBuffer = buffers[1];
unsafe
{
// Bind indices buffer
GL.BindBuffer(All.ElementArrayBufferBinding, _IndexBuffer);
// Buffer indices
fixed (UInt16* f = indices)
{
GL.BufferData(All.ElementArrayBuffer,
new IntPtr(2 * indices.Length),
new IntPtr((void*)f),
All.StaticDraw);
}
// Bind data buffer
GL.BindBuffer(All.ArrayBufferBinding, _ElementsBuffer);
// Buffer vertex data
fixed (Byte* f = data) {
GL.BufferData(All.ArrayBuffer,
new IntPtr(data.Length),
new IntPtr((void*)f),
All.StaticDraw);
}
}
// Unbind buffers
GL.BindBuffer(All.ArrayBufferBinding, 0);
GL.BindBuffer(All.ElementArrayBufferBinding, 0);
}
编辑:格式化问题...和堆栈溢出不希望我提交一些东西。
答案 0 :(得分:1)
事实证明“ElementArrayBufferBinding”不用于绑定某些东西。相反,我必须使用“ElementArrayBuffer”。