2013-09-03 1 views
0

Я использую open gl для генерации Gaussian Parimid, создаю 2D-текстуру с mipmap и привязываю к массиву FBO, FBO [0] -> базовый уровень текстуры, FBO [1] -> уровень 1 текстуры и так далее ...Shader не работает, если я связываю framebuffer с mipmap текстурой

Платформа: 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(); 

Если т == 0, шейдер будет вызываться, но если m> 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, это как положить пирамида из вертикальной в горизонтальную.

Смежные вопросы