我正在使用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
显卡:英伟达 GTX750Ti
GL 版本:核心配置文件 3.3
驱动程序:NVIDIA 390.116