提升精神解析GLSL变化

时间:2014-02-19 14:32:48

标签: c++ opengl boost glsl boost-spirit

Boost :: spirit似乎包含了很多模板魔法,我无法理解文档。 我想解析GLSL(OpenGL Shader源代码)并从源中提取和输出属性名称及其类型。我将GL API版本限制为GL 3.3,因此使用简单的GL_ARB_interface_query是没有选项的,我需要直接从着色器源读取字符串。

以下是我在“vec2 ks_Vertex”中尝试提取的GLSL源代码。 “在SpriteTexID中扁平化;”部分。棘手的部分是,一些外部变化在接口块中如下:

out VertexData {
    smooth vec4 Color;
    smooth vec2 TexCoord;
};

我需要提取“VertexData”,“vec4 Color”和“vec2 TexCoord”字符串。 完整的来源:

#version 150
uniform isamplerBuffer ks_MaterialIDBuffer;
in vec2 ks_Vertex;
in vec4 ks_Color;
in vec2 ks_TexCoord;

layout(shared) uniform Camera {
    vec2 Position;
    vec4 Viewport;
    mat4 ModelviewProjMatrix;
    mat4 ModelviewMatrix;
    mat4 ProjectionMatrix;
};

out VertexData {
    smooth vec4 Color;
    smooth vec2 TexCoord;
} Out;

flat out int SpriteTexID;
flat out int SpriteMaterialID;

void main()
{
    int sprid = gl_VertexID / 4;
    ivec4 material = texelFetch(ks_MaterialIDBuffer, sprid);
    Out.Color = ks_Color;
    Out.TexCoord = ks_TexCoord;
    gl_Position = ModelviewProjMatrix * vec4(ks_Vertex, 0.0f, 1.0f);
    SpriteTexID = material.r;
    SpriteMaterialID = material.g;
}

我特别需要不同的名称,但我不知道如何使用boost :: spirit构造这样的解析器。我几乎没有制作一个计算单词的词法分析器。如何用boost :: spirit定义这样的解析器?

0 个答案:

没有答案