История изменений
Исправление LINUX-ORG-RU, (текущая версия) :
С расширениями gcc или юзая c++ для компиляции можно юзать raw чё-то там вот так
шейдер в отдельном файле
R"(
layout(location = 0) in vec2 pos;
void main()
{
gl_Position = vec4(pos, 0.0f, 1.0f);
})"
сишка
#include <stdio.h>
int main(int argc, char *argv[])
{
const char default_shader[] =
{
#include "shader.fs"
};
printf("%s\n",default_shader);
}
выхлоп
dron@gnu:~$ gcc ccc.c
dron@gnu:~$ ./a.out
layout(location = 0) in vec2 pos;
void main()
{
gl_Position = vec4(pos, 0.0f, 1.0f);
}
dron@gnu:~$
Плюсы
- 1 Сохраняется форматирование
- 2 Автоматическое встраивание шейдера в код во время сборки
- 3 Шейдер это отдельный файл, просто удобно редактировать
Минусы
-
R"(text)" не позволит юзать шейдер как загружаемый файл, но если загружаем можно вырезать
R"(
в начале и)"
в конце и всё, далее слинковать шейдер. -
После линковки шейдера который вшит, сам текст шейдера больше не нужен, но выгрузить его никак ибо он вшит + пару килобайт может быть памяти всё это займёт. Сомнительный минус, но всё же =)
По итогу. Можно иметь по умолчанию вкомпиленый в код шейдер автоматически забираемый во время сборки, не надо лезть в сишный исходник что-бы его править, при надобности можно изменить и перезагрузит тот же самый шейдер уже из файла, а если что не так сбросить на железно работающий из исходника. Довольно таки удобно. В релизной игре /софтине можно текстовые шейдеры выкинуть вообще ибо они и так уже вшиты.
UDP: Не fs а vs. =)
Исходная версия LINUX-ORG-RU, :
С расширениями gcc или юзая c++ для компиляции можно юзать raw чё-то там вот так
шейдер в отдельном файле
R"(
layout(location = 0) in vec2 pos;
void main()
{
gl_Position = vec4(pos, 0.0f, 1.0f);
})"
сишка
#include <stdio.h>
int main(int argc, char *argv[])
{
const char default_shader[] =
{
#include "shader.fs"
};
printf("%s\n",default_shader);
}
выхлоп
dron@gnu:~$ gcc ccc.c
dron@gnu:~$ ./a.out
layout(location = 0) in vec2 pos;
void main()
{
gl_Position = vec4(pos, 0.0f, 1.0f);
}
dron@gnu:~$
Плюсы
- 1 Сохраняется форматирование
- 2 Автоматическое встраивание шейдера в код во время сборки
- 3 Шейдер это отдельный файл, просто удобно редактировать
Минусы
-
R"(text)" не позволит юзать шейдер как загружаемый файл, но если загружаем можно вырезать
R"(
в начале и)"
в конце и всё, далее слинковать шейдер. -
После линковки шейдера который вшит, сам текст шейдера больше не нужен, но выгрузить его никак ибо он вшит + пару килобайт может быть памяти всё это займёт. Сомнительный минус, но всё же =)
По итогу. Можно иметь по умолчанию вкомпиленый в код шейдер автоматически забираемый во время сборки, не надо лезть в сишный исходник что-бы его править, при надобности можно изменить и перезагрузит тот же самый шейдер уже из файла, а если что не так сбросить на железно работающий из исходника. Довольно таки удобно. В релизной игре /софтине можно текстовые шейдеры выкинуть вообще ибо они и так уже вшиты.