如果我将framebuffer绑定到mipmap纹理,则Shader不会运行

时间:2013-09-03 13:07:47

标签: android opengl-es

我使用open gl生成Gaussian Parimid,我使用mipmap创建2D纹理,并绑定到FBO的数组,FBO [0] - >基础层次的质地,FBO [1] - > 1级纹理等......

平台:Android OpenGL ES 2.0

运行以下代码时:

gaussV.Use();
glUniform1f(gaussV("mip_level"), 0.0);  //some param to shader
glUniform1f(gaussV("delta"), 1.0f / h);  // some param to shader
glBindFramebuffer(GL_FRAMEBUFFER, filterFBO_IDs[m]);
draw(gaussV("vPosition")); // draw arrays.
gaussV.UnUse();

如果m == 0,将调用着色器,但如果m> 0,则不会调用着色器程序。

1 个答案:

答案 0 :(得分:2)

从opengl es3.0规范(http://www.khronos.org/registry/gles/specs/3.0/es_spec_3.0.2.pdf),我们可以看到新闻功能列表,其中一个是:

ability to attach any mipmap level to a framebuffer object

这意味着在opengl es2.0中,它不支持渲染到特定的纹理级别。

那么如果需要渲染到特定的mipmap级别,如何解决这个问题?

  • 1)创建更多纹理来渲染一个,每个纹理对应一个 一级mipmap,这种方式会创建很多纹理,效率不高。

  • 2)创建一个大的纹理来保存所有级别的mipmap,就像put一样 金字塔从垂直到水平。