glTexSubImage2D -> GL_INVALID_OPERATION - PullRequest
       4

glTexSubImage2D -> GL_INVALID_OPERATION

2 голосов
/ 08 марта 2012

Почему glTexSubImage2D () внезапно вызывает GL_INVALID_OPERATION?

Я пытаюсь обновить безнадежно устаревшее приложение дополненной реальности с iOS4.x до iOS5.xно у меня трудности.Я запускаю iOS5.0.На прошлой неделе я запускал iOS4.3.Мое устройство iPhone4.


Вот фрагмент из моего captureOutput:didOutputSampleBuffer:fromConnection: кода

uint8_t *baseAddress = /* pointer to camera buffer */
GLuint texture = /* the texture name */
glBindTexture(GL_TEXTURE_2D, texture);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 480, 360, GL_BGRA, GL_UNSIGNED_BYTE, baseAddress);
/* now glGetError(); -> returns 0x0502 GL_INVALID_OPERATION on iOS5.0, works fine on iOS4.x */

Вот фрагмент из моего установочного кода

GLuint texture = /* the texture name */
glGenTextures(1, &texture);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

Для простоты я вставил здесь жестко закодированные значения.В моем реальном коде я получаю эти значения с помощью CVPixelBufferGetWidth / Height / BaseAddress.EAGLContext инициализируется с помощью kEAGLRenderingAPIOpenGLES2.

1 Ответ

6 голосов
/ 08 марта 2012

Ах .. Я исправил это сразу после публикации этого вопроса. Пришлось изменить GL_RGBA на GL_BRGA.

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);

Надеюсь, это кому-нибудь поможет.

КСТАТИ. Если вы хотите писать AR-приложения, рассмотрите возможность использования CVOpenGLESTextureCache вместо glTexSubImage2d. Это должно быть быстрее.

...