gpt4 book ai didi

opengl - 无法获取指定着色器类型的子例程信息

转载 作者:行者123 更新时间:2023-12-02 03:47:21 27 4
gpt4 key购买 nike

我正在使用分离的着色器对象程序,现在正尝试集成子程序。

我使用 glGetSubroutineIndex() 获取子例程索引。然后我设置当前子例程:

glUniformSubroutinesuiv(GL_FRAGMENT_SHADER,1,&( _subrotines.find(method)->second));

我收到以下 OpenGL 错误消息:

"ID:1282 , SEVERITY:HIGH , Message: GL_INVALID_OPERATION error generated.Could note get subroutine info for the specified shader type. "

下面是我在片段着色器中定义子程序的方式:

subroutine vec4 RenderMode();
subroutine uniform RenderMode renderMode;

subroutine (RenderMode)
vec4 lightsMode(){

// returns some color
}
subroutine (RenderMode)
vec4 colorMode(){

// returns some color
}

void main(void){

vec4 fragout =renderMode();
OUTPUT= fragout;
}

当我使用常规着色器程序时它确实工作正常,但似乎不适用于单独的着色器程序。

最佳答案

在使用 glUniformSubroutinesuiv() 选择子例程之前,您需要先使用着色器程序。这些步骤是:

glUseProgram(program);
glUniformSubroutinesuiv(...);
glUseProgram(0);

请记住,取消使用您的程序将重置您的子例程选择。因此,您将不得不再次调用 glUniformSubroutinesuiv()

关于opengl - 无法获取指定着色器类型的子例程信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16081898/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com