无需编写自定义解析器即可将OpenGL Shader变量转换为C++

Nul*_*low 2 c++ opengl

我找不到任何关于此的内容所以这里是:我要做的是制作一个通用游戏引擎,我希望能够加载任何3D对象并将任何着色器应用于该模型.

我正处于需要知道着色器中顶点属性的位置的位置,因此我可以将它们提供给它glVertexAttribPointer,但是,glVertexAttribPointer将属性的位置作为输入.不同的着色器可以具有不同的顶点位置.有没有办法在着色器中查询属性并将它们存储在c ++的列表中?

回答:我找到了以下答案,更详细地解释了它.

BDL*_*BDL 5

您可以使用查询活动着色器属性glGetActiveAttrib.结合使用glGetAttribLocation,您可以构建这样的查找表.

但即使使用此查找表,您也必须为网格和着色器的每个组合使用不同的VAO.我建议你反过来定义哪个属性位置属于哪个属性.您可以glBindAttribLocation在着色器编译期间强制执行该操作,也可以在着色器中使用布局限定符(layout(location = ...)).使用此功能,您将能够在所有着色器上使用相同的VAO.