代码之家  ›  专栏  ›  技术社区  ›  rioki

在GLSL中外部定义预处理器宏

  •  22
  • rioki  · 技术社区  · 16 年前

    GLSL有一个完整的C风格的预处理器。唯一不起作用的是“包含”。其中一个很好的特性是,您可以使用ifdef注释掉函数,从而创建一个着色器,如果不使用某些特性,可以将其细化。

    我的问题是:

    2 回复  |  直到 16 年前
        1
  •  25
  •   Bahbar    16 年前

    你不需要将它预先添加到你加载的代码中。这就是为什么glshadersourcearbapi中有多个字符串。

    下面这样的内容可以满足您的要求:

    char *sources[2] = { "#define FOO\n", sourceFromFile };
    glShaderSourceARB(shader, 2, sources, NULL);
    
        2
  •  7
  •   johan d    13 年前

    这是我用来避免的 #version

    // extract shader sourcecode from file
    StringBuilder shaderSource = Tools.readTextRessource(shaderSrcFile.url);
    
    // apply defined values
    int versionIndex = shaderSource.indexOf("#version");
    if(versionIndex == -1) err("missing #version xxx in shader "+shaderSrcFile.name());
    int defineInsertPoint = shaderSource.indexOf("\n", versionIndex)+1;
    
    for (int i = defined.size() - 1; i >= 0; --i)
        shaderSource.insert(defineInsertPoint, "#define " + defined.get(i) + "\n");