Я пытаюсь визуализировать собственное планарное изображение с текстурой OpenGL ES 2.0 в iOS 4.3 на iPhone 4. Однако текстура оказывается полностью черной. Моя камера настроена следующим образом:
[videoOutput setVideoSettings:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange]
forKey:(id)kCVPixelBufferPixelFormatTypeKey]];
, и я передаю пиксельные данные в свою текстуру следующим образом:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bufferWidth, bufferHeight, 0, GL_RGB_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, CVPixelBufferGetBaseAddress(cameraFrame));
Мои шейдеры фрагментации:
varying highp vec2 textureCoordinate;
uniform sampler2D videoFrame;
void main() {
lowp vec4 color;
color = texture2D(videoFrame, textureCoordinate);
lowp vec3 convertedColor = vec3(-0.87075, 0.52975, -1.08175);
convertedColor += 1.164 * color.g; // Y
convertedColor += vec3(0.0, -0.391, 2.018) * color.b; // U
convertedColor += vec3(1.596, -0.813, 0.0) * color.r; // V
gl_FragColor = vec4(convertedColor, 1.0);
}
, а мой вершинный шейдер -
attribute vec4 position;
attribute vec4 inputTextureCoordinate;
varying vec2 textureCoordinate;
void main()
{
gl_Position = position;
textureCoordinate = inputTextureCoordinate.xy;
}
Это прекрасно работает, когда я ' m работает с изображением BGRA, а мой фрагментный шейдер работает только с
gl_FragColor = texture2D(videoFrame, textureCoordinate);
Что, если мне здесь чего-то не хватает? Спасибо!