Вопрос

Я давно видел, как это делается с помощью шейдерного кода hlsl / glsl - с помощью #include в файле исходного кода, который вставляет код в char * чтобы во время выполнения не происходил ввод-вывод файла.

Если бы я представлял его как псевдокод, он выглядел бы примерно так:

#define CLSourceToString(filename) " #include "filename" "
const char* kernel = CLSourceToString("kernel.cl");

Теперь, конечно, #define не будет работать, потому что он просто попытается использовать эти кавычки для запуска строк.

Это было полезно?

Решение

Посмотрите, как в OpenCL используются движки физики маркеров для как сделать это с kernel .

В C ++ / C source

#define MSTRINGIFY(A) #A
char* stringifiedSourceCL = 
#include "VectorAddKernels.cl"

В исходном коде OpenCL

MSTRINGIFY(
   __kernel void VectorAdd(__global float8* c)
   {
    // snipped out OpenCL code...
    return;
   }
);

Другие советы

Согласно этому , это невозможно, но вы можете использовать xxd -i для архивации того же эффекта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top