C++ 现代OpenGL(4.6)-将着色器编译到库中

C++ 现代OpenGL(4.6)-将着色器编译到库中,c++,opengl,2d,class-library,C++,Opengl,2d,Class Library,我想创建一个非常基本的2D游戏引擎来进行游戏和学习。 为了实现这一点,我想出了一个想法,在C++中编写引擎并将其编译成一个库和一个头文件,这样我就可以把这些文件包含到我的项目中,创建引擎类的实例,并从那里开始。基本上我不想直接在项目中使用OpenGL代码 如果有关联的话,我会和GLFW一起使用GLAD 要将内容绘制到屏幕上,我想绘制一个全屏四边形并将我的像素作为纹理应用到它,但现在出现了问题: 在现代OpenGL中,您必须使用涉及着色器的可编程管道,我不知道如何将图形添加到屏幕到我的库中,而不必

我想创建一个非常基本的2D游戏引擎来进行游戏和学习。 为了实现这一点,我想出了一个想法,在C++中编写引擎并将其编译成一个库和一个头文件,这样我就可以把这些文件包含到我的项目中,创建引擎类的实例,并从那里开始。基本上我不想直接在项目中使用OpenGL代码

如果有关联的话,我会和GLFW一起使用GLAD

要将内容绘制到屏幕上,我想绘制一个全屏四边形并将我的像素作为纹理应用到它,但现在出现了问题:

在现代OpenGL中,您必须使用涉及着色器的可编程管道,我不知道如何将图形添加到屏幕到我的库中,而不必将着色器本身添加到使用引擎的项目中。我想把费用控制在最低限度

基本上,问题归结为:能否以某种方式将着色器编译到库中


如果没有,或者如果有人对如何将此图形编程到屏幕上有更好的建议。欢迎提供提示

不要求着色器必须是文件。可以将着色器代码存储在变量中,从而将其编译到库中。这取决于您自己,例如,您可以使用
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";

不要求着色器必须是文件。可以将着色器代码存储在变量中,从而将其编译到库中。这取决于您自己,例如,您可以使用
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";

简单的着色器只是一个文本字符串。如果只需要简单的四边形,则可以使用c字符串作为着色器。对于更复杂的着色器,这些着色器通常是特定于游戏(应用程序)的,因此不属于库代码。该库应该能够从文本文件加载着色器,编译和管理着色器/程序。简单着色器只是一个文本字符串。如果只需要简单的四边形,则可以使用c字符串作为着色器。对于更复杂的着色器,这些着色器通常是特定于游戏(应用程序)的,因此不属于库代码。库应该能够从文本文件加载着色器,编译和管理着色器/程序。呸,至少使用:)呸,至少使用:)