如何在Android上启用OpenGL扩展GL_EXT_shader_framebuffer_fetch?

问题描述:

我开发一个Android应用程序与OpenGL ES 2.0的,我想用GL_EXT_shader_framebuffer_fetch扩展如何在Android上启用OpenGL扩展GL_EXT_shader_framebuffer_fetch?

根据我的理解,我需要先使用我的片段着色器顶部的#extension指令启用它,然后我可以使用内置变量gl_LastFragData

因此,这里是我的片段着色器:

#extension GL_EXT_shader_framebuffer_fetch : require 
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <- Enable the extension 

varying highp vec2 textureCoords; 
uniform sampler2D currentTexture; 

void main() 
{ 
    vec4 currentColor = texture2D(currentTexture, textureCoords); 
    gl_FragColor = currentColor; 
} 

然而,当我编译着色器,我得到以下编译错误:

Couldn't compile shader: Fragment shader compilation failed. 
ERROR: 0:1: '' :  GLSL error: extension 'GL_EXT_shader_framebuffer_fetch' is not supported 
ERROR: 1 compilation errors. No code generated. 

的错误是很明确的:这个扩展不支持

我的技术规格:

  • 硬件:三星Galaxy S4
  • Android版本:5.0.1
  • Android的API级别:21
  • 的OpenGL版本glGetString(GL_VERSION)):OpenGL ES 3.0 [email protected] AU @(CL @)

我有几个问题:

  • 有什么我可以做安装这个扩展我的设备上?
  • 如果没有,我可以安装/使用它的模拟器
  • 是不是软件事情还是真的有硬件问题?

Is there anything I can do to install this extension on my device?

不; GPU和驱动程序都支持它,或者它们不支持。

If not, can I install it/use it on an emulator?

如果仿真器支持扩展,然后是你可以用它...

Is it a software matter or really a hardware problem?

可能是因为存在底层硬件的限制,或在驱动程序的限制。从应用程序开发人员的角度来看,这两者是不可分割的,所以它是无关紧要的,这是真正的限制...