我想要这样的东西:
#include <QImage>
void __kernel dither(__global int* image, __global int* result)
{
int red = qRed(image[get_global_id(0)]);
//...
}
但是我得到一个运行时错误:
Invalid parameter passed to C runtime function.
如何解决?
主持人:
std::ifstream sourceFile("OrderedDitheringKernel.cl");
std::string kernelCode(std::istreambuf_iterator<char>(sourceFile),(std::istreambuf_iterator<char>()));
qDebug() << QString::fromStdString(kernelCode);
sources.push_back({kernelCode.c_str(), kernelCode.length()});
cl::Program program(context, sources);
if (program.build({defaultDevice}) != CL_SUCCESS)
{
std::cerr << "Error while building kernel: " <<
program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(defaultDevice) << std::endl;
exit(1);
}
else
qDebug() << "Kernel compiled succesfully\n";
最佳答案
您不能将 C 或 C++ header 包含到 OpenCL C 代码中,也不能链接到静态或共享 C/C++ 库。
OpenCL C 是C 语言的一个子集,不支持普通意义上的链接。因此,只有 OpenCL C 源文件可以通过“#include”预处理器指令包含或在程序构建阶段一起编译成一个二进制文件。
关于c++ - 如何将 Qt 头文件包含到内核中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21699961/