Я нашел ответ на эту проблему:
вызов glTextImage2D
должен быть изменен, чтобы получить правильный базовый адрес CVImageBufferRef
:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bufferWidth, bufferHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddressOfPlane(pixelBuffer));
// should become
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, bufferWidth, bufferHeight, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0));
В случае kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
нам нужно получить первую плоскость, которая содержит данные о яркости. Обратите внимание, что тип данных GL_LUMINANCE
и указатель данных CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0)