【问题标题】:glReadPixels with GL_INT type doesn't return negative valuesGL_INT 类型的 glReadPixels 不返回负值
【发布时间】:2015-07-29 22:51:39
【问题描述】:

我在 OpenGL 中设置了一个片段着色器来计算 YUV 数据,并将其输出到自定义的 Framebuffer 对象。渲染后,我使用 glReadPixels() 将 YUV 数据读回我的应用程序。

当我将 YUV 读回为 GL_FLOAT 时,我得到 V 分量的负值。但是,当我读回与 GL_INT 相同的内容时,我只会得到正值。 GL_INT 不应该给我带符号的整数值吗?有谁知道如何从 glReadPixels() 获取签名整数?

我正在使用带有 GLFW 和 GLEW 的 OpenGL 3.3。

更新:我还尝试使用 GL_SHORT 回读,我能够获得 signed 16 位值。也许这是我系统上的 GL 实现错误。如果其他人可以复制这个,我会很感兴趣。

初始化代码:

// Color Buffer
glGenRenderbuffers(1, &rbYUV);
glBindRenderbuffer(GL_RENDERBUFFER, rbYUV);
glRenderbufferStorage
    (GL_RENDERBUFFER
    ,GL_RGBA32F
    ,width
    ,height
    );

// Depth Buffer
glGenRenderbuffers(1, &rbDepth);
glBindRenderbuffer(GL_RENDERBUFFER, rbDepth);
glRenderbufferStorage
    (GL_RENDERBUFFER
    ,GL_DEPTH_COMPONENT24
    ,width
    ,height
    );

glGenFramebuffers(1, &framebufferObj);
glBindFramebuffer(GL_FRAMEBUFFER, framebufferObj);

// Bind Color and Depth Renderbuffers to the Framebuffer object
glFramebufferRenderbuffer
    (GL_FRAMEBUFFER
    ,GL_COLOR_ATTACHMENT0
    ,GL_RENDERBUFFER
    ,rbYUV
    );
glFramebufferRenderbuffer
    (GL_FRAMEBUFFER
    ,GL_DEPTH_ATTACHMENT
    ,GL_RENDERBUFFER
    ,rbDepth
    );

渲染循环:

// Set up stuff to be rendered...
glDrawArrays(...);
glFlush();

glReadBuffer(GL_COLOR_ATTACHMENT0);
glReadPixels
    (0, 0
    ,width
    ,height
    ,GL_RGBA
    ,GL_FLOAT
    ,p_YUV_float_out
    );
// p_YUV_float_out looks fine
// e.g. "0.49769023  0.085087359  -0.071942836  1.0000000"


glReadPixels
    (0, 0
    ,width
    ,height
    ,GL_RGBA
    ,GL_INT
    ,p_YUV_int_out
    );
// p_YUV_int_out is ok for Y and U, but V isn't negative
// e.g. "1068793704  182719944  309065418 2147483647"
// hex  "3fb47f68 0ae415c8 126bf6ca 7fffffff"

【问题讨论】:

    标签: opengl-3


    【解决方案1】:

    这里是WAG,你可能想看看http://docs.gl/gl3/glPixelStorehttp://docs.gl/gl3/glReadPixels~“控制像素数据在放入客户端内存之前的处理”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多