我需要創建類型GL_TEXTURE_RECTANGLE_EXT的OpenGL的質感,讓我可以使用如何將CVImageBufferRef轉換爲一個OpenGL紋理
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紋理?
我試過使用CVOpenGLTextureGetName(imageBuffer),它似乎返回null。我得到了'2011-11-20 12:23:52.607 Quartz Composer [18612:407] *** EXCEPTION IGNORED: - [CaptureWithDevice outputImageProviderFromTextureWithPixelFormat:pixelsWide:pixelsHigh:name:flipped:releaseCallback:releaseContext:colorSpace:shouldColorMatch:]:Argument當我運行它時,「name」不能爲空' – Adam
在閱讀你提到的另一個線程之後,我認爲它返回null的原因是因爲我的imageBuffer不是OpenGL緩衝區。所以,我仍然需要從像素緩衝區轉換一個開放的GL紋理。 – Adam
啊,我明白了。那麼你可以嘗試原始數據路線。不幸的是,我沒有做很多CoreVideo的工作。 – James