LINUX.ORG.RU

История изменений

Исправление 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"( в начале и )" в конце и всё, далее слинковать шейдер.

  • После линковки шейдера который вшит, сам текст шейдера больше не нужен, но выгрузить его никак ибо он вшит + пару килобайт может быть памяти всё это займёт. Сомнительный минус, но всё же =)

По итогу. Можно иметь по умолчанию вкомпиленый в код шейдер автоматически забираемый во время сборки, не надо лезть в сишный исходник что-бы его править, при надобности можно изменить и перезагрузит тот же самый шейдер уже из файла, а если что не так сбросить на железно работающий из исходника. Довольно таки удобно. В релизной игре /софтине можно текстовые шейдеры выкинуть вообще ибо они и так уже вшиты.