Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
glDrawArrays()在绘制过多元素时出错 我有一些简单的OpenGL ES代码,C++运行在运行Android的手机上,运行WebOS的手机,和我的Mac使用SDL/OpenGL。所讨论的代码只是绘制了一个GL\u LINE\u STRIP,它存储在GLfloats的数组中。下面是我如何做到这一点的(版本1):_Android_Opengl_Opengl Es_Android Ndk - Fatal编程技术网

glDrawArrays()在绘制过多元素时出错 我有一些简单的OpenGL ES代码,C++运行在运行Android的手机上,运行WebOS的手机,和我的Mac使用SDL/OpenGL。所讨论的代码只是绘制了一个GL\u LINE\u STRIP,它存储在GLfloats的数组中。下面是我如何做到这一点的(版本1):

glDrawArrays()在绘制过多元素时出错 我有一些简单的OpenGL ES代码,C++运行在运行Android的手机上,运行WebOS的手机,和我的Mac使用SDL/OpenGL。所讨论的代码只是绘制了一个GL\u LINE\u STRIP,它存储在GLfloats的数组中。下面是我如何做到这一点的(版本1):,android,opengl,opengl-es,android-ndk,Android,Opengl,Opengl Es,Android Ndk,看起来应该很简单。然而,上面的代码在Android和我的Mac上的OpenGL驱动程序中出现了错误(无论出于何种原因,在webOS上似乎运行良好)。下面是我要做的事情,以避免出现这种情况(版本2): 请注意,前两个条件跳转错误每次都会发生,可能不是我的应用程序的问题。无效读取错误仅在我尝试在OSX上使用版本1时发生。它可能与顶点数组完全无关。例如,可能仍然有指向其他顶点属性集的指针,当然,如果这些属性集的缓冲区比新顶点数组的缓冲区小,那么您将得到一个segfault 如果仔细观察valgrind

看起来应该很简单。然而,上面的代码在Android和我的Mac上的OpenGL驱动程序中出现了错误(无论出于何种原因,在webOS上似乎运行良好)。下面是我要做的事情,以避免出现这种情况(版本2):


请注意,前两个条件跳转错误每次都会发生,可能不是我的应用程序的问题。无效读取错误仅在我尝试在OSX上使用版本1时发生。

它可能与顶点数组完全无关。例如,可能仍然有指向其他顶点属性集的指针,当然,如果这些属性集的缓冲区比新顶点数组的缓冲区小,那么您将得到一个segfault

如果仔细观察valgrind输出,就会发现仍然存在纹理坐标指针集

因此,我建议您禁用所有不需要的顶点属性数组:

glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
/* ... */
就你而言

glDisableClientState(GL_TEXTURE_COORD_ARRAY);

它可能与顶点数组完全无关。例如,可能仍然有指向其他顶点属性集的指针,当然,如果这些属性集的缓冲区比新顶点数组的缓冲区小,那么您将得到一个segfault

如果仔细观察valgrind输出,就会发现仍然存在纹理坐标指针集

因此,我建议您禁用所有不需要的顶点属性数组:

glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
/* ... */
就你而言

glDisableClientState(GL_TEXTURE_COORD_ARRAY);

当然,现在看来很明显。成功了
GL_纹理_坐标_阵列
确实是罪魁祸首。我真不敢相信这件事让我难堪了这么久:)谢谢。如果你开始“测量”那些“让你的程序工作”的数字,这永远是一个线索,从根本上说有些事情出了问题。当然,如果你的程序与物理世界相互作用,那么这一切都与测量有关。但是,如果你的内存访问模式依赖于一些神奇的数字,那么是时候停止代码混乱,开始思考实际发生了什么。在您的例子中,您遇到了一些甚至会在没有指针的语言中崩溃的问题。例如,Python OpenGL绑定也容易受到这种错误的影响,并且会以同样的方式崩溃。成功了
GL_纹理_坐标_阵列
确实是罪魁祸首。我真不敢相信这件事让我难堪了这么久:)谢谢。如果你开始“测量”那些“让你的程序工作”的数字,这永远是一个线索,从根本上说有些事情出了问题。当然,如果你的程序与物理世界相互作用,那么这一切都与测量有关。但是,如果你的内存访问模式依赖于一些神奇的数字,那么是时候停止代码混乱,开始思考实际发生了什么。在您的例子中,您遇到了一些甚至会在没有指针的语言中崩溃的问题。例如,Python OpenGL绑定也容易受到这种错误的影响,并且会以同样的方式崩溃。
glDisableClientState(GL_TEXTURE_COORD_ARRAY);