Я использую glDebugMessageCallback для захвата сообщений драйвера OpenGL.
Когда я включаю все источники сообщений и уровни серьезности, моя программа вызывает это сообщение:
Предупреждение об использовании состояния текстуры: Текстура 0 не соответствует базовому уровню.Проверьте размер текстуры.
Сообщение инициируется вызовом glReadPixels , который пытается прочитать значения глубины из кадрового буфера FBO, используя PixelBufferObject (PBO.)
Точный вызов glReadPixels выглядит следующим образом:
glBindBuffer( GL_PIXEL_PACK_BUFFER, pboid );
glReadPixels( srcx, srcy, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, 0 );
И PBO был создан как:
glBindBuffer( GL_PIXEL_PACK_BUFFER, pboid );
glBufferData( GL_PIXEL_PACK_BUFFER, DATA_SIZE, 0, GL_STREAM_READ );
Что на самом деле означает сообщение?Что такое «согласованный базовый уровень»?И к чему относится уровень?
Читаемое FBO имеет COLOR_ATTACHMENT0 и DEPTH_ATTACHMENT и завершено.
Цветная текстура (800x640 текселей) для FBO была создана с помощью:
glTexImage2D
(
GL_TEXTURE_2D,
0,
GL_RGBA,
w, h,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
0
);
Текстура глубины (800x640 текселей) для FBO была создана с помощью:
GLint internal_fmt = GL_DEPTH_COMPONENT24;
glTexImage2D
(
GL_TEXTURE_2D, // target
0, // level
internal_fmt, // internal format
w, h, // width, height
0, // border
GL_DEPTH_COMPONENT, // format
GL_UNSIGNED_INT, // type
0 // pixels
);
glCheckFramebufferStatus (GL_FRAMEBUFFER) возвращает GL_FRAMEBUFFER_COMPLETE .
1036 *.* glGetError () не возвращает ошибок.
ОС : Ubuntu LTS
GPU : nVidia GTX750Ti
GLВерсия : профиль ядра 3.3
Драйвер : NVIDIA 390.116