2012-11-22 33 views
3

检查GPU我得到了(预制的)Opengl的顶点缓冲区对象(VBO)
但我不知道这是GLuint值提交它的OpenCL ..的VBO存在

有任何的OpenGL检查库(像glew)给我现有的VBO及其相应的GLuint,目前在GPU上(或任何类似的..我只知道关于数据输入的数据是阵列中的元素数量和数组大小)

编辑: 为什么我不知道GLuint ...

这是cinema4d opengl api中的一个函数(必须使用这个函数来访问cinema4d VBO)..这个函数(或者我应该说很多类函数)会自动执行这样的操作。

allocSubBuffer ... with * pBuffer (面向对象的C++) mapBuffer ..returns无效* pData所 然后施放此* pData所到的矢量* pvData 然后传递数组值到* pvData 然后unmapbuffer ... 在此之后有一种叫做pFactory ...它自动分配一个新的VBO ...

+0

不确定,但可能没有。只是可能与glGet –

+0

“任何opengl库(像glew)”OpenGL是一个API规范,而不是一个特定的库。 GLEW只是一个使OpenGL API的扩展功能更容易访问的包装器。 – datenwolf

回答

0

但我不知道它是GLuint值

那么你如何使用OpenGL的VBO?你也必须在OpenGL中使用glBindBuffer。 OpenGL对象ID非常珍贵,请保持关闭状态并保持安全。

创建一个OpenGL对象,而不记住它的名字就像分配一些内存与newmalloc,然后扔掉指针:浪费内存。

+0

是的,我知道,在正常的opengl:D 检查编辑 –

+0

@MohamedSakrAboYoucuf:那么在这种情况下,你甚至不能确定是否有一个VBO。从外观上看,你所做的只是将一些数据传递给Cinema4D,它将保留在它的内部结构中,*也许*它将它用于VBO,但也可能不会,或者将它与其他数据合并为一个单一的大型VBO。但为什么你关心呢?只需创建自己的VBO或使用OpenCL API将数据传递给OpenCL即可。 – datenwolf

+0

好吧,我想做一个实时流体模拟 这种模拟的主要瓶颈是内存传输速度...我可以在opencl..transfer做到这一点,但帧速率将大幅下降...想要如果我创建自己的VBO,请使用opengl VBO更快地访问数据 –

0

也许glGetIntegerv(GL_ARRAY_BUFFER_BINDING,& buf)会为你做的伎俩。即你以某种方式强制cinema4d绑定缓冲区,然后查询当前绑定的缓冲区ID。

+0

问题是,你真的不知道是否有一个由Cinema4D使用的VBO。如果是这样,缓冲区只包含那些数据,或者它已被多路复用或放入其他数据之间。 Cinema4D在这方面是一个黑盒子,应该这样对待。 – datenwolf

+0

我想这个问题根本没有好的(通用的)解决方案。所以我们有两难:根本没有解决办法或肮脏的黑客攻击。所以这是肮脏的黑客攻击,但谁在乎它是否能够完成任务。 – DikobrAz