Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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
Opengl glDrawArray+;VBO增加内存占用_Opengl - Fatal编程技术网

Opengl glDrawArray+;VBO增加内存占用

Opengl glDrawArray+;VBO增加内存占用,opengl,Opengl,我正在编写一个基于Windows的OpenGL查看器应用程序。 我正在使用VBO+三角形条带+glDrawArrays方法来渲染我的网格。在所有的机器上,每件东西都能完美地工作。 对于装有nVidia Quadro卡的Windows桌面,当我第一次调用glDrawArray时,工作/峰值工作内存将被触发。 如果笔记本电脑具有nvidia移动图形卡,则工作内存或峰值工作内存不会触发。从最近几天开始,我检查了几乎所有关于VBO内存问题的论坛/帖子/教程。尝试了VBO的所有组合,如GL_STATIC_

我正在编写一个基于Windows的OpenGL查看器应用程序。 我正在使用VBO+三角形条带+glDrawArrays方法来渲染我的网格。在所有的机器上,每件东西都能完美地工作。 对于装有nVidia Quadro卡的Windows桌面,当我第一次调用glDrawArray时,工作/峰值工作内存将被触发。 如果笔记本电脑具有nvidia移动图形卡,则工作内存或峰值工作内存不会触发。从最近几天开始,我检查了几乎所有关于VBO内存问题的论坛/帖子/教程。尝试了VBO的所有组合,如GL_STATIC_DRAW/DYNAMIC/STREAM、glMapbuffer/glunmapbuffer。但没有什么能阻止我在桌面上释放内存。 我怀疑对于带有OGL1.5的VBO,我缺少了一些标志。 附言:我的应用程序中几乎有500到600个VBO。我正在使用结构数组(即v、n、c、t组合在一个结构中)。我没有将VBO与16k内存对齐。
有谁能建议我如何着手解决这个问题吗。任何提示/指针都会很有帮助。

您的应用程序是否真的耗尽了内存,还是越来越多地消耗内存?如果没有,为什么要麻烦呢?如果OpenGL实现为自己保留了一个工作副本,那么这可能是有原因的。此外,在OpenGL方面,您几乎无法避免这种情况,因为这完全取决于驱动程序如何管理其内容。我认为,如果你真的想保持低内存占用,最好的做法是联系NVidia,这样他们就可以再次检查这是否是他们的驱动程序中的错误。

如果你是新来的,一定要告诉自己接受和向上投票的功能。Thanx datenwolf…我想问问NVidia的人。我的主要问题是,并非所有机器都会发生这种情况。为了改进我的产品,我至少应该知道原因。@user368912:OpenGL假设执行渲染的机器的抽象模型。驱动程序/GPU组合可以自由地执行任何需要遵循OpenGL规范的操作。例如,OpenGL对象(如纹理或顶点缓冲区对象)可能需要在系统内存中添加一些副本,以便在GPU上重新创建它们,以防它们从GPU内存中删除。例如,GPU可能会崩溃,驱动程序会透明地重新启动它,因此需要系统RAM中的数据的完整副本。或者为其他并行访问GPU、交换对象的应用程序提供驱动程序。