我正在使用glDebugMessageCallback捕获OpenGL驱动程序消息。
启用所有消息源和严重性后,程序将触发以下消息:
纹理状态使用警告:纹理0为基本级别不一致。检查纹理大小。
该消息由glReadPixels调用触发,该调用尝试使用PixelBufferObject(PBO)从FBO帧缓冲区中读取深度值。
确切的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,并且已完成。
FBO的颜色纹理(800x640像素)是使用以下方法创建的:
glTexImage2D
(
GL_TEXTURE_2D,
0,
GL_RGBA,
w, h,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
0
);
FBO的深度纹理(800x640像素)是使用以下方法创建的:
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 。
glGetError()不返回错误。
操作系统:Ubuntu LTS
GPU :nVidia GTX750Ti
GL版本:核心配置文件3.3
驱动程序:NVIDIA 390.116