繁体   English   中英

MonoTouch / OpenGL ES:使用GL.DrawElements绘制时发生异常

[英]MonoTouch / OpenGL ES: Exception when drawing with GL.DrawElements

我尝试用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);
}

编辑:格式化问题...和堆栈溢出不希望我提交一些东西。

事实证明,“ ElementArrayBufferBinding”不用于绑定某些东西。 相反,我必须使用“ ElementArrayBuffer”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM