3

OpenGL を使用して VBO を割り当てた後、 を使用して OpenCL バッファを作成しclCreateFromGLBufferます。

VBO を の配列として使用しGLfloat、OpenCL バッファを の配列として使用しcl_floatます。私のマシンでは完璧に動作します。確かに、GLfloatand cl_float(and float) は同じサイズです。

これがどこでも完璧に機能するかどうかは疑問です。言い換えれば、sizeof(GLfloat) == sizeof(cl_float)常に真ですか?*そうでない場合、通常はどのように対処しますか?

*これを証明する文書はありますか

4

1 に答える 1

3

はい、CL ヘッダーと GL ヘッダーを確認すると、次のようになります。

typedef float cl_float;          // @cl_platform.h
typedef float GLfloat;           // @gl.h

一部の GL 実装では、中間的な typedef のようなものが得られますkhronos_float_tが、最終的にはすべてがfloat型に帰着することに注意してください。したがって、どちらの型もネイティブの float 型と同じです。さらに、OpenCL カーネルOpenGL シェーダーの同等のデータ型は、どちらも IEEE754 準拠であることが保証されています。

関連するヘッダーへのリンク: cl_platform.h、および GL ヘッダーは、入手した場所によって異なります (OS ごと、ベンダーごとに若干異なります)。あなたのものを見てください。例: gl.h (GLES バージョン)、gl.h (FreeBSD nVidia バージョン)、gl.h (いくつかのランダム バージョン)。

于 2012-08-09T04:30:47.167 に答える