Вы имеете в виду, что вы хотите, чтобы шейдеры были встроены как строки в ваш двоичный файл? Мне не известны какие-либо кроссплатформенные инструменты / библиотеки для этого, что неудивительно, потому что двоичные файлы будут разных форматов.
Для Windows звучит так, как будто вы хотите сохранить их как строковый ресурс . Затем вы можете прочитать строку, используя LoadString()
. Вот как их добавить , но вы не можете связать их с файлом.
Особенно хакерским, но кроссплатформенным решением может быть написание скрипта для преобразования ваших шейдеров в строковую константу в заголовке. Тогда вы можете просто #include
это в своем коде.
т.е. у вас есть файл myshader.shader
, который содержит:
int aFunction(int i, int j)
{
return i/j;
}
И у вас есть шаг сборки, который создает файл myshader.shader.h
, который выглядит следующим образом:
const char[] MYSHADER_SHADER =
"int aFunction(int i, int j)"
"{"
" return i/j;"
"}";
Затем добавьте #include "myshader.shader.h"
к вашему коду.
Очень хакерский, но я не вижу причин, почему это не сработало (за исключением, возможно, ограничений длины / пространства для строковых литералов).
Обновление: с выпуском G ++ 4.5 он поддерживает необработанные строковые литералы C ++ 0x. Они могут содержать новые строки 4 . Я не проверял это, но вы должны быть в состоянии сделать что-то вроде этого:
const char[] MY_SHADER = R"qazwsx[
#include "my_shader.c"
]qazwsx";
Я еще не проверял это.