Android 如果将帧缓冲区绑定到mipmap纹理,则着色器未运行

Android 如果将帧缓冲区绑定到mipmap纹理,则着色器未运行,android,opengl-es,Android,Opengl Es,我正在使用OpenGL生成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

我正在使用OpenGL生成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,将不调用着色器程序。

从opengl es3.0规范()中,我们可以看到新闻功能列表,其中一个是:

ability to attach any mipmap level to a framebuffer object
这意味着在opengl es2.0中,它不支持渲染到特定的纹理级别

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

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

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