我很久以前就用hlsl / glsl着色器代码看到了这一点 - 在源代码文件上使用#include
将代码粘贴到char*
中,以便在运行时不会发生文件IO
如果我将它表示为伪代码,它看起来会像这样:
#define CLSourceToString(filename) " #include "filename" "
const char* kernel = CLSourceToString("kernel.cl");
当然,#define
当然不会起作用,因为它只会尝试使用这些引号来启动字符串。
答案 0 :(得分:12)
请参阅子弹物理引擎使用OpenCL for how对kernel执行此操作。
在C ++ / C源代码
#define MSTRINGIFY(A) #A
char* stringifiedSourceCL =
#include "VectorAddKernels.cl"
在OpenCL源代码中
MSTRINGIFY(
__kernel void VectorAdd(__global float8* c)
{
// snipped out OpenCL code...
return;
}
);
答案 1 :(得分:4)
根据this,这是不可能的,但您可以使用xxd -i
来达到同样的效果。