Как преобразовать CVImageBufferRef в текстуру OpenGL - PullRequest
0 голосов
/ 19 ноября 2011

Мне нужно создать текстуру OpenGL типа GL_TEXTURE_RECTANGLE_EXT, чтобы я мог использовать

outputImageProviderFromTextureWithPixelFormat:pixelsWide:pixelsHigh:name:flipped:releaseCallback:releaseContext:colorSpace:shouldColorMatch

, но я не могу понять, как преобразовать мой CVImageBufferRef в текстуру OpenGL.Я уверен, что просто не ищу нужную вещь.Как я могу преобразовать CVImageBufferRef в текстуру OpenGL?

Когда я пытаюсь:

   CVImageBufferRef imageBuffer = CVBufferRetain(mCurrentImageBuffer);

    GLuint                  texture = CVOpenGLTextureGetName(imageBuffer);


    id provider= [context outputImageProviderFromTextureWithPixelFormat:QCPlugInPixelFormatARGB8
                                                             pixelsWide:CVPixelBufferGetWidth(imageBuffer)
                                                             pixelsHigh:CVPixelBufferGetHeight(imageBuffer)
                                                                   name:texture
                                                                flipped:NO
                                                        releaseCallback:_TextureReleaseCallback
                                                         releaseContext:NULL
                                                             colorSpace:CVImageBufferGetColorSpace(imageBuffer)
                                                       shouldColorMatch:YES];

Он говорит мне, что «имя» не может быть нулевым.Я думаю, это потому, что мой imageBuffer - это пиксельный буфер, а не текстура OpenGL.Как я могу создать текстуру OpenGL из моего пиксельного буфера?

1 Ответ

0 голосов
/ 20 ноября 2011

В платформе CoreVideo может быть какой-то особый быстрый путь, но вы всегда можете получить необработанные резервные данные и передать их glTexImage2D. Вот ответ на вопрос , который охватывает получение необработанных данных.

Edit:

Копая немного больше, кажется, вы можете просто использовать текстуру OpenGL, уже связанную с вашим CVImageBufferRef, используя CVOpenGLTextureGetTarget и CVOpenGLTextureGetName. Они работают на CVOpenGLTextureRef типах, то есть typedef'd to CVImageBufferRef.

...