使用OpenGL分配VBO后,我使用clCreateFromGLBuffer
从中创建一个OpenCL缓冲区。
我将VBO用作GLfloat
的数组,将OpenCL缓冲区用作cl_float
的数组。它在我的机器上完美运行。实际上,GLfloat
和cl_float
(和float
)的大小相同。
我想知道这是否会在任何地方完美无缺。换句话说,sizeof(GLfloat) == sizeof(cl_float)
总是如此吗? * 如果没有,通常如何解决这个问题?
*并且有证明这个的文件
答案 0 :(得分:3)
是的,如果你看看CL和GL标题,你会得到:
typedef float cl_float; // @cl_platform.h
typedef float GLfloat; // @gl.h
请注意,在某些GL实现中,您获得了khronos_float_t
之类的中间typedef,但最终归结为float
类型。因此两种类型都与您的本机浮点类型相同。此外,OpenCL kernels和OpenGL shaders中的等效数据类型都保证符合IEEE754标准。
相关标题的链接:cl_platform.h,GL标题取决于您获取它的位置(它们在操作系统与操作系统和供应商之间略有不同),请查看您的标题。示例:gl.h(GLES版本),gl.h(FreeBSD nVidia版本),gl.h(某些随机版本)。