当我使用glUseProgram设置prgram时,然后通过glGetIntegerv(GL_CURRENT_PROGRAM, &pid)检查当前程序,但是pid返回0。所以我不能使用这个着色器。着色器已编译并链接确定。

代码 :

[EAGLContext setCurrentContext:context1];
 glBindFramebuffer(GL_FRAMEBUFFER, Framebuffer1);

//there have many render option use shader1;
//and the shader1 is work normal.
glBindRenderbuffer(GL_RENDERBUFFER,Renderbuffer1);
[context1 presentRenderbuffer:GL_RENDERBUFFER];
glFlush();

[EAGLContext setCurrentContext:context2];
 glBindFramebuffer(GL_FRAMEBUFFER, Framebuffer2);

//than gluseprogram(shader1) ,
//check current shader return 0;
//but no glError
glBindRenderbuffer(GL_RENDERBUFFER,Renderbuffer2);
[context2 presentRenderbuffer:GL_RENDERBUFFER];


为什么我不能再次设置着色器?

最佳答案

您正在使用2个GL上下文,并且shader1可能是在context1中编译和链接的,所以这才起作用。您需要共享它(使用某些平台特定的API)才能在另一个上下文(例如context2)中使用它,而不能不明确地告诉API与另一个上下文共享它就不能使用它。

这就是为什么它不起作用。

另一个选择是在两个上下文中编译和链接着色器。

10-01 16:58