嵌套glsl子例程

时间:2014-02-09 22:26:08

标签: opengl glsl nvidia

我对GLSL和子程序的组成有疑问。简单地说,我希望有两个子程序类型,两个指向当前子程序的类型的制服和这些子程序类型的几个实现,允许一种类型的子程序调用另一种类型的子程序(通过那些子程序制服)< / p>

它的glsl代码如下所示:

subroutine float ComputeShadow(vec3 pos, ...);
subroutine float ExtractDepth(sampler2d depthmap ...);

subroutine uniform ComputeShadow u_CurrentShadowStrategy;
subroutine uniform ExtractDepth u_CurrentExtractDepth;

...
[subroutine(ComputeShadow)]
float SoftShadowAlgorithm(vec3 pos ..)
{
  ...
  float depth = u_CurrentExtractDepth( ...);
  ..
}

void main()
{
  ..
  float shadow = u_CurrentShadowStrategy( ..);
}

在使用Nvidia卡和当前驱动程序(331.20)的Linux上,在链接片段阶段的程序时,应用程序只是因为这段代码而崩溃。该规范根本没有提到这种用法,这个用例对我来说很有意义。

我的问题是:上面的示例是一个合理的子例程用例,它应该有效吗?如果它不应该出于什么原因?

0 个答案:

没有答案