当我使用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与另一个上下文共享它就不能使用它。
这就是为什么它不起作用。
另一个选择是在两个上下文中编译和链接着色器。