Современный OpenGL (4.6) - Компиляция шейдера в библиотеку - PullRequest
0 голосов
/ 02 ноября 2019

Я хочу создать очень простой 2D игровой движок, чтобы поиграть и учиться. Для этого мне пришла идея написать движок на с ++ и скомпилировать его в библиотеку вместе с заголовочным файлом, чтобы я мог просто включить их в свой проект, создать экземпляр класса движка и начать с него. По сути, я не хочу работать с кодом OpenGL непосредственно в самом проекте.

Я использую GLAD вместе с GLFW, если это имеет какое-либо отношение

Чтобы нарисовать контент на экране, я хочу нарисоватьполноэкранный четырехугольник и примените мои пиксели к нему в качестве текстуры, но теперь возникает проблема:

В современном OpenGL вы должны использовать программируемый конвейер, который включает шейдеры, и я не уверен, как добавить чертеж на экран. в мою библиотеку без необходимости добавления самого шейдера в проект, который использует движок. Я бы хотел свести к минимуму количество включений и т. Д.

В основном вопрос сводится к следующему: можете ли вы каким-то образом скомпилировать шейдеры в библиотеку?

Если нет, или у кого-то есть лучшиепредложение о том, как программировать этот рисунок на экране. Подсказки приветствуются

1 Ответ

2 голосов
/ 02 ноября 2019

Нет требования, чтобы шейдер был файлом. Вы можете сохранить код шейдера в переменной и таким образом скомпилировать его в библиотеку. То, как вы это сделаете, зависит от вас, например, вы можете использовать constexpr const char*:

constexpr const char *DefaultVertexShader = 
"#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"  
"out vec4 vertexColor;\n"
"void main() {\n"
"gl_Position = vec4(aPos, 1.0);\n"
"vertexColor = vec4(0.5, 0.0, 0.0, 1.0);\n"
"}\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...