Состояния драйвера nVidia GL: Текстура 0 несовместима с базовым уровнем - PullRequest
0 голосов
/ 08 мая 2019

Я использую 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

...