Я пишу приложение для Mac OS X с OpenGL 2.1
У меня есть CVOpenGLTextureRef
, в котором хранится текстура, которую я отрисовываю с помощью GL_QUADS, и все отлично работает.
Я сейчаснеобходимо определить, какие пиксели текстуры являются черными, поэтому я написал этот код для чтения необработанных данных из текстуры:
//"image" is the CVOpenGLTextureRef
GLenum textureTarget = CVOpenGLTextureGetTarget(image);
GLuint textureName = CVOpenGLTextureGetName(image);
glEnable(textureTarget);
glBindTexture(textureTarget, textureName);
GLint textureWidth, textureHeight;
int bytes;
glGetTexLevelParameteriv(textureTarget, 0, GL_TEXTURE_WIDTH, &textureWidth);
glGetTexLevelParameteriv(textureTarget, 0, GL_TEXTURE_HEIGHT, &textureHeight);
bytes = textureWidth*textureHeight;
GLfloat buffer[bytes];
glGetTexImage(textureTarget, 0, GL_LUMINANCE, GL_FLOAT, &buffer);
GLenum error = glGetError();
glGetError()
сообщает GL_NO_ERROR
, но буфер остается неизменным после вызова glGetTexImage()
... все еще пусто.
Я что-то не так делаю?
Обратите внимание, что я не могу использовать glReadPixels()
, потому что я изменяю текстуру перед ее рендерингом, и мне нужно получить rawданные неизмененной текстуры.
РЕДАКТИРОВАТЬ: Я пытался даже с последовательным подходом, но у меня все еще есть нулевой буфер в качестве вывода
unsigned char *buffer = (unsigned char *)malloc(textureWidth * textureHeight * sizeof(unsigned char));
glGetTexImage(textureTarget, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, buffer);
EDIT2: Об этой же проблеме сообщается здесь и здесь