glUseProgram не работает в iOS - PullRequest
       7

glUseProgram не работает в iOS

0 голосов
/ 02 декабря 2011

когда я использую glUseProgram, установите программу, затем проверьте текущую программу с помощью 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 ]

3 голосов
/ 02 декабря 2011

Вы используете 2 контекста GL, и shader1, вероятно, был скомпилирован и связан в context1, поэтому он работает.Вам нужно поделиться им (используя какой-то платформо-зависимый API), чтобы иметь возможность использовать его в другом контексте (например, context2), вы не можете просто использовать его без явного указания API поделиться им с другим контекстом.почему это не работает.

Другой вариант - скомпилировать и связать шейдер в обоих контекстах.

1 голос
/ 04 декабря 2011

Как сказал Матиас, вы, скорее всего, создаете шейдер в отдельном контексте, чем тот, с которым вы пытаетесь его использовать. Чтобы это исправить, context2 должен быть создан с помощью sharegroup context1:

EAGLContext* context2 = [[EAGLContext alloc] initWithAPI:context1.API sharegroup:context1.sharegroup];

И после того, как вы создадите shader1 (с context1, являющимся текущим контекстом), обязательно вызовите glFlush () перед переключением на context2, чтобы измененные / созданные ресурсы контекстов были синхронизированы (т.е. создание shader1).

...