【发布时间】: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