0

我正在使用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

4

0 回答 0