使用 OpenGL 分配 VBO 后,我使用clCreateFromGLBuffer
.
我将 VBO 用作数组,GLfloat
将 OpenCL 缓冲区用作cl_float
. 它在我的机器上完美运行。确实,GLfloat
和cl_float
(and float
) 具有相同的大小。
我想知道这是否可以完美地工作。换句话说,sizeof(GLfloat) == sizeof(cl_float)
总是正确的?*如果不是,通常如何处理这个问题?
* 是否有文件证明这一点
使用 OpenGL 分配 VBO 后,我使用clCreateFromGLBuffer
.
我将 VBO 用作数组,GLfloat
将 OpenCL 缓冲区用作cl_float
. 它在我的机器上完美运行。确实,GLfloat
和cl_float
(and float
) 具有相同的大小。
我想知道这是否可以完美地工作。换句话说,sizeof(GLfloat) == sizeof(cl_float)
总是正确的?*如果不是,通常如何处理这个问题?
* 是否有文件证明这一点
是的,如果您查看 CL 和 GL 标头,您会得到:
typedef float cl_float; // @cl_platform.h
typedef float GLfloat; // @gl.h
请注意,在某些 GL 实现中,您会得到类似的中间类型定义khronos_float_t
,但最终归结为float
类型。所以这两种类型都与您的本机浮点类型相同。此外, OpenCL 内核和OpenGL 着色器中的等效数据类型都保证符合 IEEE754。
相关标头的链接:cl_platform.h和 GL 标头取决于您从哪里获得它(它们从操作系统到操作系统以及从供应商到供应商略有不同),看看你的。示例:gl.h(GLES 版本)、gl.h(FreeBSD nVidia 版本)、gl.h(一些随机版本)。