【发布时间】:2012-12-05 16:34:33
【问题描述】:
所以我已经设置了 CVPixelBuffer,并在 iOS 上成功地将它们绑定到 OpenGL FBO。但是现在尝试在 OSX 上做同样的事情让我陷入了困境。
来自 CVOpenGLTextureCacheCreateTextureFromImage 的纹理返回为 GL_TEXTURE_RECTANGLE 而不是 GL_TEXTURE_2D 目标。
我找到了 kCVOpenGLBufferTarget 键,但它似乎应该与 CVOpenGLBufferCreate 而不是 CVPixelBufferCreate 一起使用。
是否可以在 OSX 上使用 CVPixelBufferCreate 获得 GL_TEXTURE_2D 目标纹理,如果可以,如何实现?
FWIW CV PBO 设置列表:
NSDictionary *bufferAttributes = @{ (__bridge NSString *)kCVPixelBufferPixelFormatTypeKey : @(kCVPixelFormatType_32BGRA), (__bridge NSString *)kCVPixelBufferWidthKey : @(size.width), (__bridge NSString *)kCVPixelBufferHeightKey : @(size.height), (__bridge NSString *)kCVPixelBufferIOSurfacePropertiesKey : @{ } };
if (pool)
{
error = CVPixelBufferPoolCreatePixelBuffer(kCFAllocatorDefault, pool, &renderTarget);
}
else
{
error = CVPixelBufferCreate(kCFAllocatorDefault, (NSUInteger)size.width, (NSUInteger)size.height, kCVPixelFormatType_32BGRA, (__bridge CFDictionaryRef)bufferAttributes, &renderTarget);
}
ZAssert(!error, @"Couldn't create pixel buffer");
error = CVOpenGLTextureCacheCreate(kCFAllocatorDefault, NULL, [[NSOpenGLContext context] CGLContextObj], [[NSOpenGLContext format] CGLPixelFormatObj], NULL, &textureCache);
ZAssert(!error, @"Could not create texture cache.");
error = CVOpenGLTextureCacheCreateTextureFromImage(kCFAllocatorDefault, textureCache, renderTarget, NULL, &renderTexture);
ZAssert(!error, @"Couldn't create a texture from cache.");
GLuint reference = CVOpenGLTextureGetName(renderTexture);
GLenum target = CVOpenGLTextureGetTarget(renderTexture);
更新:我已经能够成功使用生成的 GL_TEXTURE_RECTANGLE 纹理。但是,这会导致着色器在 iOS 和 OSX 之间的兼容性方面出现很多问题。无论如何,我宁愿继续使用归一化纹理坐标。
如果无法以这种方式直接从 CVPixelBuffer 获取 GL_TEXTURE_2D 纹理,是否可以创建一个 CVOpenGLBuffer 并附加一个 CVPixelBuffer 来提取像素数据?
【问题讨论】:
-
您使用的是核心配置文件吗?
-
考虑到我不知道那是什么,直到你提到它......可能不会。
-
好的,我没有使用 3.2 核心配置文件。即使是现在,Core Video 仍然使用 GL_TEXTURE_RECTANGLE 作为目标。
-
我应该注意到 #import
会导致编译器警告“gl.h 和 gl3.h 都包含在内”。这表明 CoreVideo 没有对我使用 3.2 核心配置文件。 -
我认为如果您使用核心配置文件而不是使用 GL_TEXTURE_2D,至少在 iOS 上是这样。 3.2 应该与 es 2.0 兼容,后者支持 TEXTURE_2D 中的矩形纹理
标签: macos opengl core-video