【问题标题】:Mulitple Fragment Outputs in GLSL 300 esGLSL 300 es 中的多个片段输出
【发布时间】:2015-04-26 02:55:39
【问题描述】:

在为简单的 NDK Opengl ES 3.0 演示编写单元测试时,我在使用多个渲染目标时遇到了问题。考虑这个简单的片段着色器,它有两个输出,在 C++11 字符串文字中声明。

const static std::string multipleOutputsFragment = R"(#version 300 es
    precision mediump float;
    layout(location = 0) out vec3 out_color1;
    layout(location = 1) out vec3 out_color2;
    void main()
    {
        out_color1 = vec3(1.0, 0.0, 0.0);
        out_color2 = vec3(0.0, 0.0, 1.0);
    }
)";

我已经正确设置了一个带有两个颜色附件的 FBO(通过 glFramebufferTexture2D),并且 glCheckFramebufferStatus 以 GL_FRAMEBUFFER_COMPLETE 的形式返回。我也调用 glDrawBuffers(2, &attachments[0]),其中 attachments 是 GL_COLOR_ATTACHMENTi 枚举的向量。之后,我编译和链接着色器,没有任何链接或编译错误(只是使用了与本文无关的简单顶点传递)。

有什么理由可以使用以下 opengles 函数获取 out_color1 的片段位置但不能获取 out_color2 的片段位置?

自动定位 = glGetFragDataLocation(m_programId, name.c_str());

为 0 的 out_color1 返回正确的位置,但是当向 glGetFragDataLocation 提供“out_color2”时,该函数返回 -1。

我正在物理设备 Galaxy S4、Android 4.4.4 Adreno 320、Opengl ES 3.0 上对此进行测试。

【问题讨论】:

  • 您有其他可以试用的设备吗?操作系统在设备上构建的时间有多长?仅从您在此处发布的内容来看,我没有发现任何问题。我发现早期的 ES 3.0 驱动程序有很多 bug。
  • 这是我目前唯一使用 Opengl ES 3.0 的设备。关于升级操作系统版本的好建议。原来我有 Lollipop 5.0.1 更新等着我。不幸的是,升级后问题仍然存在。

标签: android android-ndk glsl opengl-es-3.0


【解决方案1】:

如果你打电话:

glReadBuffer(COLOR_ATTACHMENT_1);
glReadPixels(*); 

你能看到你写入 fbo 的数据吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 2013-07-30
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多